2017-02-13 12 views
0

私はbwlabelを使ってラベル付きのblobイメージを持っています。ピクセル位置[x、y]を持つblobを見つけて、残りのblobを取り除いて表示したいと思います。ここで は私が書いたコードですが、それは、このどのBLOBにピクセル位置[x、y]があるか調べる

[y, x] = ginput(1); 
x = round(x); 
y = round(y); % here x and y is a location of blob i want to keep 

    BW = bwlabel(newImgg,4) ; % labelled image contains several blobs 
%  figure, imshow(BW, []) 
    props = regionprops(logical(BW),'all'); 
    while(1) 
     for k = 2:length(props) 
      if ismember([x,y],props(k,1).PixelList) == [1, 1]; 
       keeperIndex = k; 
       break 
      end 
     end 
     break 
    end 

    keeperBlobsImage = ismember(BW, keeperIndex); 
    keeperBlobsImage = imfill(keeperBlobsImage,'holes'); 
    figure, imshow(keeperBlobsImage,[]) 

感謝を修正してください正しい答えを与えるものではありません、

Gopi

+0

私はMatlabを知らないので、答えはありません。たぶん、画像のコピー内に検出された各ブロブを固有の色で色付けし、そのピクセルがどのブロブに属するのかを確認することができます。 –

+0

私は基本的にグレースケールの医学的なディコム画像で作業しています。ピクセル値を変更したくないので、私がやろうとしているとは思わないので、あなたの提案に感謝します – Gopi

答えて

0

私は現在、MATLABのライセンスを持っていないので、私はwouldn私のマシンでこれをテストすることはできません。私はしばらくの間、MATLAB構文から離れています。

From MATLAB's documentationPixelListは、それぞれの行のフォーマットが[x,y,...]であり、寸法によって異なります。

私はあなたが破棄したい指標を追跡し、PixelListはフォーマットPixelListをループ[x,y]

を持っていると仮定しているイメージでの作業。あなたはnピクセル測定した場合:再度

discardList = [] 
for i = 1:n 
    if (PixelList(i) != [target_x,target_y] 
     discardList=[discardList,i] 
    end 
end 
newPixelList = PixelList 
newPixelList(discardList) = [] 

を、私は今の時間のまともな量のためにMATLABを使用していないので、私は、構文に問題(ブラケット、ループ、条件文)

について謝罪します編集/更新:

MATLABの文書によると、bwlabelはBW画像でのみ使用されています。だからあなたがそれをしていることを確認してください。

regionpropsの出力では、WeightedCentroidが必要です。

ginputより、重心が最も近い領域を探します。

私の提案は、システム・オブジェクトのすべての「出力ポート」をオフにし、上重心出力ポートを維持することを確認してくださいマニュアルを参照して、vision.BlobAnalysis System Object

[y,x] = ginput(1) 
bA = vision.BlobAnalysis; 
centroids = step(bA,BWImage); 

用いることであろう。

d = 1e10; 
d2 = 0; 
dArr = [x,y;0,0] 
cIndex=0; 
for i = 1:length(centroids) 
    dArr(2,:) = centroids(i,:); 
    d2 = pdist(dArr); 
    if (d2<d) 
     d = d2; 
     cIndex = i; 
    end 
end 

変数cIndexには、必要なBLOBのインデックスが含まれます。あなたはブロブ分析を実行し、残りの部分からそれを隔離することができます

+0

私はpixelListを探していません私はどのBLOBが最初に記述された[x、y]座標を持っているかを知りたいので、その単一BLOBを取得したいと思います。上記の私のコードを確認してください。PixelListを使用しましたが、私はどこかで間違いを犯したと思います。 – Gopi

+0

@Gopi投稿されたソリューションはすべてのピクセルの位置をチェックします。ループのif条件を見てください。最後に、探している場所を持たないピクセルがすべて削除されます – robotHamster

+0

はい、あなたのコードを理解しているので、コードの出力は[target x、target y]と一致する単一ピクセル値になります。私はすでに持っているが、とにかく私はこのマッチが属しているblobを見つけることができます、あなたはすべてのブロブをチェックし、[targetx、ターゲットy]を含む単一ブロブの出力インデックスを与える全体コードを書くことができるなら、ありがとう、Gopi – Gopi

関連する問題