首页 >后端开发 >Python教程 >Python中的直方图均衡

Python中的直方图均衡

Jennifer Aniston
Jennifer Aniston原创
2025-02-26 11:19:13623浏览

Python的图像增强:直方图均衡教程

曾经被模糊,低质量的图像感到失望吗? 想象一下增强图像以揭示清晰的细节并提高清晰度。 本教程向您展示了如何使用Python和直方图均衡的力量实现此目标。 直方图均衡是一种显着增强图像对比度的技术。 这是几乎所有相机系统中用于提高图像质量的基本过程,到本教程结束时,您将了解原因。

>我们将探讨哪些直方图和直方图均衡是如何影响图像的,然后在Python中实现该技术。让我们开始!

理解图像直方图

直方图在视觉上表示数值数据的分布。 X轴显示数据范围(bin),y轴显示每个bin中的值频率。 在图像处理中,每个像素具有颜色和强度。颜色通常由红色,绿色和蓝色(RGB)通道值表示,范围从0(无颜色)到255(全彩色)。 颜色通道的直方图显示了该通道的每个强度值(0-255)的频率。 灰度图像具有单个直方图,因为每个像素的RGB值都是相同的。

>。 直方图集中在狭窄的强度范围内的

>图像通常缺乏清晰度和细节。 均衡的图像表现出更广泛,更均匀的强度分布。

什么是直方图均衡?

> 直方图均衡

直方图拉伸图像的直方图以利用全强度范围。 这意味着将强度值传播到包括黑暗和光面积,从而导致更高的对比度和改善的细节可见性。虽然并不总是适合标准摄影的理想选择,但它在需要增强细节(例如卫星或热成像)的应用中是无价的。

>

我们将使用灰度猴子图像(对比度减少)为例:>

>访问像素强度

让我们研究如何使用Python和OpenCV访问像素强度值:

此代码读取图像,确定其尺寸,并打印一个像素值的示例。 OPENCV使用BGR(蓝色,绿色,红色)排序,因此

表示每个通道的强度为113。 直方图均衡的直方图修饰这些像素强度以增强对比度。 我们可以使用直方图可视化这一点:每个颜色通道(或灰度单一直方图)。 X轴显示强度值,Y轴显示它们的频率。

使用来自单独的图像直方图文章中的代码,我们的示例图像的直方图如下:> Histogram Equalization in Python

此直方图显示了跨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的原始图像和增强图像的比较:

Histogram Equalization in Python

增强的图像明显提高了清晰度。 增强图像的直方图是平坦的,表明强度的均匀分布。 强度频率分析还将显示值更均匀的值。

结论

Histogram Equalization in Python 本教程演示了如何使用python中的直方图均衡来增强图像对比度。 结果突出了该技术在提高图像质量和细节可见性方面的有效性。 由此产生的扁平直方图证实了像素强度的成功重新分布。

>

以上是Python中的直方图均衡的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn