形态学图像处理

一、形态学操作的MATALB实现

1. 腐蚀操作

IM2=imerode(IM,SE);
IM2=imerode(IM,NHOOD);
IM2=imerode(_,PACKOPT,M);
IM2=imerode(_,SHAPE);
IM2=imerode(gpuarrayIM,_)

其中,IM、IM2分别为输入图像和输出图像;

          SE为结构元素,SE可以是一个定义结构元素邻域的二进制矩阵或由strel函数返回的对象;

 

          NHOOD是一个由0和1组成的数组,用来指定结构元素的大小和形状;

         PACKOPT、M、SHAPE是可选参数,用来说明输入输出图像的大小、形状信息

e.g. 1 使用圆形结构对一幅二值图像进行腐蚀

% 读入一张图片
originalBW=imread('circles.png');
% 定义结构元素
se=strel('disk',11);
% 施加腐蚀操作
erodedBW=imerode(originalBW,se);
% 显示结果
subplot(121);
imshow(originalBW);title('原图');
subplot(122);
imshow(erodedBW);title('腐蚀后');

                              

e.g.2 使用球形结构对一幅灰度图像进行腐蚀操作

% 读入一张图片
originalI=imread('cameraman.tif');
% 定义结构元素
se=strel('ball',5,5); %创建椭圆体,半径5,高5
% 施加腐蚀操作
erodedI=imerode(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('腐蚀后');

               

2. 膨胀操作

MATLAB使用imdilate函数对指定的图像进行膨胀操作,参数与imerode中相同。

e.g.1 使用圆形结构对一幅二值图像进行膨胀

% 读入一张图片
originalI=imread('text.png');
% 定义长度为11、与水平方向夹角为90度的线性结构
se=strel('line',11,90); 
% 施加膨胀操作
erodedI=imdilate(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('膨胀后');

e.g.2 使用球形结构对一幅灰度图像进行膨胀。

% 读入一张图片
originalI=imread('cameraman.tif');
% 定义半径为5的球形结构
se=strel('ball',5,5); 
% 施加膨胀操作
erodedI=imdilate(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('膨胀后');

                   

3.应用

膨胀:桥接裂缝

3. 开运算与闭运算

开运算是先对图像进行腐蚀操作,再对腐蚀结果做膨胀操作;

开运算常用来平滑图像轮廓,断开狭窄的连接和消除细的突出物。

闭运算是先对图像进行膨胀操作,再对膨胀结果做腐蚀操作;

闭运算通过融合缝隙,对图像不平滑的部分进行填补,消除狭窄的间断和细长的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕。

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
形态学图像处理是一种基于数学形态学原理的图像处理方法,可以用于图像的特征提取、边缘检测、形状分析等。在Python中,有多种库可以进行形态学图像处理,如OpenCV和scikit-image。 在OpenCV中,可以使用cv2.morphologyEx函数进行形态学图像处理。其中,可以使用cv2.MORPH_GRADIENT参数来进行形态学梯度操作,即膨胀图与腐蚀图之差。下面是一个使用OpenCV进行形态学梯度操作的示例代码: ```python import numpy as np import cv2 # 读取输入图像 img = cv2.imread('g1.png') # 定义卷积核 kernel = np.ones((6,6), dtype="uint8")/9 # 进行形态学梯度操作 gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # 保存结果图像 cv2.imwrite('gradient.jpg', gradient) ``` 另外,scikit-image库也提供了一些形态学图像处理的函数。可以使用skimage.morphology模块中的函数进行膨胀、腐蚀等操作。下面是一个使用scikit-image进行膨胀与腐蚀操作的示例代码: ```python from skimage.morphology import erosion, dilation from skimage.morphology import square from skimage.color import rgb2gray from skimage.io import imread # 读取输入图像并转为灰度图像 im = imread('zebras.jpg', as_gray=True) # 进行腐蚀操作 selem = square(5) eroded = erosion(im, selem) # 进行膨胀操作 dilated = dilation(im, selem) ``` 以上是使用OpenCV和scikit-image库进行形态学图像处理的示例代码,你可以根据自己的需求选择合适的库和函数进行图像处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值