Python的图像增强:直方图均衡教程
曾经被模糊,低质量的图像感到失望吗? 想象一下增强图像以揭示清晰的细节并提高清晰度。 本教程向您展示了如何使用Python和直方图均衡的力量实现此目标。 直方图均衡是一种显着增强图像对比度的技术。 这是几乎所有相机系统中用于提高图像质量的基本过程,到本教程结束时,您将了解原因。
>我们将探讨哪些直方图和直方图均衡是如何影响图像的,然后在Python中实现该技术。让我们开始!
理解图像直方图
>。 直方图集中在狭窄的强度范围内的
>图像通常缺乏清晰度和细节。 均衡的图像表现出更广泛,更均匀的强度分布。什么是直方图均衡?
> 直方图均衡直方图拉伸图像的直方图以利用全强度范围。 这意味着将强度值传播到包括黑暗和光面积,从而导致更高的对比度和改善的细节可见性。虽然并不总是适合标准摄影的理想选择,但它在需要增强细节(例如卫星或热成像)的应用中是无价的。
>我们将使用灰度猴子图像(对比度减少)为例:
>访问像素强度
让我们研究如何使用Python和OpenCV访问像素强度值:
此代码读取图像,确定其尺寸,并打印一个像素值的示例。 OPENCV使用BGR(蓝色,绿色,红色)排序,因此
表示每个通道的强度为113。 直方图均衡的直方图修饰这些像素强度以增强对比度。 我们可以使用直方图可视化这一点:每个颜色通道(或灰度单一直方图)。 X轴显示强度值,Y轴显示它们的频率。使用来自单独的图像直方图文章中的代码,我们的示例图像的直方图如下:
此直方图显示了跨BGR通道的分布。来自像素值代码的样本输出显示了跨通道的一致强度值:
<code class="language-python">import cv2, random img = cv2.imread('monkey.jpg') img_shape = img.shape height = img_shape[0] width = img_shape[1] for row in range(width): for column in range(height): if random.randint(0, width) == row and row: print(img[column][row])</code>分析强度频率
此Python代码计算像素强度的频率:
>输出显示最频繁的强度值及其计数,突出了浓度有限的范围。 在Python中实现直方图均衡
><code>[113 113 113] [110 110 110] [106 106 106] ...</code>我们将使用OpenCV的
函数,但它仅适用于灰度图像。 因此,我们将转换为Yuv色彩空间,均衡Y通道(亮度),然后转换回BGR:
完整的示例和结果
equalizeHist()
这是完整的代码:
<code class="language-python">import cv2 img = cv2.imread('monkey.jpg') img_shape = img.shape height = img_shape[0] width = img_shape[1] frequency = {} for row in range(width): for column in range(height): intensity = img[column][row][0] count = frequency.get(intensity, 0) frequency[intensity] = count + 1 print("Unique Intensities", len(frequency)) most_frequent = dict(sorted(frequency.items(), key=lambda elem: elem[1], reverse=True)) intensity_values = most_frequent.keys() i = 0 for intensity in intensity_values: i += 1 if i <= 5: print(intensity, most_frequent[intensity])</code>
产生的图像(
):
<code class="language-python">import cv2 import numpy img = cv2.imread('monkey.jpg') img_to_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) img_to_yuv[:, :, 0] = cv2.equalizeHist(img_to_yuv[:, :, 0]) hist_equalization_result = cv2.cvtColor(img_to_yuv, cv2.COLOR_YUV2BGR) cv2.imwrite('result.jpg', hist_equalization_result)</code>
result.jpg
的原始图像和增强图像的比较:
增强的图像明显提高了清晰度。 增强图像的直方图是平坦的,表明强度的均匀分布。 强度频率分析还将显示值更均匀的值。
结论
本教程演示了如何使用python中的直方图均衡来增强图像对比度。 结果突出了该技术在提高图像质量和细节可见性方面的有效性。 由此产生的扁平直方图证实了像素强度的成功重新分布。
以上是Python中的直方图均衡的详细内容。更多信息请关注PHP中文网其他相关文章!