2

私が尋ねようとしていることをより明確に理解するには、下の画像をご覧ください。

ここに画像の説明を入力

この画像で本の数が 3 冊であることがわかると思います。Canny を使用しても、ノイズのために実際には成功しませんでした。しかし全体として、キャニーを除いて、画像は常に次のようになります (左の図を参照)。 ここに画像の説明を入力

すべての本が集まっている場所。私の目的は、最終的にそれらを分離し、bwboundaries を使用して本の数を数えることです。また、本をさらに区別するために label2rgb を試していましたが、それは 1 色だけでした。つまり、MatLab は 3 本すべてが同じであると判断しました。

私はハードカバーの本でこれを行って大成功を収めましたが、この本はハードカバーではないため、それぞれを区別する明確な線はありません.

この画像をセグメント化しようとしましたが、数日間成功しませんでした。何か案は?提案やアイデアは大歓迎です。

4

3 に答える 3

1

画像の水平方向の各行に沿って平均を計算するという Shai の推奨事項は、書籍の識別に役立ちます。本が平らでない、水平でない、または似たような色の本である場合、この方法には一定の制限があります。ただし、同程度の明るさの塊に注目するのではなく、本の間の空隙を検出する手段として、水平方向の平均値/中央値などを使用することを検討してください。

バイナリ イメージでの作業はあまり気にしません。面倒すぎて、あまり堅牢ではありません。特定の画像の解決策を見つけることはできますが、すべての画像の解決策を見つけようとすると膨大な時間がかかる可能性があります。この画像のグレースケール強度のクラスタリングは非常に重要であり、そのデータを捨てたくありません。二値化の前のしきい値処理は、厄介で満足のいくものではありません。

平均シフト アルゴリズムに精通していますか? これは k-means クラスタリングに似たクラスタリング アルゴリズムですが、事前に項目数 (k) を知っている必要はありません。これは、元のグレースケール イメージ内のデータをクラスター化し、適度に一貫したグレースケール値の 3 つの大きくて明確な塊があることを確認するのに役立ちます。

平均シフトを使用した画像セグメンテーションの説明

http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html

http://saravananthirumuruganathan.wordpress.com/2010/04/01/introduction-to-mean-shift-algorithm/

于 2013-11-09T01:13:22.130 に答える
1

適切な境界が得られるように、x 値で y 軸に沿ってスライスします。次に、"conv" を使用して、その 1 次元ベクトル (0 と 1 を含む) と奇ガウス関数の中心部分との畳み込みを求めます。これはエッジ フィルターに似ていますが、ノイズに対して堅牢です。その畳み込みにより、不規則な間隔のピークが多数得られます。ピークを見つけて数えます。各ピークは、2 つの本の境界です。(申し訳ありませんが、この簡単なプロセスは、ホワイトボードなしでは説明するのが非常に困難です。)

「奇数ガウス関数の中心部」 = プラス/マイナス pi で切り取られた正弦関数を想像してください。しかし、正から負への変化は階段関数に近くなります。ガウス関数とステップ関数を畳み込むことで、必要なものを得ることができると思います。(繰り返しますが、ホワイトボードがなくてすみません。)

edit2: ここにいくつかの Matlab コードを示します。インタラクティブに実行することで、私が何を意味するかがわかります。

x=[-9.5:1:9.5];
y=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1]; plot(x,y,'.');
g=exp(-x.*x/8); plot(x,g,'.');
odd_g=conv(y,g);plot([-19:19],odd_g,'.')

したがって、odd_g (または同様のもの) は、特定の x で画像スライスと畳み込みたいものです。

peaks=conv(image_slice,odd_g);

edit3:あなたが持っていたとしましょう

image_slice=[1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1];

ノイズの多いエッジを挿入したことに注意してください。選択した値について、畳み込みをプロットすると、

plot(conv(image_slice,odd_g)

一方のエッジでノイズがわずかにピークを示していることがわかりますが、実際のエッジほど大きくはありません。したがって、ピークを見つけて、カットオフ値よりも小さいものを破棄します。もちろん、データに最適なodd_gのパラメーターを選択してください。

于 2013-10-28T20:36:47.460 に答える