在MATLAB中计算与图像边界相交的对象数


9

我有带有各种标志的RGB图像。我的主要目标是计算与图像边界接触的标志。

方法与问题

我首先加载图像[Fig。1],然后将其转换为灰度并应用中值滤波器以消除一些噪声[图1]。2]。然后,我用0.2的阈值对它进行了二值化处理,结果如图3所示。这时我得到了二值化图像,但问题是,属于同一符号的某些部分出现在各个区域中,而不仅仅是一个区域。现在,我的目标是合并属于同一对象的区域,因此我可以bwlabel用来计算图像中有多少个符号,并imclearborder用来消除边界中的符号,然后bwlabel再次使用来获得他们俩。

我的方法是使用bwmorphDilate扩大对象,然后尝试用imfill,填充它们holes。但是问题是,如果我少量扩张它们[图。4],imfill似乎并没有填充它们,如果我将它们大量扩张[图5],所有对象就会开始合并:(

img=im2double(imread('image.png')); figure, imshow(img) 
img_gray=rgb2gray(img); imshow(img_gray);                                 
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);       
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)

图1

图1 http://dl.dropbox.com/u/5272012/1.png

图2

图2 http://dl.dropbox.com/u/5272012/2.png

图3

图3 http://dl.dropbox.com/u/5272012/3.png

图4

图4 http://dl.dropbox.com/u/5272012/4.png

图5

图5 http://dl.dropbox.com/u/5272012/5.png


我的问题是什么才能确切告诉您标志已损坏?您要如何真正放置输出?我的意思是-您是否只想为所有切下的标志着色?还是您真的想列出每个标志并对切割/满切进行分类?
Dipan Mehta

Answers:


3

我认为,扩张侵蚀是非常基本的工具。您拥有非常强大的信息基础和相当不错的输入图像来做出此类决策。

这是我的看法:

  1. 从图1到图3可以看到,如果取得了一定的成功,则可以识别并细分各个标志。

  2. 假设您已经知道先验标志,则可以应用适当的快速算法来进行模式匹配。如果不知道确切的图案,则只需确定图案的外形即可。

  3. 根据分类,您始终可以定义每个匹配模式的质心及其各自的宽度和高度。如果质心X,Y的位置太靠近边界-例如,或它在边缘之外,同样,您也可以申请Y轴。Ç Ë Ñ - [R ø d X > 中号ë 瓦特ð Ť ħ - 小号ħ 一个p ë 瓦特ð Ť ħcentroid(x)<0centroid(x)>imagewidthshapewidth

  4. 鉴于您仅关注边缘上的东西-您应该仅从每个边缘开始,然后从那里开始图案匹配。启动部分图案/形状相匹配,并且如果部分图案/形状确实匹配该对象IS被切割的边缘。

这里有一些参考资料可以帮助您很好地解决问题。

本文非常了解您要处理的标志/令牌的许多基础知识。

Anil K. Jain和Aditya Vailaya 基于形状的检索:带有商标图像数据库的案例研究 模式识别1998年,第一卷。31,no9,第1369-1390页

有许多研究元素涉及部分或封闭的形状/图案匹配。

Eli Saber,徐耀武,A。Murat Tekalp 通过子矩阵匹配对局部形状进行识别,以实现部分匹配的引导图像标记模式识别38(2005)1560 – 1573

如果您采用这种方法,将针对更多特定查询扩展此答案。


嘿! 我不能使用模式匹配,因为这将花费很长时间并且需要太多的计算工作。此外,对象(符号)的比例可以是可变的(教授给我们提供了随机图像,其中符号的比例可以从+ 30%到-30%非常多,因此模式匹配是无用的。我需要一种更快的方法为了解决这个问题
Rui Trovisco 2012年

@RuiTrovisco我理解这一点。这就是为什么我写的原因-我会根据您的反馈改善答案。我对你的问题发表了一些评论。请在那里恢复。
Dipan Mehta

1

这是一些灵感,显示出与您正在寻找的相反的东西。

从fig3开始。

% Find background
labels = bwlabel(~fig3);
[n,idx] = hist(labels(:),0:max(labels(:)));
[bgrSize bgrLableIdx] = max(n);
bgr = (labels == idx(bgrLableIdx));
bgr = imopen(bgr,strel('disk',3));

% Remove border objects and cleanup
borderCleared = imclearborder(~bgr);
borderCleared = imopen(borderCleared,strel('disk',3));

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.