我是MATLAB Image Processing的新手。我正在编写一个代码来检测一些不规则的圆圈,从图像中移除剩余的噪声并找到不规则的黑色圆圈(椭圆)的中心平均点。这是图像
这是我到目前为止编写的代码
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)并从图片中删除剩余的噪音,因为我想要这些黑色不规则圆圈的中心平均点。
有人可以建议我使用一些算法或技术来获得我的中心平均值吗?
谢谢
答案 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);
圆圈的形状有点变化,但中心点的变化应该非常小。如果你想要更精确,更强大的东西,侵蚀,标记图像中的元素,根据每个标签的质量(像素数)将它们分成两个簇(例如用k-means),然后丢弃所有标签对应到质量较低的群集。
但是,对于你到目前为止所提出的问题,这应该足够了。