matlab直方圖均衡化
阿新 • • 發佈:2018-12-03
% 彩色影象直方圖均衡化函式 % ---------------------- % 實現步驟如下: % % 讀入影象 % 對每個通道分別統計畫素值[0,255]出現的次數。 % 對每個通道分別求畫素值[0,255]出現的概率,得到概率直方圖。 % 對每個通道分別求畫素值[0,255]概率的字首和,得到累計直方圖。 % 對每個通道根據累計直方圖分別求畫素對映函式。 % 對每個通道完成每個畫素點的對映。 % 輸出直方圖均衡化的影象。 % --------------------- function [ RGB ] = histEquSelf(image) %UNTITLED9 此處顯示有關此函式的摘要 % 此處顯示詳細說明 RGB = image; subplot(221),imshow(RGB),title('原圖'); subplot(222), imhist(RGB,64) ,title('原圖直方圖'); [R, C, K] = size(RGB); % 新增的K表示顏色通道數 % 統計每個畫素值出現次數 cnt = zeros(K, 256); for i = 1 : R for j = 1 : C for k = 1 : K cnt(k, RGB(i, j, k) + 1) = cnt(k, RGB(i, j, k) + 1) + 1; end end end f = zeros(3, 256); f = double(f); cnt = double(cnt); % 統計每個畫素值出現的概率, 得到概率直方圖 for k = 1 : K for i = 1 : 256 f(k, i) = cnt(k, i) / (R * C); end end % 求累計概率,得到累計直方圖 for k = 1 : K for i = 2 : 256 f(k, i) = f(k, i - 1) + f(k, i); end end % 用f陣列實現畫素值[0, 255]的對映。 for k = 1 : K for i = 1 : 256 f(k, i) = f(k, i) * 255; end end % 完成每個畫素點的對映 RGB = double(RGB); for i = 1 : R for j = 1 : C for k = 1 : K RGB(i, j, k) = f(k, RGB(i, j, k) + 1); end end end % 輸出 RGB = uint8(RGB); subplot(223); imshow(RGB); title('直方圖均衡化'); subplot(224), imhist(RGB,64) ,title('均衡化後直方圖'); end
測試結果圖:
測試程式碼:
A = imread('lena.jpg');
histEquSelf(A);