中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python OpenCV中直方圖均衡化的示例分析

發布時間:2021-06-11 14:51:41 來源:億速云 閱讀:267 作者:小新 欄目:開發技術

這篇文章主要介紹python OpenCV中直方圖均衡化的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

考慮一個圖像,其像素值僅限制在特定的值范圍內。例如,更明亮的圖像將使所有像素都限制在高值中。但是一個好的圖像會有來自圖像的所有區域的像素。所以你需要把這個直方圖拉伸到兩端(如下圖所給出的),這就是直方圖均衡的作用(用簡單的話說)。這通常會改善圖像的對比度。

python OpenCV中直方圖均衡化的示例分析 

建議閱讀關于直方圖均衡的wikipedia頁面Histogram Equalization,了解更多有關它的詳細信息。它給出了一個很好的解釋,給出了一些例子,這樣你就能在讀完之后理解所有的東西。同樣,我們將看到它的Numpy實現。之后,我們將看到OpenCV函數。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('wiki.jpg', 0)

hist, bins = np.histogram(img.flatten(), 256, [0,256])

cdf = hist.cumsum()
cdf_normalized = cdf*float(hist.max())/cdf.max()

plt.plot(cdf_normalized, color = 'b')
plt.hist(img.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()

python OpenCV中直方圖均衡化的示例分析

你可以看到,直方圖位于更亮的區域。我們需要完整的頻譜。為此,我們需要一個轉換函數,它將更亮區域的輸入像素映射到全區域的輸出像素。這就是直方圖均衡所做的。

現在我們找到了最小的直方圖值(不包括0),并應用了在wiki頁面中給出的直方圖均衡等式。但我用在Numpy的遮罩數組的概念數組上。對于遮罩數組,所有操作都是在非遮罩元素上執行的。

cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m-cdf_m.min()) * 255 / (cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')

現在我們有了一個查找表,它提供了關于每個輸入像素值的輸出像素值的信息。所以我們只要應用變換。

img2 = cdf[img]

現在我們計算它的直方圖和cdf,就像之前一樣,結果如下:

python OpenCV中直方圖均衡化的示例分析

另一個重要的特征是,即使圖像是一個較暗的圖像(而不是我們使用的更亮的圖像),在均衡之后,我們將得到幾乎相同的圖像。因此,它被用作一種“參考工具”,使所有的圖像都具有相同的光照條件。這在很多情況下都很有用。例如,在人臉識別中,在對人臉數據進行訓練之前,人臉的圖像是均勻的,使它們具有相同的光照條件。

OpenCV中的直方圖均衡化

OpenCV有一個函數可以這樣做,cv.equalizeHist()。它的輸入只是灰度圖像,輸出是我們的直方圖均衡圖像。

img = cv.imread('wiki,jpg', 0)
equ = cv.equalizeHist(img)
res = np.hstack((img, equ)) # 并排疊加圖片
cv.imwrite('res.png', res)

python OpenCV中直方圖均衡化的示例分析

所以現在你可以用不同的光條件來拍攝不同的圖像,平衡它,并檢查結果。

當圖像的直方圖被限制在一個特定的區域時,直方圖均衡是很好的。在那些有很大強度變化的地方,直方圖覆蓋了一個大區域,比如明亮的和暗的像素,這樣的地方就不好用了。

CLAHE(對比有限的自適應直方圖均衡/Contrast Limited Adaptive Histogram Equalization)

我們剛剛看到的第一個直方圖均衡化,考慮到圖像的全局對比。在很多情況下,這不是一個好主意。例如,下圖顯示了一個輸入圖像及其在全局直方圖均衡之后的結果。

python OpenCV中直方圖均衡化的示例分析

在直方圖均衡化之后,背景對比得到了改善。但是比較兩幅圖像中的雕像的臉。由于亮度過高,我們丟失了大部分的信息。這是因為它的直方圖并不局限于一個特定的區域,就像我們在前面的例子中看到的那樣。

為了解決這個問題,可以使用了自適應直方圖均衡。在這一點上,圖像被劃分為幾個小塊,稱為“tiles”(在OpenCV中默認值是8x8)。然后每一個方塊都是像平常一樣的直方圖。因此,直方圖會限制在一個小區域(除非有噪聲)。如果噪音在那里,它就會被放大。為了避免這種情況,會應用對比限制。如果任何直方圖bin超出指定的對比度限制(默認情況下是40),在應用直方圖均衡之前,這些像素被裁剪并均勻地分布到其他bin。均衡后,刪除邊界中的工件,采用雙線性插值。

cv.createCLAHE([, clipLimit[, tileGridSize]])

import numpy as np
import cv2 as cv

img = cv.imread('tsukuba_1.png', 0)

# create a CLAHE object (Arguments are optional).
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)

cv.imread('clahe_2.jpg', cl1)

python OpenCV中直方圖均衡化的示例分析

以上是“python OpenCV中直方圖均衡化的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌| 龙岩市| 荆州市| 镇坪县| 玛多县| 赫章县| 舟曲县| 郑州市| 深泽县| 麻栗坡县| 松江区| 衡水市| 沂水县| 洪洞县| 济宁市| 天水市| 佳木斯市| 无棣县| 井研县| 罗江县| 卓尼县| 昌平区| 绥芬河市| 巴彦县| 河津市| 保德县| 巴彦淖尔市| 额尔古纳市| 衡南县| 瓦房店市| 满洲里市| 凤城市| 乐业县| 克东县| 乃东县| 南昌市| 恭城| 姜堰市| 新津县| 静乐县| 徐州市|