下の部屋の画像があり、すべての壁の端を検出したいと考えています。私はフィルターのさまざまな組み合わせ(バイラテラル、ガウス、ラプラシアンなど)を試しましたが、最良の組み合わせは次のようです。
- 画像をグレースケールに変換する
- バイラテラル フィルターを適用する
- Canny エッジ検出プロセスを実行する
- さらに 2 つのバイラテラル フィルターを適用して、ノイズを除去します
- 拡張フィルターを適用して、エッジの穴を「塞ぐ」
私が抱えている問題は、何を試しても、天井に隣接する壁を横切る明確な直線エッジを取得できないことです. エッジを暗くするためにいくつかのテクニックを試しましたが、役に立ちませんでした。このエッジを検出するアプリがアプリストアにあるので、それが可能であることはわかっていますが、適用する必要がある前処理フィルターがわかりません。誰かが私を正しい方向に向けてくれることを願っています.
cv::Mat edgeFrame;
cv::Mat grayImage;
cv::Mat blurFrame;
outputFrame=inputFrame.clone();
getGray(inputImage, grayImage);
cv::bilateralFilter(grayImage, blurFrame, 9,80, 80);
cv:Canny(blurFrame, edgeImage,100, 110,5);
cv::bilateralFilter(edgeImage, blurFrame, 21 , 80, 80);
cv::bilateralFilter(blurFrame, edgeImage,21, 100, 150);
int dilation_size =1;
Mat element = getStructuringElement( MORPH_ELLIPSE,
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
Point( dilation_size, dilation_size ) );
dilate( edgeImage, outputFrame, element );