形态学操作作用
- Removing noise.
- Isolation of individual elements and joining disparate elements in an image.
- Finding of intensity bumps or holes in an image.
最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。
Erosion 腐蚀
原理
它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。
在该操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下的所有像素都为1,则认为原始图像中的像素(1或0)为1,否则将其侵蚀,即使其为零。
因此,根据内核的大小,所有靠近边界的像素都将被丢弃。因此前景物体的厚度或大小减小或者图像中的白色区域减小。
该方法适用于去除小的白噪声和分离两个连通的物体。
基本上,它计算给定核区域上的局部最小值。前景物体的厚度或大小会减少换句话说,图像中的白色区域会减少。
函数原型
cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像
kernel: 用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。
dst: 它是与src相同大小和类型的输出图像。
anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。
borderType: 是否应用边框,指定边框类型
iterations: 应用腐蚀的迭代次数
borderValue: 如果是constant边框类型,需要指定一个值
Return Value: 返回一个图像文章来源:https://www.toymoban.com/news/detail-446932.html
实例
#腐蚀操作
import cv2
import matplotlib.pyplot as plt
import numpy as np
img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)
kernel = np.ones((5,5),np.uint8) #设置kenenel大小
erosion_1 = cv2.erode(img,kernel,iterations=2)
erosion_2 = cv2.erode(img,kernel,iterations=3)
erosion_3 = cv2.erode(img,kernel,iterations=4)
res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple
cv2.imshow("res",res)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果显示
原图
结果
Dilation(膨胀)
原理
膨胀操作通常使用一种构造元素来探测和扩展输入图像中包含的形状。这种作用与侵蚀相反
在此操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下至少有一个像素为1,则该像素元素为1。
所以它增加了图像中的白色区域或者前景物体的大小增加了。
为了去除噪声,侵蚀之后是膨胀。因为,侵蚀会去除白噪声,但也会缩小我们的物体。所以我们把它扩张。因为噪音消失了,它们不会再回来,但我们的目标面积增加了。
它在连接对象的破碎部分时也很有用。
函数原型
cv2.dilate(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像
kernel: 用于膨胀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。
dst: 它是与src相同大小和类型的输出图像。
anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。
borderType: 是否应用边框,指定边框类型
iterations: 应用膨胀的迭代次数
borderValue: 如果是constant边框类型,需要指定一个值
Return Value: 返回一个图像
实例
#腐蚀还原
import cv2
import matplotlib.pyplot as plt
import numpy as np
img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)
kernel = np.ones((5,5),np.uint8) #设置kenenel大小
erosion = cv2.erode(img,kernel,iterations=3) # 腐蚀去除白噪点
cv2.imshow("erosion",erosion)
dilate = cv2.dilate(erosion,kernel,iterations=3) # 膨胀还原图形
cv2.imshow("dilate",dilate)
#res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple
cv2.waitKey(0)
cv2.destroyAllWindows()
结果展示
原图
腐蚀后
膨胀还原后
文章来源地址https://www.toymoban.com/news/detail-446932.html
到了这里,关于python-opencv之形态学操作(腐蚀和膨胀)原理详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!