2014-09-29 61 views
0

我是MATLAB圖像處理的新手。我正在編寫一個代碼來檢測一些不規則的圓圈,從圖像中去除剩餘的噪聲並找到不規則黑色圓圈(橢圓)的中心平均點。這裏是圖像檢測MATLAB中的不規則圓圈

[IMG]http://i61.tinypic.com/14y8p4x.jpg[/IMG]

這也是迄今爲止

m = imread('cbnimg.jpg'); 
imshow(m) 
im = mean(m,3); 
im = (im-min(im(:)))/(max(im(:))-min(im(:))); 
figure; 
imshow(im,[]); 
impixelinfo 
figure; 

bin = im2bw(im); 
imshow(bin); 
figure; 
bin = edge(bin); 
SE = strel('disk',2); 
cir =~imdilate(bin,SE); 
imshow(cir); 

這裏,我已經編寫的代碼是這個代碼

[IMG] http://i61.tinypic.com/30n9egn.png[/IMG]

我的結果圖像想要只檢測黑點(不規則Cicrcle),並刪除圖片中剩餘的噪音,因爲我想要中心這些黑色不規則圈的平均點..

任何人都可以建議我一些算法或技術來獲得我的中心平均點嗎?

謝謝

+2

向我們展示您嘗試過什麼以及哪些功能無法正常工作的代碼 – 2014-09-29 17:00:26

+0

Hello Ander ..我再次編輯代碼n,但仍然無法檢測到黑點。我使用了imfindcircles並改變了半徑範圍,但它沒有檢測到斑點。我規範化圖像,做了thresholdinig和使用邊緣命令,但沒有檢測到斑點。我需要一些算法來檢測這些不規則的黑點。謝謝 – Agror 2014-09-29 17:09:30

+0

這裏有一些出發點:http://stackoverflow.com/questions/21100541/make-a-mask-for-each-well-in-a-grid/21103573#21103573,http://stackoverflow.com/questions/23999205/detect-black-dots-from-color-background/24005169#24005169 – bla 2014-09-29 17:12:08

回答

1

一個非常原始的方法:適用於糜爛兩次,二值化後的兩次擴張:

m = imread('cbnimg.jpg'); 
imshow(m) 
im = mean(m,3); 
im = (im-min(im(:)))/(max(im(:))-min(im(:))); 

bin = im2bw(im); 
SE = strel('disk',10); 
bin = ~imerode(~bin,SE); 
bin = ~imerode(~bin,SE); 

bin =~imdilate(~bin,SE); 
bin =~imdilate(~bin,SE); 
imshow(bin); 

enter image description here

圓的形狀有點改變,但中心點的變化應該非常小。如果你想要一些更精細,更健壯的東西,腐蝕,標記圖像中的元素,根據每個標籤的質量(像素數)將它們分成兩個集羣(例如用k-means),然後丟棄所有標籤對應的到質量較低的羣集。

但是,對於您到目前爲止詢問的內容而言,這應該足夠了。

+0

謝謝。我也會嘗試第二種方法,你在這裏提到.. – Agror 2014-10-06 15:05:32