直方圖雙向均衡技術

該技術就是在直方圖的灰度密度和灰度間距 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)雙向均衡化');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章