记录在进行图像处理当中,常用到的灰度值、像素值区别以及常见图像处理方式
灰度值和像素值的区别
-
像素值:在数字图像中,像素值通常指的是构成图像的最小单元的亮度或颜色值。在彩色图像中,每个像素值通常由红、绿、蓝(RGB)三个颜色通道的值组成,每个通道的取值范围通常是0-255(8位深)。因此,一个像素在彩色图像中可以表示约1670万种颜色(256 × 256 × 256)。
-
灰度值:灰度值是指在灰度图像中每个像素的亮度值,通常也取值范围为0-255,其中0代表黑色,255代表白色,介于两者之间的值表示不同的灰度。灰度图像通常只包含亮度信息,不包含颜色信息。(一般认为灰度图的像素值指的是灰度值)
对应关系
- 灰度图:使用灰度值来表示,每个像素只有一个灰度值,用于表示图像的明暗程度。
- 彩色图:使用像素值来表示,每个像素包含RGB三个通道的值,用于表示颜色和亮度。
在Python图像处理中超出阈值的处理
在Python的图像处理中,常用的库如PIL(Python Imaging Library)或OpenCV,处理超出阈值的像素值时通常有几种方法:
-
阈值化(Thresholding):这是一种简单的形式,如果像素值超过某个阈值,它会被设置为最大值(通常是255,表示白色),如果低于阈值,它会被设置为最小值(通常是0,表示黑色)。这种方法常用于灰度图像的二值化(即将图像中的像素值设置为0或255的过程,这样处理后的图像只包含黑白两种颜色。二值化主要用于简化图像分析,便于后续的图像处理任务,如轮廓检测、特征提取等)。
-
截断(Clipping):对于超出特定范围的值,可以将它们截断到最大或最小值。例如,如果设置了0-255的范围,任何超出这个范围的值将被设为255或0。
-
归一化(Normalization):将图像的像素值重新缩放到一个指定的范围内,通常是0到255。这通常用于调整图像的对比度。
NormalizedValue = Value − MinValue MaxValue − MinValue × ( NewMax − NewMin ) + NewMin \text{NormalizedValue} = \frac{\text{Value} - \text{MinValue}}{\text{MaxValue} - \text{MinValue}} \times (\text{NewMax} - \text{NewMin}) + \text{NewMin} NormalizedValue=MaxValue−MinValueValue−MinValue×(NewMax−NewMin)+NewMin -
自适应阈值化:与简单阈值化不同,自适应阈值化会根据像素周围区域的亮度自动调整阈值。这对于光照不均匀的图像特别有用。自适应阈值化不是使用全局阈值,而是根据图像局部区域的像素值计算阈值。其数学原理基于局部区域的统计特性,如平均值或加权平均值,使得阈值可以根据局部像素值的分布动态调整。
cv2.imshow()或plt.show()显示图像时,对超出阈值处理方式
对于cv2.imshow():
- 如果图像的数据类型是无符号8位整数(uint8),那么超出0-255范围的像素值将被自动截断到这个范围内。也就是说,小于0的值将变为0,大于255的值将变为255。
- 如果图像的数据类型是浮点数(如float32或float64),cv2.imshow()会将像素值乘以255,然后转换为uint8类型。在此过程中,小于0的值将变为0,大于1的值将变为255。
对于plt.show():
- 如果图像的数据类型是uint8,plt.imshow()会直接显示图像,不对超出范围的像素值进行任何特殊处理。
- 如果图像的数据类型是浮点数,plt.imshow()会将像素值映射到0-1的范围内,然后应用颜色映射表(colormap)进行显示。默认情况下,小于0的值将显示为颜色映射表的最小值所对应的颜色,大于1的值将显示为颜色映射表的最大值所对应的颜色。
cv2.imshow()和plt.imshow()在显示图像时会对超出范围的像素值进行一定的处理,但这并不会改变原始图像数据,原始图像数据中的像素值仍然保持不变。