【圖像處理】 matlab 實現彩色圖像的直方圖均衡化算法

實驗內容

實現彩色圖像的直方圖均衡化算法

實驗過程

算法流程可以參考灰度圖像的直方圖均衡化算法 (傳送門

測試代碼

F=imread('.\im\f11.jpg');
[G] = imhisteq_C(F);
figure,imshow(F);figure,imshow(G);

實驗所需圖片

鏈接:https://pan.baidu.com/s/1LaxnZdLeY3LnKKv276E0pA
提取碼:vk8y

實驗源碼

function [J] = imhisteq_C(Im) 
[height,width,d]=size(Im);  %獲得輸入圖像尺寸M、N、C(size函數)
for index_d=1:d
I = Im(:,:,index_d);
nbins = 256;
%計算圖像F的灰度直方圖h(imhist函數;
%或者通過兩重循環遍歷每個像素點從而得到每個灰度值的累計像素點個數)。
hist_0 = imhist(I,nbins)';
%計算原圖的灰度分佈概率hs。hs=h/(M*N)        (i=0,1,,255)。
hist_1 = hist_0/(height*width);
%計算原圖灰度的累計分佈hp0(使用cumsum函數)
hp_0 = cumsum(hist_1);
%hp1=hp0*255 將hp1四捨五入,令hp1(1)=0
%hp_1 = round(hp_0*255);
hp_1 = hp_0*255;
hp_1(1)=0;

I0 = double(I);
%置兩重循環遍歷圖像F中所有像素點,求出每一個像素點的灰度值F(i,j)
for i=1:height
    for j=1:width
        Value=I0(i,j);
        NewValue = hp_1(Value+1);
        NewValue = round(NewValue);
        J(i,j,index_d)=NewValue;
    end
end
%計算得到的新圖像矩陣中所有點的灰度值由double轉換爲uint8
J = uint8(J);  %轉換uint8編碼
end

測試結果

學如逆水行舟,不進則退
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章