- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
书中指出,在图像处理中,膨胀用于“加厚”二值图像中的对象。此外,作者在示例中使用了 imdilate
来修复或加粗扫描文档中的损坏文本。 imdilate
填补了扫描质量不佳的文本文档中的空白和裂缝。
因此,在某种程度上,形成的新图像采用结构元素的形状,或者换句话说,即使结构元素的一个像素与图像中的对象重叠,对象的像素也会在图像的方向上扩展结构元素。
因此,为了自己进行测试,我编写了简单的代码来查看其工作原理。我在这张图片上使用了它:
这是我写的代码:
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');
用线结构元素扩张产生了这个:
用正方形结构元素进行扩张产生了这个:
现在,根据我在上面理解的定义,我期待不同的结果。如果是直线,我希望 watch 在 45 度角处有点模糊,如果是方形结构元素,我希望是黑色正方形。
可以肯定地说,根据我的理解,我不理解我得到的结果。
最佳答案
imdilate
增强明亮区域,因此如果您希望在第二种情况下出现黑色方 block ,您可以尝试 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');
明亮区域被消除,黑色区域扩大:
关于您的第一个案例,我还在尝试了解您期望的结果是什么? imdilate
为您加厚 45 度角的所有明亮区域看起来不错。实际上,imerode
和imdilate
经常结合起来实现一些效果。您可以保持 45 度线和足够粗的线条明亮,并通过腐 eclipse (去除小的亮线)然后扩大(增强粗的亮线)图像来消除其他线条(变成黑色)。 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');
关于matlab - 扩张 (imdilate) 不会像预期的那样发生 "thicken"或形状变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923446/
书中指出,在图像处理中,膨胀用于“加厚”二值图像中的对象。此外,作者在示例中使用了 imdilate 来修复或加粗扫描文档中的损坏文本。 imdilate 填补了扫描质量不佳的文本文档中的空白和裂缝。
我是一名优秀的程序员,十分优秀!