10

流域変換のマーカーを作成するために、気の利いたエッジ検出と等高線検索機能 (両方とも OpenCV) を使用しています。すべてうまくいきますが、結果に 100% 満足しているわけではありません。その理由は、一部のエッジが欠落しているため、重要な情報が失われているためです。より詳細には、四角形のウィンドウ (正面図) がたくさんあります。流域変換後、次のようになります。

ここに画像の説明を入力 ここに画像の説明を入力 しかし、私はむしろ、完全で片側が開いていない素敵な長方形が欲しいです。不規則な形状(家の前の茂み、車..)を維持しながら、この問題を解決する方法はありますか?画像全体をグリッドでオーバーレイすることを考えましたが、うまくいきません。

どうもありがとうございました。

これが私のコードです:

Mat gray;
cvtColor(im, gray, CV_BGR2GRAY);

// Use Canny instead of threshold to catch squares with gradient shading
Mat bw;
Canny(gray, bw, 0, 100, 5, true);

// Find contours
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

findContours( bw, contours, hierarchy,
    CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );


// watershed
Mat markers(bw.size(), CV_32S);
markers = Scalar::all(0);
int idx = 0;
int compCount = 0;
for( ; idx >= 0; idx = hierarchy[idx][0], compCount++ ) {
    if (fabs(contourArea(contours[compCount])) < min_size )
        continue;
    drawContours(markers, contours, idx, Scalar::all(compCount+1), 1, 8, hierarchy, INT_MAX);
}
watershed( im, markers );

要求に応じて、元の画像、取得したい画像、および出力は次のとおりです。 ここに画像の説明を入力

そして、私はこのようなセグメンテーションをしたいと思います(セグメンテーションを超えても害はありませんが、確認する必要があるだけです。すべての詳細を取得します):

ここに画像の説明を入力

次のような 結果が得られますがここに画像の説明を入力 (色は無視してください。この質問では重要ではなく、プログラム全体の結果にすぎません)。これは 1 つの例にすぎません。必要に応じて、さらにお見せします。また、etrims データセットをご覧ください。私の写真はすべてそこからのものです。

4

2 に答える 2

0

目的の出力とプログラムの出力の外観から、エッジ検出器が偽のエッジを見つけているようです。キャニー エッジ検出器にはローパス フィルターが含まれていますが、キャニー エッジ検出器を実際に実行する前に、別のガウス ローパス フィルター処理ステップを実行すると役立つ場合があります。

それ以外の場合、望ましい結果を達成することは困難です。たとえば、図の一番上のウィンドウを見てください。枠、枠の影、窓など、色がはっきりしています。これらの色の境界は、エッジ検出器によってエッジとして検出されます。

于 2014-01-11T22:00:09.493 に答える