OpenCV学习——形态学操作与图像平滑

形态学操作

连通性

前置理解:邻域

4邻域:

在这里插入图片描述

D邻域:

在这里插入图片描述

8邻域:
在这里插入图片描述

连通性:两个像素位置相邻、且灰度值满足特定的相似准则

4连通:

在这里插入图片描述

8连通:

在这里插入图片描述

m连通:

  1. q在p的4邻域中,或者

  2. q在p的D邻域中,并且p的4邻域与q的4邻域的交集是空的(即没有灰度值在V集合中的像素点,即和p、q两个像素的灰度值不能一样)

直白解释m连通:以p为基准,q在p的四邻域或者D邻域,然后这两个的四邻域不能有和自己或者和对方相同或者相近的灰度级。

腐蚀和膨胀

腐蚀:原图中的高亮部分被蚕食,效果图拥有比原来更小的高亮区域

操作:用一个结构化元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做”与“操作,全为1则改像素为1,否则为0.

作用:消除物体的边界点,使目标缩小,可以消除小于结构元素的噪声点

cv.erode(img, kernel, iterations)
# img:图片
# kernel:核结构
# iterations:腐蚀次数,默认1

膨胀:使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域。

操作:用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做”与“操作,全为0则改像素为0,否则为1。

作用:将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞。

cv.dilate(img, keral, iterations)
# img:图片
# kernel:核结构
# iterations:膨胀次数,默认1

代码测试:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('img/15.jpg')

kernel = np.ones((5, 5), np.uint8)

erosion = cv.erode(img, kernel)
dilate = cv.dilate(img, kernel)

cv.imshow("original", img)
cv.imshow('erosion', erosion)
cv.imshow("dilate", dilate)
cv.waitKey(0)

在这里插入图片描述

肯定有人说,你是不是搞反了,不不不,腐蚀的是高亮部分,高亮针对的是灰度级高的,在这个白底的情况下,应该与黑底的相反。

开闭运算

通过将腐蚀和膨胀按照一定的次序进行处理,两者之间的运算的不可逆的,即开运算后的图像不能通过闭运算复原,反之同理。

总结:开运算去除(图像内容)外部干扰,闭运算去除(图像内容)内部干扰

开运算:先腐蚀后膨胀

作用:分离物体、消除小区域

特点:消除噪点、去除小干扰块而不影响原来的图像。

闭运算:先膨胀后腐蚀

作用:消除/闭合物体里的孔洞

特点:填充闭合区域

cv.morphologyEx(img, op, kernel)
# img:图像
# op:处理方式,开-->cv.MORPH_OPEN,闭-->cv.MORPH_CLOSE
# kernel:核结构

代码测试:

import cv2 as cv
import numpy as np

img = cv.imread('img/16.jpg')
img1 = cv.imread('img/17.jpg')

kernel = np.ones((10, 10), np.uint8)

open = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
close = cv.morphologyEx(img1, cv.MORPH_CLOSE, kernel)

cv.imshow("original1", img)
cv.imshow("original2", img1)
cv.imshow('open', open)
cv.imshow("close", close)
cv.waitKey(0)

在这里插入图片描述
在这里插入图片描述

礼帽和黑帽

礼帽:原图像与“开运算”结果图之差,取出亮度高的地方

作用:分离比邻近点亮一点的光斑。

黑帽:取出亮度低的地方,原图像与“闭运算”的差

作用:分离比邻近点暗一点的光斑。

cv.morphologyEx(img, op, kernel)
# img:要处理的图像
# op:处理方式
# cv.MORPH_OPEN    开运算
# cv.MORPH_CLOSE   闭运算
# cv.MORPH_TOPHAT  礼帽
# cv.MORPH_BLACKHAT 黑帽
# kernel:内核 

代码测试:

import cv2 as cv
import numpy as np

img = cv.imread('img/16.jpg')
img1 = cv.imread('img/17.jpg')

kernel = np.ones((10, 10), np.uint8)

topath = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
blackhat = cv.morphologyEx(img1, cv.MORPH_BLACKHAT, kernel)

cv.imshow("original1", img)
cv.imshow("original2", img1)
cv.imshow('topath', topath)
cv.imshow("blackhat", blackhat)
cv.waitKey(0)

