私はkinectで取得した奥行き画像から背景を減算しようとしています。私はotsuしきい値を知ったとき、それがそれと一緒にできると思った。奥行き画像をグレースケールに変換すると、otsu閾値を適用して画像を二値化することができます。深度画像のための大津閾値処理
しかし、私はOpenCV 2.3でこれを実装(実装しようとしました)、無駄にしました。しかし、出力画像は2値化されますが、非常に予期しないことです。私は閾値処理を連続的に行いました(つまり、各フレームの分析結果を画面に出力します)。いくつかのフレームの閾値は160ishであることがわかりました。それは時には0であることがわかりました。キネクトによって返された深さイメージの0の数が多いことが原因である可能性があります。これは、測定できないピクセルに対応しています。値0のピクセルを無視するようにアルゴリズムに指示する方法はありますか?またはotsu thresholdingは私がやろうとしていることには良くないのですか?
ここには、関連コードのいくつかの出力とセグメントがあります。 2番目のスクリーンショットは、良い2値化ができるように見えるかもしれませんが、シーン内の椅子に対応するピクセルとバックグラウンドとを区別するものを実現したいと思います。
ありがとうございました。それ以外の場合は、配布
cv::Mat1s depthcv(depth->getHeight(), depth->getWidth());
cv::Mat1b depthcv8(depth->getHeight(), depth->getWidth());
cv::Mat1b depthcv8_th(depth->getHeight(), depth->getWidth());
depthcv.data =(uchar*) depth->getDepthMetaData().Data();
depthcv.convertTo(depthcv8,CV_8U,255/5000.f);
//apply otsu thresholding
cv::threshold(depthcv8, depthcv8_th, 128, 255, CV_THRESH_BINARY|CV_THRESH_OTSU);
std::ofstream output;
output.open("output.txt");
//output << "M = "<< endl << " " << depthcv8 << endl << endl;
cv::imshow("lab",depthcv8_th);
cv::waitKey(1);
Ubuntuのプレス 'ALT + prtsc'に単一のウィンドウのスクリーンショットを作成するには。 – ArtemStorozhuk
私は公式のWindows SDKに慣れているので、直接質問に答えることはできません。ただし、Windowsをインストールしている場合、公式のKinect for Windows SDK Toolkitの例には「緑色の画面」の例があります。あなたはそこからいくつかのアイデアを得ることができるかもしれません。多分... ? –
投稿画像を投稿してください – nkint