3

私は2次元画像を持っています.極小値が発生する場所があります. それらの最小値に「つながる」谷の幅を測定したいと思います。これらの谷にフィットする円または楕円の半径が必要です。ここに添付された例、ピークの等高線上の濃い赤の線は、私が見つけたいものです。ありがとう。

ピーク幅の例

4

3 に答える 3

1

@Lucasの答えを部分的に拡張しています。

しきい値が与えられた場合、私はあなたの最小の特定のポイントより下でより近いtポイントを考慮します(特徴的なスケールの長さを与えられた場合)。P_mtmfr

(データにノイズが多いとおっしゃいました。最小値を区別して井戸について話すには、そのような値を推定する必要がありrます。たとえばr=4、最小値間の距離の半分などです)。

次に、各ウェル領域 のメトリックを検討する必要がありますP_m。たとえば、

 metric(P_m) = .5 * mean{ maximum vertical diameter of P_m ,  
                     maximum horizontal diameter of P_m}.

metric(P_m) = 2両方の井戸のあなたの写真で。


全体として、擬似コードの観点から、あなたは考えるかもしれません

 M := set of local minima of f

 for_each(minimum m in M){

      P_m += {p : d(p,m) < r and f(r)<t}  % say that += is the push operation in a Stack

 }

 radius_of_region_around(m) = metric(P_m);  %
于 2012-10-27T19:22:21.650 に答える
1

おそらく、しきい値を超えるすべてのポイントを見つけることによって、楕円のエッジの値を表すポイントのリストを作成することをお勧めします。

above = data > threshold

単純なエッジ検出器を適用する

edges = EdgeDetector(above)

エッジの座標を見つける

[row,col] = find(edges)

次に、この楕円フィッターを適用しますhttp://www.mathworks.com/matlabcentral/fileexchange/3215-fitellipse

于 2012-10-27T18:48:48.757 に答える
1

xここでは、yおよびzデータにアクセスでき、特定の JPG (またはその程度) の画像を処理していないと想定しています。次に、関数contourcを有利に使用できます。

% plot some example function
figure(1), clf, hold on    
[x,y,z] = peaks;
surf(x,y,z+10,'edgecolor', 'none')
grid on, view(44,24)

% generate contour matrix. The last entry is a 2-element vector, the last
% element of which is to ensure the right algorithm gets called (so leave 
% it untouched), and the first element is your threshold.
C = contourc(x(1,:), y(:,1), z, [-4 max(z(:))+1]);

% plot the selected points
plot(C(1,2:end), C(2,2:end), 'r.')

次に、この超高速楕円フィッティング ツールを使用して、それらの点を通る楕円をフィッティングし、必要な楕円のすべてのパラメーターを見つけます。

上記を読んhelp contourcdoc contourc、上記が機能する理由と、他に何に使用できるかを確認することをお勧めします。

于 2012-10-28T10:22:49.883 に答える