本文将帮助理解图像对比度增强的技术。对比度是指在现实世界中或数字图像中特定物体发出的光量。对比度使能够在图像的背景和前景中识别物体。
当增强对比度时,试图找到图像中最普遍的像素值,并尝试将大多数/所有像素标准化(带到一个共同的像素范围),从而创建一个更均匀的视觉效果,并平滑图像。这是因为会有更多具有相似强度的像素,因此向人眼发射相似数量的光。
会发现,当图像的对比度增加时,图像的亮部将变得更亮,暗部将变得更暗。这个解释可以通过一个实时的例子来加强:在周围找到一个物体(一个框架、一个杯子等)。将视力集中在这个物体上几秒钟(5-10秒)。
注意眼睛将如何调整到这个物体的距离,以确保能清晰地看到它。再次看这个物体时,仔细注意眼睛如何隔离环境中的特定物体。有意识地观察眼睛将如何尝试模糊(轻微地)任何其他进入视野的物体,而尝试看一个特定的物体。
上述经历的解释是简单而有趣的。当看物体时,导致眼睛调整内部的神经和细胞配置,从而使眼睛主要关注那个物体。眼睛试图从周围环境和物体本身捕获尽可能多的光,在这样做的过程中无意中增加了物体的对比度,从而使物体在实时中变得更暗,因此将物体带入焦点,使其成为视野的前景,并使其他所有东西模糊/变暗(不完全)进入视野的背景。
事实上,当阅读这个声明时,眼睛已经调整自己来增强这些文字的对比度,使能够将前景焦点带到文本上,以便轻松阅读。
鉴于处理的图像中有很多像素,需要一个简单的方法来直观地表示和理解像素方向,特别是当查看增强对比度的图像时。将使用的主要可视化工具是Python编程语言中的MatPlotLib包。
在这篇文章的最后,想为提供一个像素强度直方图的简短示例。为了帮助在这个学习经历中,将使用一个可以在此链接下载的图像。或者,可以保存下面找到的图像。请注意,这只是示例——将在以后的文章中进一步深入代码解释。
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 加载图像到系统内存,并以灰度格式显示到屏幕上
image = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)
plt.imshow(image, cmap='gray')
plt.show()
# 创建直方图
plt.hist(image.ravel(), 256, [0,256], color='crimson')
plt.ylabel("像素数量", color='crimson')
plt.xlabel("像素强度 - 从0到255", color='crimson')
plt.title("显示像素强度及对应像素数量的直方图", color='crimson')
plt.show()
直方图将显示如下:从标题中可以推断出,这个直方图将向展示属于特定强度的像素数量。实际上,这个直方图向传达了图像的阴影和颜色。如果从左到右(从0开始)看直方图,注意到左边有一簇低值像素,代表黑色(正如从之前的文章中知道的)。观察图像时,确实可以看到有一簇树木占据了在直方图桶中观察到的大量黑色阴影像素。