该书指出,在图像处理中,膨胀是用来“加厚”二值图像中的对象此外,作者在一个例子中使用了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度角的,如果是正方形的结构元素,我希望是黑色的正方形。
可以肯定地说,我不明白我得到的结果是基于我的理解。
最佳答案
imdilate
增强了明亮区域,因此如果您希望在第二种情况下出现一个黑色正方形,您可以尝试:
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');
明亮区域被消除,黑色区域正在扩大:
关于你的第一个案子,我仍在努力了解你期望的结果是什么它看起来很好,
imerode
加厚沿45度的所有明亮区域事实上,imdilate
和imerode
经常结合在一起以达到一些效果你可以保持线沿45度和足够厚的明亮,并消除其他(转向黑色),通过腐蚀(删除小亮线),然后扩大(增强粗亮线)的图像imdilate
为您执行此操作: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');