📜  Matlab |图像膨胀

📅  最后修改于: 2021-04-17 04:05:17             🧑  作者: Mango

形态学是广泛的图像处理操作集,这些操作基于形状来处理图像。它也被称为用于提取图像成分的工具,该图像成分可用于表示和描述区域形状。

基本形态学操作是:
1.侵蚀
2.扩张

扩张–

  • 扩张会扩展图像像素,即通过使用结构化元素B来扩展元素A。
  • 膨胀将像素添加到对象边界。
  • 输出像素的值是附近所有像素的最大值。如果任何相邻像素的值都为1,则将像素设置为1。

方法:

  1. 读取RGB图像。
  2. 使用函数im2bw()将RGB图像转换为二进制图像。
  3. 创建一个结构元素,或者您可以使用任何预定义的蒙版,例如。 fspecial(’sobel’)。
  4. 存储行和列的数量以及数组并循环遍历。
  5. 创建大小与图像大小相同的零矩阵。
  6. 留下边界像素会开始在图像上移动结构元素,并开始将像素与附近的像素进行比较。
  7. 如果邻域像素的值为1,则将该像素的值更改为1。

以下是用于膨胀的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)=max(nh(:));      
    end
end
  
imshow(In);

输入图片:

输出图像: