%一,图像的预处理,读入彩色图像将其灰度化
dirtest = 'H:\CMU表情库\cohn-kanade\cohn-kanade\cohn-kanade\S010\003\';
DIRS_test = dir([dirtest,'*.png']);
m = 18 %文件夹内的图片个数
for w = 1:m
if ~DIRS_test(w).isdir
string_test = [dirtest,DIRS_test(w).name];
PS=imread(string_test);
%二,绘制直方图
[m,n]=size(PS);
GP=zeros(1,256); %预创建存放灰度出现概率的向量
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置
end
%三,直方图均衡化
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
%四,图像均衡化
PA=PS;
for i=0:255
PA(find(PS==i))=S2(i+1);%将各个像素归一化后的灰度值赋给这个像素
end
save = [dirtest,'equation\',DIRS_test(w).name];
imwrite(PA,save);
end
end
【matlab】直方图均衡化
最新推荐文章于 2023-04-18 21:31:13 发布