2017-02-13 70 views
0

我有一個使用bwlabel標記的斑點圖像,我想找到一個像素位置[x,y]的斑點,並通過刪除剩餘的斑點來顯示它。 這裏是我寫的代碼,但它沒有給出正確答案,請解決這個找出哪個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,[]) 

感謝,

戈皮

+0

不是答案,只是一個評論,因爲我不知道Matlab。也許你可以使用圖像副本中的獨特顏色對每個檢測到的斑點進行着色,然後查看該像素的顏色以確定它屬於哪個斑點。 –

+0

我正在與醫療dicom圖像,基本上是灰度,我不想改變像素值,我不認爲這就是我正在嘗試做的,感謝您的建議 – Gopi

回答

0

我現在還沒有一個MATLAB許可證,所以我不會無法在我的機器上進行測試,我也離開了MATLAB語法一段時間。這是一個想法:

From MATLAB's documentation,PixelList是一個數組,其中每行格式化爲[x,y,...],具體取決於您的尺寸。

與你的形象我假設PixelList工作的格式[x,y]

通過PixelList循環,保持跟蹤你要放棄指標。如果測量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的索引。您可以運行blob分析並將其與其餘的分離。

+0

我不是在尋找pixelList ,我想確定哪個blob有最初描述的[x,y]座標,並且我想要檢索那個單一的blob。檢查我的代碼上面我使用PixelList,但我認爲我犯了一個錯誤 – Gopi

+0

@Gopi我發佈的解決方案檢查每個像素的位置。如果你看看循環中的if條件。最後,它會刪除沒有找到該位置的所有像素。 – robotHamster

+0

是的,瞭解您的代碼,因此您的代碼的輸出是匹配[target x,target y]的單個像素值。我已經有了它,無論如何,我可以找到這個匹配屬於哪個blob,如果你可以編寫一個檢查所有blob並給出包含[targetx,target y]的單個blob的輸出索引的整個代碼,那將是非常好的。謝謝,Gopi – Gopi