基于直方圖修正的圖像增強(qiáng):是一種常見的圖像處理方法。該方法通過對(duì)圖像的像素值分布進(jìn)行調(diào)整,以改善圖像的對(duì)比度和亮度等視覺效果。具體地,直方圖校正方法將圖像的像素值轉(zhuǎn)換為一個(gè)新的值域范圍,使得像素值的分布更加均勻,從而增強(qiáng)圖像的細(xì)節(jié)和對(duì)比度。這種方法通常包括以下步驟
- 計(jì)算圖像的像素值直方圖,即將像素值分為若干個(gè)區(qū)間并統(tǒng)計(jì)每個(gè)區(qū)間內(nèi)像素的數(shù)量;
- 根據(jù)像素值直方圖計(jì)算出一個(gè)累積分布函數(shù)(CDF);
- 將像素值根據(jù) CDF 進(jìn)行映射,將原圖像的像素值映射到新的值域范圍內(nèi),以生成增強(qiáng)后的圖像
直方圖校正方法可以有效地改善圖像的視覺質(zhì)量,但也可能會(huì)導(dǎo)致一些問題,比如增強(qiáng)后的圖像可能出現(xiàn)過度增強(qiáng)或者噪聲增加等情況。因此,在實(shí)際應(yīng)用中需要根據(jù)具體情況選擇適當(dāng)?shù)闹狈綀D校正方法和參數(shù)
一:灰度直方圖
(1)定義
灰度直方圖:表示的是數(shù)字圖像中每一灰度級(jí)與其出現(xiàn)頻數(shù)(即該灰度上出現(xiàn)像素的數(shù)目)間的統(tǒng)計(jì)關(guān)系。具體來說,它將灰度級(jí)的像素值與其在圖像中出現(xiàn)的頻次(或概率)作為縱軸和橫軸上的坐標(biāo),形成一個(gè)直方圖
p ( r k ) = n k N p(r_{k})=\frac{n_{k}}{N} p(rk?)=Nnk??
例如下圖這張圖像,可以得到其灰度直方圖
(2)程序
MATLAB實(shí)現(xiàn):相關(guān)函數(shù)如下,具體解釋可看MATLAB幫助手冊(cè)
imhist(I,N)
Image=rgb2gray(imread('couple.bmp'));
histgram=zeros(256);
[h w]=size(Image);
for x=1:w
for y=1:h %循環(huán)掃描
histgram(Image(y,x)+1)=histgram(Image(y,x)+1)+1; %統(tǒng)計(jì)并累加
end
end
imwrite(Image,'Gcouple.bmp');
imshow(Image);title('couple灰度圖像');
figure;stem(histgram(),'.');
axis tight;
colormap(gray)
figure;imhist(Image);
axis tight;
colormap(gray)
Python實(shí)現(xiàn):
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 讀入圖像并轉(zhuǎn)換為灰度圖
Image = cv2.imread('couple.bmp')
Image = cv2.cvtColor(Image, cv2.COLOR_BGR2GRAY)
# 初始化直方圖
histogram = np.zeros(256)
# 統(tǒng)計(jì)每個(gè)像素值的數(shù)量
h, w = Image.shape[:2]
for x in range(w):
for y in range(h):
histogram[Image[y, x]] += 1
# 保存圖像
cv2.imwrite('Gcouple.bmp', Image)
# 顯示圖像和直方圖
plt.subplot(121)
plt.imshow(Image, cmap='gray')
plt.title('couple灰度圖像')
plt.subplot(122)
plt.stem(histogram, use_line_collection=True)
plt.axis('tight')
plt.title('灰度直方圖')
plt.show()
(3)性質(zhì)
灰度直方圖性質(zhì):
- 直方圖不具有空間特性。直方圖不能反映圖像像素空間位置信息
- 直方圖反映圖像大致描述
- 一幅圖像唯一對(duì)應(yīng)相應(yīng)的直方圖,而不同的圖像可以具有相同的直方圖
- 若一幅圖像可分為多個(gè)子區(qū),則多個(gè)子區(qū)直方圖之和等于對(duì)應(yīng)的全圖直方圖
總的來說,不同直方圖引起不同的視覺效果,同一直方圖可以對(duì)應(yīng)不同的圖像
二:直方圖修正法理論
直方圖修正法理論:圖像的灰度動(dòng)態(tài)范圍太小或者說其直方圖集中在某一個(gè)灰度區(qū)間,視覺效果不理想;當(dāng)圖像直方圖占滿所有灰度級(jí)區(qū)間,且所有灰度級(jí)的概率分布相接近,即直方圖均勻分布的圖像其視覺效果會(huì)最理想。另一方面,從隨機(jī)信號(hào)及信息量的角度來看,各個(gè)灰度級(jí)的概率分布等概率時(shí),信息量最大,熵最大。因此,需要尋找這一個(gè)變換,使得變換后圖像直方圖均勻,這就是直方圖均衡化
設(shè) 0 ≤ r ≤ 1 0\leq r \leq 1 0≤r≤1為要增強(qiáng)像素灰度級(jí), 0 ≤ s ≤ 1 0 \leq s \leq 1 0≤s≤1為增強(qiáng)后新灰度級(jí),直方圖修正公式為 s = T ( r ) s=T(r) s=T(r)(或 r = T ? 1 ( s ) r=T^{-1}(s) r=T?1(s)),式中 T ( r ) T(r) T(r)為變換函數(shù),需要滿足以下兩個(gè)條件
- T ( r ) T(r) T(r)在 0 ≤ r ≤ 1 0\leq r \leq 1 0≤r≤1區(qū)域內(nèi)單增,以保證灰度級(jí)從黑到白的次序不要出現(xiàn)反轉(zhuǎn)
- T ( r ) T(r) T(r)在 0 ≤ r ≤ 1 0\leq r \leq 1 0≤r≤1區(qū)域內(nèi)滿足 0 ≤ s ≤ 1 0\leq s \leq 1 0≤s≤1,保證變換的像素仍在允許的灰度級(jí)范圍內(nèi)
三:直方圖均衡化
直方圖均衡化:又叫做直方圖均勻化。其目的是使所有灰度級(jí)出現(xiàn)的相對(duì)頻數(shù)(概率)相同,此時(shí)圖像所包含的信息量最大。也就是使得原圖像的灰度直方圖修正為均勻分布的直方圖,實(shí)現(xiàn)圖像的全局整體均勻化
(1)直方圖均衡化變換函數(shù)T?的求解
設(shè) p r ( r ) p_{r}(r) pr?(r)和 p s ( s ) p_{s}(s) ps?(s)分別表示 r r r和 s s s的灰度概率密度函數(shù),則變換前后有
p s ( s ) d s = p r ( r ) d r ∫ 0 s p s ( s ) d s = ∫ 0 r p r ( r ) d r \begin{array}{l}p_{s}(s) d s=p_{r}(r) d r \\\int_{0}^{s} p_{s}(s) d s=\int_{0}^{r} p_{r}(r) d r\end{array} ps?(s)ds=pr?(r)dr∫0s?ps?(s)ds=∫0r?pr?(r)dr?
因?yàn)榫饣笥?span id="n5n3t3z" class="katex--inline"> p s ( s ) = 1 p_{s}(s)=1 ps?(s)=1,因此直方圖均衡化變化函數(shù)為 s = T ( r ) = ∫ 0 r p r ( ω ) d ω s=T(r)=\int_{0}^{r} p_{r}(\omega) d \omega s=T(r)=∫0r?pr?(ω)dω
(2)數(shù)字圖像的直方圖均衡化
A:概述
數(shù)字圖像的直方圖均衡化:一幅離散數(shù)字圖像,共 L L L個(gè)灰度等級(jí),其中第 k k k個(gè)灰度級(jí) r k r_{k} rk?出現(xiàn)的像素個(gè)數(shù)為 n k n_{k} nk?,圖像總像素個(gè)數(shù)為 N N N。則第 k k k個(gè)灰度級(jí)出現(xiàn)的概率為
P ( r k ) = n k N 0 ≤ r k ≤ 1 , k = 0 , 1 , … , L ? 1 P\left(r_{k}\right)=\frac{n_{k}}{N} \quad 0 \leq r_{k} \leq 1, k=0,1, \ldots, L-1 P(rk?)=Nnk??0≤rk?≤1,k=0,1,…,L?1
進(jìn)行均衡化處理的變換函數(shù) T ( r ) T(r) T(r)為
- r k = T ? 1 ( s k ) r_{k}=T^{-1}(s_{k}) rk?=T?1(sk?)
s k = T ( r k ) = ∑ j = 0 k p r ( r j ) = ∑ j = 0 k n j N s_{k}=\boldsymbol{T}\left(r_{k}\right)=\sum_{j=0}^{k} p_{r}\left(r_{j}\right)=\sum_{j=0}^{k} \frac{n_{j}}{N} sk?=T(rk?)=j=0∑k?pr?(rj?)=j=0∑k?Nnj??
數(shù)字圖像的直方圖均衡化算法步驟為
- 統(tǒng)計(jì)原始圖像直方圖
- 計(jì)算新的灰度級(jí): s k = T ( r k ) = ∑ j = 0 k p r ( r j ) = ∑ j = 0 k n j N s_{k}=\boldsymbol{T}\left(r_{k}\right)=\sum_{j=0}^{k} p_{r}\left(r_{j}\right)=\sum_{j=0}^{k} \frac{n_{j}}{N} sk?=T(rk?)=∑j=0k?pr?(rj?)=∑j=0k?Nnj??
- 修正 s k s_{k} sk?為合理灰度級(jí)
- 求新直方圖
- 用處理后的新灰度代替處理前的灰度,生成新圖像
B:示例
如下,給定一幅64×64的8級(jí)灰度圖像,其灰度級(jí)分布如表中所示,對(duì)其進(jìn)行直方圖均衡化
首先計(jì)算新灰度級(jí)
- s 0 = T ( r 0 ) = ∑ j = 0 0 p r ( r j ) = P r ( r 0 ) = 0.19 s_{0}=T\left(r_{0}\right)=\sum_{j=0}^{0} p_{r}\left(r_{j}\right)=P_{r}\left(r_{0}\right)=0.19 s0?=T(r0?)=∑j=00?pr?(rj?)=Pr?(r0?)=0.19
- s 1 = T ( r 1 ) = ∑ j = 0 1 P r ( r j ) = P r ( r 0 ) + P r ( r 1 ) = 0.19 + 0.25 = 0.44 s_{1}=T\left(r_{1}\right)=\sum_{j=0}^{1} P_{r}\left(r_{j}\right)=P_{r}\left(r_{0}\right)+P_{r}\left(r_{1}\right)=0.19+0.25=0.44 s1?=T(r1?)=∑j=01?Pr?(rj?)=Pr?(r0?)+Pr?(r1?)=0.19+0.25=0.44
- s 2 = 0.65 s_{2}=0.65 s2?=0.65
- s 3 = 0.81 s_{3}=0.81 s3?=0.81
- s 4 = 0.89 s_{4}=0.89 s4?=0.89
- s 5 = 0.95 s_{5}=0.95 s5?=0.95
- s 6 = 0.98 s_{6}=0.98 s6?=0.98
- s 7 = 1 s_{7}=1 s7?=1
接著修正 s k s_{k} sk?為合理的灰度級(jí) s k ′ s^{\prime}_{k} sk′?
- s 0 = 0.19 ≈ 1 7 s_{0}=0.19\approx \frac{1}{7} s0?=0.19≈71?
- s 1 = 0.44 ≈ 3 7 s_{1}=0.44\approx \frac{3}{7} s1?=0.44≈73?
- s 2 = 0659 ≈ 5 7 s_{2}=0659\approx \frac{5}{7} s2?=0659≈75?
- s 3 = 0.81 ≈ 6 7 s_{3}=0.81\approx \frac{6}{7} s3?=0.81≈76?
- s 4 = 0.89 ≈ 6 7 s_{4}=0.89\approx \frac{6}{7} s4?=0.89≈76?$
- s 5 = 0.95 ≈ 1 s_{5}=0.95\approx 1 s5?=0.95≈1
- s 6 = 0.98 ≈ 1 s_{6}=0.98\approx 1 s6?=0.98≈1
- s 7 = 1 s_{7}=1 s7?=1
則新圖像對(duì)應(yīng)只有5個(gè)不同的灰度級(jí)別
- s 0 ′ = 1 7 s_{0}^{\prime}=\frac{1}{7} s0′?=71?
- s 1 ′ = 3 7 s_{1}^{\prime}=\frac{3}{7} s1′?=73?
- s 2 ′ = 5 7 s_{2}^{\prime}=\frac{5}{7} s2′?=75?
- s 3 ′ = 6 7 s_{3}^{\prime}=\frac{6}{7} s3′?=76?
- s 4 ′ = 1 s_{4}^{\prime}=1 s4′?=1
然后計(jì)算新的直方圖
- P s ( s 0 ′ ) = P s ( 1 7 ) = P r ( r 0 ) = 0.19 P_{s}\left(s_{0}^{\prime}\right)=P_{s}\left(\frac{1}{7}\right)=P_{r}\left(r_{0}\right)=0.19 Ps?(s0′?)=Ps?(71?)=Pr?(r0?)=0.19
- P s ( s 1 ′ ) = P s ( 3 7 ) = P r ( r 1 ) = 0.25 P_{s}\left(s_{1}^{\prime}\right)=P_{s}\left(\frac{3}{7}\right)=P_{r}\left(r_{1}\right)=0.25 Ps?(s1′?)=Ps?(73?)=Pr?(r1?)=0.25
- P s ( s 2 ′ ) = P s ( 5 7 ) = P r ( r 2 ) = 0.21 P_{s}\left(s_{2}^{\prime}\right)=P_{s}\left(\frac{5}{7}\right)=P_{r}\left(r_{2}\right)=0.21 Ps?(s2′?)=Ps?(75?)=Pr?(r2?)=0.21
- P s ( s 3 ′ ) = P s ( 6 7 ) = P r ( r 3 ) + P r ( r 4 ) = 0.16 + 0.08 = 0.24 P_{s}\left(s_{3}^{\prime}\right)=P_{s}\left(\frac{6}{7}\right)=P_{r}\left(r_{3}\right)+P_{r}\left(r_{4}\right)=0.16+0.08=0.24 Ps?(s3′?)=Ps?(76?)=Pr?(r3?)+Pr?(r4?)=0.16+0.08=0.24
- P s ( s 4 ′ ) = P s ( 1 ) = P r ( r 5 ) + P r ( r 6 ) + P r ( r 7 ) = 0.06 + 0.03 + 0.02 = 0.11 P_{s}\left(s_{4}^{\prime}\right)=P_{s}(1)=P_{r}\left(r_{5}\right)+P_{r}\left(r_{6}\right)+P_{r}\left(r_{7}\right)=0.06+0.03+0.02=0.11 Ps?(s4′?)=Ps?(1)=Pr?(r5?)+Pr?(r6?)+Pr?(r7?)=0.06+0.03+0.02=0.11
最后生成新圖像
新舊直方圖對(duì)比
C:程序
MATLAB實(shí)現(xiàn):相關(guān)函數(shù)如下,具體解釋可看MATLAB幫助手冊(cè)
histeq(I,N)
Image=rgb2gray(imread('couple.bmp'));
histgram =imhist(Image); %統(tǒng)計(jì)圖像直方圖
[h w]=size(Image);
NewImage1=zeros(h,w);
NewImage2=zeros(h,w);
s=zeros(256);
s(1)=histgram(1);
for t=2:256
s(t)=s(t-1)+histgram(t); %計(jì)算新的灰度值
end
for x=1:w
for y=1:h
NewImage1(y,x)=s(Image(y,x)+1)/(w*h); %生成新圖像
end
end
NewImage2=histeq(Image,256);%調(diào)用Matlab函數(shù)
imshow(Image);title('couple灰度圖像');
figure;imhist(Image);title('couple灰度圖像的直方圖');
axis tight;
figure;imshow(NewImage1);title('全局直方圖均衡化處理后圖像');
figure;imhist(NewImage1);title('全局直方圖均衡化處理后圖像的直方圖');
axis tight;
figure;imshow(NewImage2);title('Matlab函數(shù)全局均衡化處理后圖像');
figure;imhist(NewImage2);title('Matlab函數(shù)全局均衡化處理后圖像的直方圖');
axis tight;
Python實(shí)現(xiàn):
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
# 讀取圖像
img = cv2.imread('couple.bmp')
# 轉(zhuǎn)換為灰度圖像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 統(tǒng)計(jì)圖像直方圖
histogram = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
# 計(jì)算新的灰度值
s = np.zeros((256,))
s[0] = histogram[0]
for t in range(1, 256):
s[t] = s[t-1] + histogram[t]
# 生成新圖像
new_img1 = np.zeros_like(gray_img)
h, w = gray_img.shape[:2]
for y in range(h):
for x in range(w):
new_img1[y, x] = s[gray_img[y, x]] / (w * h)
# 調(diào)用OpenCV自帶的全局均衡化函數(shù)
new_img2 = cv2.equalizeHist(gray_img)
# 顯示圖像和直方圖
plt.subplot(2, 2, 1)
plt.imshow(gray_img, cmap='gray')
plt.title('couple灰度圖像')
plt.subplot(2, 2, 2)
plt.hist(gray_img.ravel(), 256, [0, 256])
plt.title('couple灰度圖像的直方圖')
plt.axis('tight')
plt.subplot(2, 2, 3)
plt.imshow(new_img1, cmap='gray')
plt.title('全局直方圖均衡化處理后圖像')
plt.subplot(2, 2, 4)
plt.hist(new_img1.ravel(), 256, [0, 256])
plt.title('全局直方圖均衡化處理后圖像的直方圖')
plt.axis('tight')
plt.show()
# 顯示OpenCV自帶函數(shù)處理后的圖像和直方圖
cv2.imshow('Matlab函數(shù)全局均衡化處理后圖像', new_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.figure()
plt.hist(new_img2.ravel(), 256, [0, 256])
plt.title('Matlab函數(shù)全局均衡化處理后圖像的直方圖')
plt.axis('tight')
plt.show()
(3)局部直方圖均衡化
A:概述
局部直方圖均衡化:根據(jù)區(qū)域的局部直方圖統(tǒng)計(jì)特性來定義灰度級(jí)變換函數(shù),進(jìn)行均衡化處理,這就是局部直方圖均衡化。給出一幅數(shù)字圖像,選定大小為 w × h w×h w×h的矩形子塊 S S S,子塊 S S S內(nèi)進(jìn)行直方圖均衡化處理,有
s k = T ( r k ) = ∑ j = 0 k p S ( r j ) = ∑ j = 0 k n j w × h s_{k}=\boldsymbol{T}\left(r_{k}\right)=\sum_{j=0}^{k} p_{S}\left(r_{j}\right)=\sum_{j=0}^{k} \frac{n_{j}}{w \times h} sk?=T(rk?)=j=0∑k?pS?(rj?)=j=0∑k?w×hnj??
可以分為如下三類
-
子塊不重疊局部直方圖均衡化:
- 將圖像劃分為一系列不重疊的相鄰矩形子塊集合 { S i ∣ i = 1 , 2 , . . . , n u m } \{S_{i}|i=1,2,...,num\} {Si?∣i=1,2,...,num} ,逐個(gè)獨(dú)立地對(duì)每個(gè)子塊中所有像素進(jìn)行直方圖均衡化處理并輸出
- 由于劃分的各子塊的灰度分布統(tǒng)計(jì)差異較大,因此增強(qiáng)處理后輸出圖像有明顯的塊效應(yīng)
-
子塊重疊局部直方圖均衡化:
- 利用劃分的子塊的直方圖信息,對(duì)子塊進(jìn)行直方圖均衡化處理,然后把均衡化處理后的子塊中心像素的值作為該像素的輸出值,將子塊在圖像中逐像素移動(dòng),重復(fù)上述過程,直至遍歷圖像中所有像素
- 算法效率較低
-
子塊部分重疊局部直方圖均衡化:
- 劃分大小為 w × h w×h w×h的子塊進(jìn)行直方圖均衡化,將子塊在圖像中按照一定水平步長(zhǎng)wstep和垂直步長(zhǎng)hstep移動(dòng),重復(fù)上述過程,直至遍歷圖像中所有像素。將重疊區(qū)域的多次均衡化處理的結(jié)果取平均值作為該重疊區(qū)域中像素的輸出值
- 該算法使用頻繁
B:程序
MATLAB實(shí)現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-417897.html
Image=(rgb2gray(imread('couple.bmp')));
imshow(Image);title('原始圖像');
result1=blkproc(Image,[32 32],@histeq);
figure,imshow(result1);title('無重疊的局部直方圖均衡化圖像');
imwrite(result1,'NLHE.bmp');
[height,width]=size(Image);
result2=zeros(height,width);
n=16;%鄰域模板半徑
hh=height+2*n; ww=width+2*n;
ff=zeros(hh,ww);%圖像對(duì)外邊緣擴(kuò)充ff
ff(n+1:hh-n,n+1:ww-n)=Image;
ff(1:n,n+1:ww-n)=Image(1:n,:);
ff(hh-n+1:hh,n+1:ww-n)=Image(height-n+1:height,:);
ff(:,1:n)=ff(:,n+1:n*2);
ff(:,ww-n+1:ww)=ff(:,ww+1-n*2:ww-n);
ff=uint8(ff);
for i=n+1:hh-n
for j=n+1:ww-n
lwc=histeq(ff(i-n:i+n,j-n:j+n),256);
result2(i-n,j-n)=lwc(n+1,n+1);%實(shí)現(xiàn)對(duì)子塊中心像素點(diǎn)的均衡化處理
end
end
figure,imshow(uint8(result2));title('重疊的局部直方圖均衡化圖像');
imwrite(uint8(result2),'LHE.bmp');
sumf=int16(zeros(hh,ww));%%轉(zhuǎn)化成int16型數(shù)據(jù)
num=zeros(hh,ww);
for i=n+1:8:hh-n
for j=n+1:8:ww-n
lwc=int16(histeq(ff(i-n:i+n,j-n:j+n),256));%計(jì)算子塊的局部直方圖均衡化
sumf(i-n:i+n,j-n:j+n)=sumf(i-n:i+n,j-n:j+n)+lwc;%像素的均衡化結(jié)果進(jìn)行累加
num(i-n:i+n,j-n:j+n)=num(i-n:i+n,j-n:j+n)+1;%像素被均衡化的累加次數(shù)
end
end
result3(:,:)=double(sumf(n+1:hh-n,n+1:ww-n));
result3(:,:)=result3(:,:)./num(n+1:hh-n,n+1:ww-n);%像素的均衡化結(jié)果取平均值
rr(:,:)=uint8(result3(:,:));
figure,imshow(uint8(result3(:,:)));title('部分重疊的局部直方圖均衡化圖像');
imwrite(uint8(result3(:,:)),'POSHE.bmp');
Python實(shí)現(xiàn):文章來源地址http://www.zghlxwxcb.cn/news/detail-417897.html
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 讀入圖像
Image = cv2.imread('couple.bmp')
Image = cv2.cvtColor(Image, cv2.COLOR_BGR2GRAY)
# 顯示原始圖像
plt.imshow(Image, cmap='gray')
plt.title('原始圖像')
plt.show()
# 無重疊的局部直方圖均衡化
result1 = cv2.normalize(cv2.boxFilter(Image, -1, (32, 32)), None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
plt.imshow(result1, cmap='gray')
plt.title('無重疊的局部直方圖均衡化圖像')
plt.show()
cv2.imwrite('NLHE.bmp', result1)
# 重疊的局部直方圖均衡化
n = 16
hh, ww = Image.shape[0] + 2 * n, Image.shape[1] + 2 * n
ff = np.zeros((hh, ww), dtype=np.uint8)
ff[n:hh-n, n:ww-n] = Image
ff[0:n, n:ww-n] = Image[0:n, :]
ff[hh-n:hh, n:ww-n] = Image[Image.shape[0]-n:Image.shape[0], :]
ff[:, 0:n] = ff[:, n:2*n]
ff[:, ww-n:ww] = ff[:, ww-2*n:ww-n]
result2 = np.zeros_like(Image, dtype=np.uint8)
for i in range(n, hh-n):
for j in range(n, ww-n):
lwc = cv2.equalizeHist(ff[i-n:i+n+1, j-n:j+n+1])
result2[i-n, j-n] = lwc[n, n]
plt.imshow(result2, cmap='gray')
plt.title('重疊的局部直方圖均衡化圖像')
plt.show()
cv2.imwrite('LHE.bmp', result2)
# 部分重疊的局部直方圖均衡化
result3 = np.zeros_like(Image, dtype=np.float32)
num = np.zeros((hh, ww), dtype=np.uint8)
for i in range(n, hh-n, 8):
for j in range(n, ww-n, 8):
lwc = cv2.equalizeHist(ff[i-n:i+n+1, j-n:j+n+1]).astype(np.float32)
result3[i-n:i+n+1, j-n:j+n+1] += lwc
num[i-n:i+n+1, j-n:j+n+1] += 1
result3 /= num[n:hh-n, n:ww-n]
result3 = result3.astype(np.uint8)
plt.imshow(result3, cmap='gray')
plt.title('部分重疊的局部直方圖均衡化圖像')
plt.show()
cv2.imwrite('POSHE.bmp', result3)
到了這里,關(guān)于(數(shù)字圖像處理MATLAB+Python)第五章圖像增強(qiáng)-第二節(jié):基于直方圖修正的圖像增強(qiáng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!