OpenCV:直方圖均衡
步驟:
第 1 步:手動(dòng)均衡
第 2 步:通過(guò)使用 OpenCV 函數(shù)
什么是圖像直方圖?
它是圖像強(qiáng)度分布的圖形表示。它量化了所考慮的每個(gè)強(qiáng)度值的像素?cái)?shù)。
第 1 步:手動(dòng)均衡
%matplotlib inline
from IPython.display import display, Math, Latex
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
img = Image.open('DATA/einstein.jpg')
plt.imshow(img)
輸出:
顯示彩色圖像
將圖像轉(zhuǎn)換為 numpy 數(shù)組,以便 OpenCV 可以使用:
img = np.a(chǎn)sanyarray(img)
img.shape
輸出:
(2354, 2560, 3)
將 RGB 轉(zhuǎn)換為灰度:
import cv2
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img.shape
輸出:
(2354, 2560)
顯示圖像:
plt.imshow(img, cmap='gray')
輸出:
我們現(xiàn)在知道如何處理直方圖了
img.max()
輸出:
255
img.min()
輸出:
0
img.shape
輸出:
(2354, 2560)
把它展平:
flat = img.flatten()
# 1 row 2354 x 2560 = 6.026.240
flat.shape
輸出:
(6026240,)
顯示直方圖
plt.hist(flat, bins=50)
請(qǐng)注意,灰度值在某個(gè)值周?chē)植己懿?/p>
什么是直方圖均衡?
為了更清楚,從上圖中,你可以看到像素似乎聚集在可用強(qiáng)度范圍的中間。直方圖均衡所做的就是擴(kuò)大這個(gè)范圍。
# formula for creating the histogram
display(Math(r'P_x(j) = sum_{i=0}^{j} P_x(i)'))
# create our own histogram function
def get_histogram(image, bins):
# array with size of bins, set to zeros
histogram = np.zeros(bins)
# loop through pixels and sum up counts of pixels
for pixel in image:
histogram[pixel] += 1
# return our final result
return histogram
hist = get_histogram(flat, 256)
plt.plot(hist)
[
# create our cumulative sum function
def cumsum(a):
a = iter(a)
b = [next(a)]
for i in a:
b.a(chǎn)ppend(b[-1] + i)
return np.a(chǎn)rray(b)
# execute the fn
cs = cumsum(hist)
# display the result
plt.plot(cs)
[
# formula to calculate cumulation sum
display(Math(r's_k = sum_{j=0}^{k} {rac{n_j}{N}}'))
# re-normalize cumsum values to be between 0-255
# numerator & denomenator
nj = (cs - cs.min()) * 255
N = cs.max() - cs.min()
# re-normalize the cdf
cs = nj / N
plt.plot(cs)
[
Casting:
# cast it back to uint8 since we can't use floating point values in imagescs =
cs.a(chǎn)stype('uint8')
plt.plot(cs)
輸出:
[
獲取 CDF:
# get the value from cumulative sum for every index in flat, and set that as img_new
img_new = cs[flat]
# we see a much more evenly distributed histogram
plt.hist(img_new, bins=50)
它是如何工作的?
均衡意味著將一個(gè)分布(給定的直方圖)映射到另一個(gè)分布(強(qiáng)度值的更廣泛和更均勻的分布),因此強(qiáng)度值分布在整個(gè)范圍內(nèi)。
# get the value from cumulative sum for every index in flat, and set that as img_new
img_new = cs[flat]
# we see a much more evenly distributed histogram
plt.hist(img_new, bins=50)
# put array back into original shape since we flattened it
img_new = np.reshape(img_new, img.shape)
img_new
輸出:
array([[233, 231, 228, ..., 216, 216, 215],
[233, 230, 228, ..., 215, 215, 214],
[233, 231, 229, ..., 213, 213, 212],
...,
[115, 107, 96, ..., 180, 187, 194],
[111, 103, 93, ..., 187, 189, 192],
[111, 103, 93, ..., 187, 189, 192]], dtype=uint8)
一探究竟:
# set up side-by-side image display
fig = plt.figure()
fig.set_figheight(15)
fig.set_figwidth(15)
fig.a(chǎn)dd_subplot(1,2,1)
plt.imshow(img, cmap='gray')
# display the new image
fig.a(chǎn)dd_subplot(1,2,2)
plt.imshow(img_new, cmap='gray')
plt.show(block=True)
使用 OpenCV equalizeHist(img) 方法
第 2 步:通過(guò)使用 OpenCV 函數(shù)
# Reading image via OpenCV and Equalize it right away!
img = cv2.imread('DATA/einstein.jpg',0)
equ = cv2.equalizeHist(img)
準(zhǔn)備好!這就是你需要做的!
fig = plt.figure()
fig.set_figheight(15)
fig.set_figwidth(15)
fig.a(chǎn)dd_subplot(1,2,1)
plt.imshow(img, cmap='gray')
# display the Equalized (equ) image
fig.a(chǎn)dd_subplot(1,2,2)
plt.imshow(equ, cmap='gray')
plt.show(block=True)
print("That?s it! Thank you once again!I hope will be helpful.")
輸出:
That?s it! Thank you once again!
I hope will be helpful.
原文標(biāo)題 : OpenCV:直方圖均衡
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-12.26立即報(bào)名>>> 【在線會(huì)議】村田用于AR/VR設(shè)計(jì)開(kāi)發(fā)解決方案
-
1月8日火熱報(bào)名中>> Allegro助力汽車(chē)電氣化和底盤(pán)解決方案優(yōu)化在線研討會(huì)
-
即日-1.14火熱報(bào)名中>> OFweek2025中國(guó)智造CIO在線峰會(huì)
-
即日-1.24立即參與>>> 【限時(shí)免費(fèi)】安森美:Treo 平臺(tái)帶來(lái)出色的精密模擬
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
精彩回顧立即查看>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專(zhuān)題
- 1 人形機(jī)器人核心零部件,誰(shuí)是盈利最強(qiáng)企業(yè)?
- 2 AI Agent現(xiàn)狀如何?聊聊近期國(guó)內(nèi)的智能體市場(chǎng)動(dòng)向
- 3 5nm重大突破,研祥智能助力半導(dǎo)體企業(yè)高效發(fā)展!
- 4 人形機(jī)器人引爆“PEEK材料”!概念股梳理(名單)
- 5 馬云沒(méi)回牌桌,但重注全壓在了
- 6 蘋(píng)果或?qū)渴肿止?jié)騰訊大模型,我國(guó)大模型產(chǎn)業(yè)發(fā)展駛?cè)肟燔?chē)道
- 7 豆包AI登頂國(guó)內(nèi)第一!概念股梳理(名單)
- 8 押注AI王者歸來(lái),歌爾股份“智能體”在下一盤(pán)“大棋”
- 9 AI超級(jí)應(yīng)用什么時(shí)候才能出現(xiàn)?
- 10 英偉達(dá)迎來(lái)當(dāng)頭一棒
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市