7

2D画像のエッジ検出ではなく、画像のすべての行(ig a line)のエッジを個別に検出したいと思います。これは、値が0〜255の範囲のピクセル強度である入力1Dベクトルからのエッジの検出です(下の画像)。 ここに画像の説明を入力してください

サンプル入力(下の画像)に表示される主要なエッジを検出したい ここに画像の説明を入力してください

4

3 に答える 3

10

希望する結果を得る1つの方法は、2D Cannyエッジ検出器を次のように適合させることです(Mathematicaのコード)。

まず、ガウス微分フィルターを使用して空間微分を計算し、検出するエッジのスケールに関連するシグマ値を設定します。結果の絶対値を取ります。

d = Abs@GaussianFilter[data, {{10, 5}}, 1];

次に、しきい値を自動的に決定して、以前の導関数値を2つのグループにクラスター化します(ここでは大津の方法を使用)。

thrd = FindThreshold[d];

次に、微分値のステップ(「デッドバンド」への/からの遷移)を検出します。

steps = Flatten@Image`StepDetect[d, thrd]["NonzeroPositions"];

この時点で、エッジの端があります。

ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps]}]

ここに画像の説明を入力してください

オプションで-それはあなたが望むもののようです-エッジの下端だけを保持します。この場合、エッジの端でデータポイントをクラスタリングすることは機能しますが、それがどれほど堅牢かはわかりません。

t = FindThreshold@data[[steps]];
steps2 = Select[steps, data[[#]] <= t &];

ListLinePlot[data, Epilog -> {Red, PointSize[Large], Map[Point[{#, data[[#]]}] &, steps2]}]

ここに画像の説明を入力してください

于 2012-02-13T20:50:07.720 に答える
2

これらのエッジの優れたコントラストを考えると、堅牢に機能する簡単なソリューションがあります。ピクセル値のすべての単調なシーケンスを検出します(厳密に増加または減少)。ノイズの多いピークを拒否するために、合計の高さがしきい値(この場合は50)を超えるシーケンスを維持します。

副産物として、開始点と終了点を取得します(ただし、正確には期待した場所ではありませんが、必要に応じて改善することができます)。

バーコード?

于 2012-02-13T21:20:12.327 に答える
1

それで、あなたは傾きの特定の変化を探しています-すなわち、サンプルごとのYの特定の変化?

2つのサンプル間のYの差を単純に見て、絶対値が限界を超えて変化した場合は、それをエッジとしてマークしませんか?

于 2012-02-13T17:14:16.027 に答える