該技術就是在直方圖的灰度密度和灰度間距 2 個方向同時進行均衡化處理。
直方圖灰度密度均衡就是普通的直方圖均衡處理
利用直方圖密度均衡處理大大地改善了原始圖像的對比度 ,但並非是非常理想的圖像效果 ,其原因就是密度均勻處理使圖像對比度往往偏高 ,同時灰度的丟失和不連續使圖像產生色斑 ,爲此在直方圖密度均衡的基礎上再進行灰度間距的均衡處理.首先對密度均衡處理後灰度級數目 Le 進行統計。對 Le 的統計實際上是對灰度範圍內不爲零的灰度級進行累加計算 ,從而獲得有效的實際度級數. 然後對這些有效灰度級進行重新排序 ,在整個灰度範圍內作等間距排列 。
a=imread('1.jpg'); %讀取原始圖像
g=rgb2gray(a);
[row,col]=size(g); %獲取圖像高度row,寬度col
%g=imnoise(g,'gaussian',0,0.005); %添加高斯噪聲
g=g+1; %修改像素範圍
I=g(:,:,1) ; %初始化原始圖像矩陣
J=g(:,:,1); %初始化直方圖均衡結果矩陣
JJ=g(:,:,1); %初始化雙向直方圖均衡結果矩陣
L=256; %灰度級
Ps=zeros(L,1); %出現頻率%統計直方圖結果數據
nK=zeros(L,1); %初始化原始圖像灰度統計數組
nK2=zeros(L,1); %初始化直方圖均衡圖像灰度統計數組
nK3=zeros(L,1); %初始化雙向直方圖均衡圖像灰度統計數組
[row,col]=size(I);
%直方圖均衡化
n=row*col; %總像素個數
for i =1:row
for j =1:col
num=I(i,j)+1; %獲取像素點灰度級
nK(num)=nK(num)+1 ; %統計nK
end
end
for i =1:L
Ps(i)=nK(i)/n; %統計直方圖概率估計
end
S(1)=Ps(1)*L;
for i=2:L
S(i)=S(i-1)+Ps(i)*L; %建立直方圖均衡化查表S
end
for i=1:row
for j= 1:col
J(i,j)=S(g(i,j)); %得到均衡化像素值
end
end
num=0;
for i=1:row
for j=1:col
num=J(i,j)+1; %獲取像素點灰度級
nK2(num)=nK2(num)+1; %統計nK
end
end
%雙向均衡化
count=0;
intv=zeros(L,1);
for i=1:L
if(nK2(i)>0)
count=count+1;
intv(i)=count; %獲取像素有效值在其中的位置
end
end
lut=zeros(L,1);
for i=1:L
lut(i)=256/count*intv(i); %建立查找表
end
for i=1:row
for j=1:col
JJ(i,j)=lut(J(i,j)+1); %得到雙向直方圖均衡化像素值
end
end
num=0;
for i=1:row
for j=1:col
num=JJ(i,j)+1; %獲取像素點灰度級
nK3(num)=nK3(num)+1; %統計nK
end
end
%繪製輸出結果
subplot(3,2,1);imshow(I),title('(a)原圖');
subplot(3,2,2);bar(nK),title('(b)原圖直方圖');
subplot(3,2,3);imshow(J),title('(c)均衡化');
subplot(3,2,4);bar(nK2),title('(d)均衡化直方圖');
subplot(3,2,5);imshow(JJ),title('(e)雙向均衡化');
subplot(3,2,6);bar(nK3),title('(f)雙向均衡化直方圖');
figure;imshow(JJ),title('(e)雙向均衡化');