適切な境界が得られるように、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のパラメーターを選択してください。