數字影象處理——直方圖均衡
阿新 • • 發佈:2018-11-21
步驟:
1.求原影象的灰度分佈直方圖
2.根據灰度變換函式構建對映表
3.根據對映表生成均衡影象
Matlab程式碼:
clc,clear; f = imread('river.jpg'); [h,w] = size(f); % 求影象f的灰度分佈直方圖 hist1 = zeros(1,256); % hist1為灰度分佈向量,0無法作為索引,索引1對應灰度值0 for row = 1:h for col = 1:w hist1(f(row,col)+1) = hist1(f(row,col)+1) + 1; end end % 求直方圖均衡的變換函式 map_table = zeros(1,256); % map_table為對映表,map_table[i+1]代表原來的灰度值i經過變換後的灰度值 cum_sum = 0; for index = 1:256 cum_sum = cum_sum + hist1(index); map_table(index) = (255/(h*w))*cum_sum; end % 根據直方圖均衡變換函式求均衡後的影象f1 f1 = zeros(h,w); % 先初始化f1 for row = 1:h for col = 1:w f1(row,col) = map_table(double(f(row,col)+1)); % 先進行型別轉換,防止溢位 end end % 上述迴圈等效於f1 = map_table(double(f)+1); f1 = uint8(f1); f2 = histeq(f); % 呼叫histeq()函式 % 顯示原影象,均衡後的影象,呼叫庫函式均衡後的影象 figure; subplot(131),imshow(f),title('原影象'); subplot(132),imshow(f1),title('直方圖均衡後的影象'); subplot(133),imshow(f2),title('呼叫庫函式均衡後的影象'); % 顯示原影象,均衡後的影象,呼叫庫函式均衡後的影象的直方圖 figure; subplot(131),imhist(f),title('原直方圖'); subplot(132),imhist(f1),title('均衡後的直方圖'); subplot(133),imhist(f2),title('呼叫庫函式均衡後的直方圖');
測試影象:
執行結果: