我有一个带有各种标志的 RGB 图像。我的主要目标是计算与图像边界接触的标志。
方法和问题
我首先加载图像 [图。1],然后将其转换为灰度并应用中值滤波器以去除一些噪声[图。2]。然后我用 0.2 的阈值对其进行二值化,得到图 3。此时我得到了我的二值化图像,但问题是属于同一符号的某些部分出现在各个区域,而不是仅一个区域。现在我的目标是合并属于同一个对象的区域,这样我就可以用它bwlabel
来计算图像中有多少个标志,并用imclearborder
它来去除边界中的那些,然后bwlabel
再次使用来获得两者之间的差异他们俩。
我的方法是使用bwmorph
,Dilate
来扩大对象,然后尝试用 , 填充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: