首頁 > 後端開發 > Python教學 > Python中的直方圖均衡

Python中的直方圖均衡

Jennifer Aniston
發布: 2025-02-26 11:19:13
原創
623 人瀏覽過

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通道的分佈。來自像素值代碼的樣本輸出顯示了跨通道的一致強度值:>

直方圖均衡的目的是使該直方圖平坦,在整個範圍內更均勻地分佈強度。
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])
登入後複製
分析強度頻率

此Python代碼計算像素強度的頻率:

>輸出顯示最頻繁的強度值及其計數,突出了濃度有限的範圍。 在Python中實現直方圖均衡

>
<code>[113 113 113]
[110 110 110]
[106 106 106]
...</code>
登入後複製
我們將使用OpenCV的

函數,但它僅適用於灰度圖像。 因此,我們將轉換為Yuv色彩空間,均衡Y通道(亮度),然後轉換回BGR:

完整的示例和結果

equalizeHist()這是完整的代碼:

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])
登入後複製

產生的圖像(

):

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)
登入後複製

result.jpg的原始圖像和增強圖像的比較:

Histogram Equalization in Python

增強的圖像明顯提高了清晰度。 增強圖像的直方圖是平坦的,表明強度的均勻分佈。 強度頻率分析還將顯示值更均勻的值。

結論

Histogram Equalization in Python 本教程演示瞭如何使用python中的直方圖均衡來增強圖像對比度。 結果突出了該技術在提高圖像質量和細節可見性方面的有效性。 由此產生的扁平直方圖證實了像素強度的成功重新分佈。

>

以上是Python中的直方圖均衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板