在这里插入图片描述
在这里插入图片描述

图像平滑

图像噪声

图像噪声:图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。就是一些没有用的信息遮盖住了我们需要的信息,扰乱图像的可观测信息。

产生原因:图像采集、处理、传输等过程中不可避免的会受到噪声污染。常见的噪声有:椒盐噪声、高斯噪声。

椒盐噪声(脉冲噪声):一种随机出现的白点或黑点。(亮的区域有随机出现的黑色像素,暗的区域有随机出现的白色像素)

成因:影响讯号收到强干扰、类比数位转换器或元传输错误。

高斯噪声:噪声的密度函数服从高斯分布。

图像平滑

去除其中高频信息,保留低频信息

均值滤波

概念:任意一点的像素值,都是周围 N*M 个像素值的均值。

​ 有一个过滤器(矩阵n*m),又成为核,与图像像素进行运算得到对应像素点的结果

优点:简单、计算速度快

缺点:去噪时连同许多细节信息也被去除了

cv.blur(img, ksize, anchor, borderType)
# img:图像
# ksize:卷积核大小
# anchor:默认值(-1,-1),表示核中心
# borderType:边界类型

代码实现:

import cv2 as cv
img = cv.imread('img/18.jpg')
blur = cv.blur(img, (5,5))

cv.imshow("original", img)
cv.imshow("blur", blur)
cv.waitKey(0)

在这里插入图片描述

高斯滤波

高斯滤波:根据二维高斯滤波的概率分布函数图像,以图像的“中心点”作为原点,其他的点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。(还不是很理解,之后学习后会补充)

cv2.GaussianBlur(img, ksize, sigmax, sigmay, boederType)
# img:图像
# ksize:卷积核大小(宽高为奇数,可以不同)
# sigmax:水平方向标准差
# sigmay:垂直方向标准差
# borderType:边界类型

代码实现:

import cv2 as cv

img = cv.imread('img/18.jpg')
gaussianBlur = cv.GaussianBlur(img, (3,3), 1)

cv.imshow("original", img)
cv.imshow("GaussianBlur", gaussianBlur)
cv.waitKey(0)

在这里插入图片描述

中值滤波

中值滤波:非线性滤波技术,利用像素点邻域灰度值的终止来代替该像素点的灰度值,对椒盐噪声有着较好的作用

cv.medianBlur(img, ksize)
# img:图像
# ksize:卷积核大小
import cv2 as cv
img = cv.imread('img/18.jpg')
medianBulr = cv.medianBlur(img, 5)

cv.imshow("original", img)
cv.imshow("medianBulr", medianBulr)
cv.waitKey(0)

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源计算机视觉库,可以进行图像处理、图像分析和机器视觉等方面的开发。其中,图像形态学处理是OpenCV中的一种基本图像处理技术,主要用于图像形态学分析和形态学变换。 图像形态学处理主要包括以下几个基本操作: 1. 腐蚀(Erosion):将图像中的物体边界向内侵蚀,可以去除细小的噪点和连接物体之间的小桥梁。 2. 膨胀(Dilation):将图像中的物体边界向外膨胀,可以填充物体内的空洞和连接相邻物体。 3. 开运算(Opening):先对图像进行腐蚀操作,再对腐蚀后的图像进行膨胀操作,可以去除细小的物体和连接物体之间的小桥梁。 4. 闭运算(Closing):先对图像进行膨胀操作,再对膨胀后的图像进行腐蚀操作,可以填充物体内的空洞和连接相邻物体。 5. 梯度(Gradient):通过对图像进行膨胀和腐蚀操作,可以得到物体的边缘信息。 6. 礼帽(Top Hat):通过对原图像和开运算后的图像进行相减操作,可以得到原图像中小物体和较暗的区域信息。 7. 黑帽(Black Hat):通过对原图像和闭运算后的图像进行相减操作,可以得到原图像中小物体和较亮的区域信息。 这些操作可以通过OpenCV中的函数进行实现,例如: cv2.erode():进行腐蚀操作 cv2.dilate():进行膨胀操作 cv2.morphologyEx():进行开闭运算、梯度、礼帽和黑帽操作 在实际应用中,图像形态学处理常用于图像分割、形状分析、边缘检测、物体识别等方面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值