"Threshold" 在图像处理中是一个非常重要的概念,它涉及到将图像的像素值转换为二值图像(即图像中的像素值只有两种可能:0 或 1,或者在某些情况下是其他两个指定的值)。通过设置一个阈值(threshold),可以将图像中的像素分为两类:一类是高于阈值的像素,另一类是低于或等于阈值的像素。
以下是一些常见的阈值操作类型:
-
二值化(Binary):
- 像素值大于或等于阈值的设置为最大值(通常是255),小于阈值的设置为0。
-
#像素值大于175全设置为255,其余的全是0 ret,binary=cv2.threshold(image,175,255,cv2.THRESH_BINARY)
-
反向二值化(Binary Inverted):
- 像素值小于或等于阈值的设置为最大值(通常是255),大于阈值的设置为0。
-
#像素值大于175全设置为0,其余的全是255 ret,binaryinv=cv2.threshold(image,175,255,cv2.THRESH_BINARY_INV)
-
截断(Truncation):
- 像素值大于或等于阈值的设置为阈值,小于阈值的保持不变。
-
#像素值大于175全设置为175,其余的不变 ret,trunc=cv2.threshold(image,175,255,cv2.THRESH_TRUNC)
-
阈值到零(To Zero):
- 像素值小于或等于阈值的设置为0,大于阈值的保持不变。
-
#像素值大于175全不变,其余的全是0 ret,tozero=cv2.threshold(image,175,255,cv2.THRESH_TOZERO)
-
反向阈值到零(To Zero Inverted):
- 像素值大于阈值的设置为0,小于或等于阈值的保持不变。
-
#像素值大于175全是0,其余的不变 ret,tozeroinv=cv2.threshold(image,175,255,cv2.THRESH_TOZERO_INV)
cv2.boxFilter
是 OpenCV 库中的一个函数,用于对图像进行盒形滤波(也称为均值滤波),这是一种简单的线性滤波技术,常用于图像平滑处理。盒形滤波器通过计算图像中每个像素及其邻域像素的均值来实现平滑效果,可以有效地减少图像噪声。
dst = cv2.boxFilter(src, ddepth, ksize, anchor=None, normalize=True, borderType=None)
- src: 输入图像。
- ddepth: 输出图像的深度,如果设置为
-1
,则输出图像的深度与输入图像相同。 - ksize: 滤波器的大小,以
(width, height)
的形式给出。例如,(3, 3)
或(5, 5)
。 - anchor: 锚点(可选),用于定义滤波器的中心。默认情况下,锚点位于核的中心。如果提供,它应该是一个
(x, y)
形式的元组。 - normalize: 归一化标志(可选),如果设置为
True
,则每个像素的值是邻域像素值的均值;如果设置为False
,则每个像素的值是邻域像素值的总和。 - borderType: 边界填充类型(可选),用于处理图像边缘。默认是
cv2.BORDER_DEFAULT
。
功能描述
- 平滑效果: 通过计算每个像素及其周围邻域像素的均值来实现平滑效果,有助于减少图像中的噪声。
- 归一化:
normalize=True
表示滤波器的值会被归一化,即每个像素的值是邻域像素值的均值,这有助于保持图像的亮度不变。normalize=False
则表示每个像素的值是邻域像素值的总和,这可能导致图像亮度增加。 - 边界处理:
borderType
参数决定了如何处理图像的边界。常见的边界类型包括cv2.BORDER_CONSTANT
(填充固定值,如0),cv2.BORDER_REPLICATE
(复制边缘像素),cv2.BORDER_REFLECT
(镜像反射)等。 -
#对图像noised应用3x3大小的盒形滤波器。参数-1表示滤波器的深度与原图像相同,normalize=True表示滤波器的值会被归一化,即每个像素的值是邻域像素值的均值。 boxfilter=cv2.boxFilter(noised,-1,(3,3),normalize=True) cv2.imshow("boxfilter",boxfilter) #这次normalize=False表示滤波器的值不会被归一化,即每个像素的值是邻域像素值的总和。 boxfilter1=cv2.boxFilter(noised,-1,(3,3),normalize=False) cv2.imshow("boxfilter1",boxfilter1)
cv2.GaussianBlur
是 OpenCV 库中的一个函数,用于对图像进行高斯模糊处理。高斯模糊是一种常用的图像平滑技术,它通过使用高斯函数作为权重来计算邻域像素值的加权平均,从而减少图像噪声和细节。
dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY=None, borderType=None)
- src: 输入图像。
- ksize: 高斯核的大小,以
(width, height)
的形式给出。ksize
必须为正数和奇数。 - sigmaX: 高斯核在 X 方向上的标准差。
- sigmaY: 高斯核在 Y 方向上的标准差。如果设置为
None
,则sigmaY
将与sigmaX
相同。 - borderType: 边界填充类型(可选),用于处理图像边缘。默认是
cv2.BORDER_DEFAULT
。
功能描述
- 平滑效果: 高斯模糊通过使用高斯函数对像素及其邻域进行加权平均,从而实现平滑效果。这种处理方式可以有效地减少图像中的噪声和细节。
- 标准差:
sigmaX
和sigmaY
参数控制高斯核的形状,即权重分布。标准差越大,权重分布越广,模糊效果越强。 - 边界处理:
borderType
参数决定了如何处理图像的边界。常见的边界类型包括cv2.BORDER_CONSTANT
(填充固定值,如0),cv2.BORDER_REPLICATE
(复制边缘像素),cv2.BORDER_REFLECT
(镜像反射)等。 -
#使用cv2.GaussianBlur函数对图像noised应用3x3大小的高斯模糊。第三个参数1是高斯核的标准差,在这里设置为1。 gaussian=cv2.GaussianBlur(noised,(3,3),1) cv2.imshow("gaussian",gaussian)
cv2.medianBlur
是 OpenCV 库中的一个函数,用于对图像进行中值滤波。中值滤波是一种非线性滤波技术,它将每个像素的值替换为邻域像素值的中位数。这种滤波方法特别有效于去除图像中的“椒盐”噪声(即随机出现的白点和黑点),同时保持边缘的锐度。
dst = cv2.medianBlur(src, ksize)
- src: 输入图像。
- ksize: 应用中值滤波的核心大小,必须是一个大于1的奇数。
功能描述
- 去噪: 中值滤波通过选择邻域内的中位数作为输出像素值,有效地去除了噪声点。
- 保留边缘: 与其他类型的滤波器(如均值滤波或高斯滤波)相比,中值滤波在平滑图像的同时,更好地保留了图像的边缘信息。
-
#使用cv2.medianBlur函数对图像noised应用5x5大小的中值滤波器。中值滤波器是一种非线性滤波器,它将每个像素的值替换为邻域像素值的中位数。 median=cv2.medianBlur(noised,5) cv2.imshow("median",median)