基於matlab的直方圖均衡化代碼
2007-04-15 20:15
clear all
%一,圖像的預處理,讀入彩***像將其灰度化
PS=imread('1.jpg'); %讀入JPG彩***像文件
imshow(PS) %顯示出來
title('輸入的彩色JPG圖像')
imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %將彩***片灰度化並保存
PS=rgb2gray(PS); %灰度化後的數據存入數組
%二,繪製直方圖
[m,n]=size(PS); %測量圖像尺寸參數
GP=zeros(1,256); %預創建存放灰度出現概率的向量
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %計算每級灰度出現的概率,將其存入GP中相應位置
end
figure,bar(0:255,GP,'g') %繪製直方圖
title('原圖像直方圖')
xlabel('灰度值')
ylabel('出現概率')
%三,直方圖均衡化
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i); %計算Sk
end
end
S2=round((S1*256)+0.5); %將Sk歸到相近級的灰度
for i=1:256
GPeq(i)=sum(GP(find(S2==i))); %計算現有每個灰度級出現的概率
end
figure,bar(0:255,GPeq,'b') %顯示均衡化後的直方圖
title('均衡化後的直方圖')
xlabel('灰度值')
ylabel('出現概率')
%四,圖像均衡化
PA=PS;
for i=0:255
PA(find(PS==i))=S2(i+1); %將各個像素歸一化後的灰度值賦給這個像素
end
figure,imshow(PA) %顯示均衡化後的圖像
title('均衡化後圖像')
imwrite(PA,'PicEqual.bmp');
用imadjust函數
imadjust:調整圖像的強度值或顏色用法形式:
J = imadjust(I)
J = imadjust(I,[low_in; high_in],[low_out; high_out])
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
RGB2 = imadjust(RGB1,...)
用法說明:
J = imadjust(I)將灰度圖像I中的亮度值映射到J中的新值並使1%的數據是在低高強度和飽和,這增加了輸出圖像J的對比度值;
此用法相當於imadjust(I,stretchlim(I)).
J = imadjust(I,[low_in; high_in],[low_out; high_out]) 將圖像I中的亮度值映射到J中的新值,即將low_in至hige_in之間的值映射到low_out至high_out之間的值。low_in以下與high_in以上的值被剪切掉了,也就是說,low_in以下的值映射到low_out,high_in以上的值映射到high_out。它們都可以使用空的矩陣[],默認值是[0 1]。
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma) 將圖像I中的亮度值映射到J中的新值,其中gamma指定描述值I和值J關係的曲線形狀。如果gamma小於1,此映射偏重更高數值(明亮)輸出,如果gamma大於1,此映射偏重更低數值(灰暗)輸出,如果省略此參數,默認爲1(線性映射).
newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)調整索引***像的調色板map。如果low_in, high_in, low_out, high_out和gamma都是標量,那麼對r,g,b分量同時都做此映射。對於每個顏色分量都有唯一的映射,當low_in和high_in同時爲1*3向量或者low_out 和 high_out 同時爲1*3向量或者gamma爲1*3向量時。調整後的顏色矩陣newmap 和map有相同的大小。
RGB2 = imadjust(RGB1,...) 對RGB圖像RGB1的紅、綠、藍調色板分別進行調整。隨着顏色矩陣的調整,每一個調色板都有唯一的映射值。
注意:如果high_out < low_out, 輸出圖像是顛倒的,像攝像底片.
舉例:
調整低對比度灰度圖像:
I = imread('pout.tif');
J = imadjust(I);
imshow(I), figure, imshow(J)
調整灰度圖像,指定範圍:
K = imadjust(I,[0.3 0.7],[]);figure, imshow(K)調整RGB圖像
RGB1 = imread('football.jpg');RGB2 = imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);imshow(RGB1), figure, imshow(RGB2)