形态学是广泛的图像处理操作集,这些操作基于形状来处理图像。它也被称为用于提取图像成分的工具,该图像成分可用于表示和描述区域形状。
基本形态学操作是:
1.侵蚀
2.扩张
在本文中,我们将讨论侵蚀。
侵蚀:
- 侵蚀会缩小图像像素,即,通过使用元素B将其用于元素A的收缩。
- 侵蚀会去除对象边界上的像素:
- 输出像素的值是附近所有像素的最小值。如果任何相邻像素的值为0,则将像素设置为0。
方法:
- 读取RGB图像。
- 使用函数
im2bw()
,将RGB图像转换为二进制图像。 - 创建一个结构元素,或者您可以使用任何预定义的蒙版,例如。 fspecial(’sobel’)。
- 将行数和列数存储在数组中并循环遍历。
- 创建大小与图像大小相同的零矩阵。
- 留下边界像素会开始在图像上移动结构元素,并开始将像素与附近存在的像素进行比较。
- 如果邻域像素的值为0,则将该像素的值更改为0。
以下是用于侵蚀的Matlab代码:
% read image
I=imread('lenna.png');
% convert to binary
I=im2bw(I);
% create structuring element
se=ones(5, 5);
% store number of rows in P and number of columns in Q.
[P, Q]=size(se);
% create a zero matrix of size I.
In=zeros(size(I, 1), size(I, 2));
for i=ceil(P/2):size(I, 1)-floor(P/2)
for j=ceil(Q/2):size(I, 2)-floor(Q/2)
% take all the neighbourhoods.
on=I(i-floor(P/2):i+floor(P/2), j-floor(Q/2):j+floor(Q/2));
% take logical se
nh=on(logical(se));
% compare and take minimum value of the neighbor
% and set the pixel value to that minimum value.
In(i, j)=min(nh(:));
end
end
imshow(In);
输入图片:
输出图像: