嘻嘻!十月快乐!祖国母亲生日快乐!
十月的小李又上线啦!
今天记录一个简单但实用的图像处理方法 是之前在做实验的时候预处理用到的阈值化 简单记录一下!
——————————————————
阈值化(Threshold)
阈值即为界限,或者说是临界值,是指一个效应能够产生的最低值或最高值。在图像处理中它的意思是颜色转换的临界点。阈值化实则是一种简单的图像分割的方法。
它旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。灰度转换处理后的图像中,每个像素都只有一个灰度值,大小表示明暗程度。利用阈值化,我们就可以从一副图像中分割出我们需要的物体部分(这里的物体可以是一部分或者整体)。此方法是基于图像中物体与背景之间的灰度差异且此分割属于像素级的分割。
将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。常见的公式如下(当灰度Gray小于阈值T时,其像素设置为0,表示黑色;当灰度Gray大于或等于阈值T时,其Y值为255,表示白色。):
全局阈值化与局部阈值化
全局阈值化:对整幅图像都是用一个统一的阈值来进行二值化;
局部自适应阈值化:根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。常用的局部自适应阈值有:1)局部邻域块的均值;2)局部邻域块的高斯加权和。
函数:cv2.threshold(img, threshold, maxval,type)
threshold是设定的阈值
maxval是当灰度值大于(或小于)阈值时将该灰度值赋成的值
type规定的是当前二值化的方式
代码:
#全局阈值
def threshold_demo(image):
gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化
#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
print("threshold value %s"%ret)
cv.namedWindow("binary0", cv.WINDOW_NORMAL)
cv.imshow("binary0", binary)
#局部阈值
def local_threshold(image):
gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化
#自适应阈值化能够根据图像不同区域亮度分布,改变阈值
binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY, 25, 10)
cv.namedWindow("binary1", cv.WINDOW_NORMAL)
cv.imshow("binary1", binary)
效果图;
其他阈值化类型
1.二进制阈值化
2.反二进制阈值化 3.截断阈值化 4.阈值化为0 5.反阈值化为0
参考: 基本的阈值操作
[Python图像处理] 七.图像阈值化处理及算法对比
Ending!
十月要满血复活!
网友评论