4

領域内のオブジェクトを抽出することに興味があります。

例えば、

図 1 は、私のレーザー プロファイルの強度プロファイルを示しています。レーザー強度に応じて、プロファイルを 2 つの関心領域 (ROI1 と ROI2) に分割します。

図 2 は、陽性反応の実験結果とレーザー強度プロファイルの重なりを示しています。肯定応答データ ファイルは、x 座標と y 座標で構成されます。ご覧のとおり、結果はレーザー プロファイル イメージに散らばっています。

これが私がやりたいことです。ROI2 内のスポットを抽出し、図 3 に示すように残りをすべて破棄します。どうすればいいですか?具体的には、matlab で不規則な形状の ROI2 を定義し、肯定応答データの座標を抽出するにはどうすればよいですか。助けてくれてありがとう。

ここに画像の説明を入力

4

3 に答える 3

5

eykanal が言うように、impoly関数を使用して、イメージに必要なあらゆる種類の ROI を作成できます。座標を抽出するための一般的な解決策は、必要な ROI を作成し、findを使用して座標を抽出し、set 操作を使用して不要な点を削除することです。このような:

imshow(image)
h         = impoly() ;      %# draw ROI1
ROI1      = createMask(h);  %# create binary mask of ROI1
h2        = impoly();       %# draw dummy_ROI consisting of ROI1+ROI2
dummy_ROI = createMask(h2); %# create binary mask
ROI2      = dummy_ROI-ROI1; %# create ROI2

p      = find(ROI2);        %# find all coordinates of ROI2
points = intersect(ind,p);  %# find all points with linear index ind that are
                            %# part of ROI2
于 2011-10-18T13:36:01.940 に答える
3

等高線 (と思われるもの) に沿って画像を常にセグメント化する場合、この問題はあなたが考えるよりも簡単だと思います。等高線 1 よりも大きく、等高線 2 よりも小さい値を持つすべての点を選択したいと考えています。等高線をどのように指定したかはわかりませんが、選択コマンドは単純に次のようにする必要があります。

#% let laserData be the image data (it looks like it should
#% be 512x256, so I'll assume that)

highBound = mean(contour1points);
lowBound  = mean(contour2points);

selectedData = laserData(laserData > lowBound & laserData < highBound);

表示されているように、単に値に基づいて輪郭を設定してmean(contour1points)いる場合は、カーソルの下のピクセルの値を取得する関数を使用して、ユーザー定義の値に置き換えることができますが、これはたまたま正しく思い出すことができません今。多角形を定義したい場合は、impoly機能をチェックしてください。

于 2011-10-18T02:35:59.187 に答える
0

ROI にどのような表現を使用しているかはわかりませんが、いくつかの方法をお勧めします。

  1. ROI が楕円で、その方程式がわかっている場合は、それを結果の座標に適用するだけです。中にあるかどうかは標識で判断してください。

  2. ROI が何らかの多角形である場合は、関数inpolygonを使用できます。

  3. ROI を白黒の画像にレンダリングして、ヒット/ミスを簡単にテストできます。

ROI 表現に関する詳細を提供してください。

于 2011-10-17T21:21:39.277 に答える