在MATLAB中检测不规则圆

时间:2014-09-29 16:56:48

标签: matlab image-processing geometry

我是MATLAB Image Processing的新手。我正在编写一个代码来检测一些不规则的圆圈,从图像中移除剩余的噪声并找到不规则的黑色圆圈(椭圆)的中心平均点。这是图像

[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)并从图片中删除剩余的噪音,因为我想要这些黑色不规则圆圈的中心平均点。

有人可以建议我使用一些算法或技术来获得我的中心平均值吗?

谢谢

1 个答案:

答案 0 :(得分: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),然后丢弃所有标签对应到质量较低的群集。

但是,对于你到目前为止所提出的问题,这应该足够了。