2014-09-29 3 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]

I хотите обнаружить только черные пятна (нерегулярный цикрок) и удалить оставшийся шум из изображения, так как я хочу, чтобы Центр Средняя точка этих черных нерегулярных кругов ..

Может ли кто-нибудь предложить мне некоторые алгоритмы или методы, чтобы получить среднюю точку моего центра?

Спасибо

+2

Показать код, который вы пробовали, и что не работает по вашему желанию –

+0

Привет Андер .. Я снова редактирую код снова, но я все еще не могу обнаружить черные пятна. Я использовал imfindcircles и изменял диапазон радиуса, но не обнаруживал пятна. Я нормализовал изображение, сделал пороговое значение и использовал команду edge, но не обнаружил пятна. Мне нужен алгоритм для обнаружения этих нерегулярных черных пятен. Спасибо – Agror

+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

ответ

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-средств), а затем отбросьте все метки соответствия к кластеру с более низкими массами.

Однако для того, что вы просили до сих пор, этого должно быть достаточно.

+0

Спасибо. Я попробую второй метод, вы упомянули здесь. – Agror

Смежные вопросы