> 文章列表 > 图像预处理方法

图像预处理方法

图像预处理方法

图像预处理

膨胀腐蚀概述

⚫ 膨胀、腐蚀属于形态学的操作, 简单来说就是基于形状的一系列图像处理操作

⚫ 膨胀腐蚀是基于高亮部分(白色)操作的, 膨胀是対高亮部分进行膨胀, 类似“领域扩张”, 腐蚀是高亮部分被腐蚀, 类似“领域被蚕食”
⚫ 膨胀腐蚀的应用和功能:

消除噪声

分割独立元素或连接相邻元素

寻找图像中的明显极大值、极小值区域

求图像的梯度

⚫ 其他相关:

开运算、闭运算

顶帽、黒帽形态学梯度

1)膨胀—cv2.dilate()

膨胀就是求局部最大值的操作, 从数学角度上来讲, 膨胀或腐蚀就是将图像(或区域)A与核B进行卷积。

核可以是任意大小和形状, 它有一个独立定义的参考点(锚点), 多数情况下, 核是一个小的中间带参考点和实心正方形或者圆盘, 可以看做是一个模板或掩码。

膨胀是求局部最大值的操做, 核B与图形卷积, 即核B覆盖的区域的像素点的最大值, 并把这个最大值复制给参考点指定的像素, 这样就会使图像中的高亮区域逐渐增长, 如下图所示:
图像预处理方法
函数原型:
图像预处理方法

⚫src: 输入原图像(建议为二值图)
⚫dst: 输出图像要求和src一样的尺寸和类型
⚫kernel: 膨胀操作的核, 当为NULL时, 表示使用参考点位于中心的3x3的核
一般使用cv2.getStructuringElement获得指定形状和尺寸的结构元素(核)
图像预处理方法
可选以下三种形状: 矩形、交叉形、椭圆形
ksize和anchor分别表示内核尺寸和锚点位置
⚫anchor: 锚的位置, 默认值Point(-1,-1), 表示位于中心
⚫interations: 膨胀的次数
⚫borderType: 边界模式, 一般采用默认值
⚫borderValue: 边界值, 一般采用默认值

exl:
k1=np.ones ( (5,5), np .uint8)
dilation = cv2.dilate (img, k1, iterations=1)

图像预处理方法

2)腐蚀—cv2.erode()

腐蚀和膨胀相反, 是取局部最小值, 高亮区域逐渐减小, 如下图所示:
图像预处理方法
函数原型:

图像预处理方法

exl:
k1=np.ones ((5,5), np .uint8)
erosion = cv2.erode(img, k1, iterations=1)

图像预处理方法

形态学其他操作:

开运算、闭运算、顶帽、黒帽、形态学梯度

基于膨胀腐蚀基础, 利用cv2.morphologyEx()函数进行操作
核心函数:
图像预处理方法
⚫src: 输入原图像
⚫dst: 输出图像要求和src一样的尺寸和类型
⚫op: 表示形态学运算的类型, 可以取如下值:
图像预处理方法
CV2 .MORPH DILATE
CV2 .MORPH
OPEN
CV2 .MORPH_ TOPHAT
CV2 .MORPH_ ERODE
CV2.MORPH CLOSE
CV2 .MORPH
BLACKHAT
CV2.MORPH_ GRADIENT
⚫kernel: 形态学运算内核, 若为NULL, 表示使用参考点位于中心的3x3内核, 一般使用getStruecuringElement函数获得
⚫anchor: 锚的位置, 默认值Point(-1,-1), 表示位于中心
⚫interations: 迭代使用函数的次数, 默认为1
⚫borderType: 边界模式, 一般采用默认值
⚫borderValue: 边界值, 一般采用默认值

1)开运算(open)

开运算是先腐蚀后膨胀的过程, 开运算可以用来消除小物体, 在纤细点处分离物体, 并在平滑较大物体边界的同时不明显的改变其面积。
图像预处理方法
图像预处理方法

2)闭运算(close)

闭运算是先膨胀后腐蚀的过程, 闭运算可以用来消除小型黑洞(黑色区域)。
图像预处理方法
图像预处理方法

3)形态学梯度(Gradient)

形态学梯度是膨胀图与腐蚀图之差, 对二值图可以将团块(blob)边缘凸显出来, 可以用其来保留边缘轮廓。

图像预处理方法
图像预处理方法

4)顶帽(Top Hat)

顶帽运算也被称为”礼帽”, 是开运算结果和原图像做差的结果, 可以用来分离比邻近点亮一些的斑块。
图像预处理方法
图像预处理方法

5)黒帽(Black Hat)

黑帽运算是原图像和开运算做差的结果, 可以用来分离比邻近点暗一些的斑块。
图像预处理方法
图像预处理方法