膨胀(imdilate)不会像预期的那样“变厚”或变形

时间:2014-01-04 16:20:34

标签: matlab image-processing

该书指出,在图像处理中,扩张用于“加厚”二进制图像中的对象。此外,作者在示例中使用imdilate来修复或加厚扫描文档中的损坏文本。 imdilate填补了扫描不良的文本文档中的空白和裂缝。

因此,在膨胀的方式中,形成的新图像采用结构元素的形状,或者换句话说,即使结构化元素的一个像素与图像中的对象重叠,对象的像素也在图像的方向上延伸。结构元素。

因此,为了自己测试,我编写了简单的代码来了解它是如何工作的。我在这张图片上用过它:

http://imgur.com/ka2wLqK.jpg

这是我写的代码:

logical = imread('edifice.jpg'); 

line = strel('line', 30, 45);
square = strel('square', 30);

%dilate logical with line @ 45 degrees

dial_logical_line = imdilate(logical, line);
figure, imshow(dial_logical_line), title('dial logical line');

%dilate logical with square.

dial_logical_square = imdilate(logical, square);
figure, imshow(dial_logical_square), title('dial logical square');

用线结构元素扩张产生了这个:

http://imgur.com/6Cek30D.jpg

用方形结构元素扩张产生了这个:

http://imgur.com/sUCvyIv.jpg

现在根据我上面所理解的定义,我期待不同的结果。在线条的情况下,我希望手表能够以45度角涂抹,如果是方形结构元素,我期待一个黑色正方形。

可以肯定地说,根据我的理解,我不理解我得到的结果。

3 个答案:

答案 0 :(得分:4)

imdilate增强了明亮区域,因此如果您希望在第二种情况下使用黑色方块,则可以尝试imerode

file='http://imgur.com/ka2wLqK.jpg';
logical = rgb2gray(imread(file)); 
square = strel('square', 30);
dial_logical_square = imerode(logical, square);
figure, imshow(dial_logical_square), title('dial logical square');

明亮区域被消除,黑色区域正在扩展:

enter image description here

关于你的第一个案例,我仍在努力了解你的期望结果是什么?看起来好imdilate为你增加45度的所有明亮区域。事实上,imerodeimdilate经常结合起来以达到一些效果。您可以保持线条沿45度和足够厚的亮度,并通过侵蚀(去除小亮线)然后扩大(增强粗亮线)图像来消除其他线条(变成黑色)。 imopen为您执行此操作:

file='http://imgur.com/ka2wLqK.jpg';
logical = rgb2gray(imread(file)); 
imshow(logical)
line = strel('line', 10, 45);
dial_logical_line = imopen(logical, line);
figure, imshow(dial_logical_line), title('dial logical line');

enter image description here

答案 1 :(得分:3)

这对我来说很好看。请记住,在二进制图像中,感兴趣的像素是1值或白色像素。你可以看到原始图像中的每个(白色)像素都被“涂抹”成45度线和正方形 - 如果先颠倒图像,你会看到手表本身会发生什么,而不是背景; )

答案 2 :(得分:1)

您可以在二进制图像中尝试Morphological Operations(MO)。 MO保留了细线并用作过滤器,并消除了图像中的噪点。您可以组合一系列MO,以获得最佳结果,并重复n或Inf次。我在Matlab中使用bwmorph执行了代码;

I = imread('clock1.jpg');
logical= rgb2gray(I);
imshow(logical);
L2 = imbinarize(logical);
I2 = bwmorph(L2,'majority',4);
I3 = bwmorph(L2,'spur',2);
I4 = bwmorph(I3,'fill',2);
I5 = bwmorph(I4,'clean',1);
figure, imshow(I5),title('Morphological operations');>

输出图像如下:

enter image description here