1. 程式人生 > >【數字影象處理】作業一 直方圖均衡化

【數字影象處理】作業一 直方圖均衡化

作業一 直方圖均衡化

吳政億 151220129 [email protected]

(南京大學 電腦科學與技術系, 南京 210093)

實現細節

單通道直方圖均衡化

function [output2] = hist_equal(input_channel)
    %you should complete this sub-function
    input_channel=im2double(input_channel);

    [M,N]=size(input_channel);
    [counts,x]=imhist(input_channel);
    location=find
(counts~=0); MinCDF=min(counts(location)); for j=1:length(location) CDF=sum(counts(location(1:j))); P=input_channel==x(location(j)); input_channel(P)=(CDF-MinCDF)/(M*N-MinCDF); % input_channel(P) = CDF/(M*N); end [output2] = input_channel; end
  1. 先將其轉化為double型別
  2. 得到畫素的大小為M*N
  3. 統計灰度值x有多少個count
  4. location得到灰度值個數不為0的x的下標
  5. 得到location中最小值為MinCDF
  6. 計算各個灰度級在直方圖均衡化後的灰度級並修改

優化: 相比老師之間給出的公式 input_channel(P) = CDF/(M*N); 進一步優化為 input_channel(P)=(CDF-MinCDF)/(M*N-MinCDF), 可以優化影象對比度不會因為最小值而過高

RGB影象直方圖均衡化

方法一 HSI影象

直接獲得r,v,b三個通道,並對他們各自進行單通道直方圖均衡化, 然後再將他們拼合成RGB影象。發現效果非常的差,會產生嚴重的失真。

方法二 HSI影象

將RGB影象轉換為HSI影象,然後單獨對I通道進行處理,效果與預計有偏差。 在瞭解中,HSI優化效果與HSV應該是差不多的,但是在實驗中產生了圖片的破碎感, 具體體現為:部分割槽域沒有優化,從而與優化後的區域產生鮮明的對比。 懷疑是hsi2rgb與rgb2hsi的實現有bug。

方法三 HSV影象

將RGB影象轉換為HSV影象,然後單獨對V通道進行處理,發現效果非常好。

    function [output4] = hist_HSV_equal(input_HSV_image)
        hv=rgb2hsv(input_HSV_image); 
        % 可以通過下面的程式看一幅圖的HSV三個通道 
        H=hv(:,:,1);
        S=hv(:,:,2);
        V=hv(:,:,3);
        V1 = hist_equal(V);
        output4 = cat(3,H,S,V1);
        output4 = hsv2rgb(output4);
    end

結果

實驗設定

matlab window10環境,工作目錄為code下。

實驗結果

課上講的直方圖均衡化

gray1

優化後的直方圖均衡化

gray2

對RGB三通道分別處理<方法一>

rgb

將RGB轉化為HSI並處理I通道<方法二>

hsi

將RGB轉化為HSV並處理V通道<方法三>

hsv