matlab实现批量图片的直方图均衡化

时间:2021-05-03 02:04:54

  

  matlab相关的直方图均衡化,批量处理图片,保存。做个记录。

 %直方图均衡化  
% clear;
% A=imread('F:\Matlab\data\011\011__9.bmp');%读取图像
% A=imresize(A,[164,164]);
% imwrite(A,'011__9_ci.bmp'); %保存缩放图像
% figure,imshow(A); %显示原图
% I=rgb2gray(A);
% imwrite(I,'011__9_gray.bmp'); %保存灰度图像
% [height,width] = size(I);
% figure
% subplot(221)
% imshow(I)%显示原始图像的灰度图
% title('原灰度图')
% subplot(222)
% imhist(I)%显示原始图像直方图
% title('原直方图')

srcdir=uigetdir('Choose Source Directoyr.'); %获取需要处理的文件夹路径
cd(srcdir);
allnames=struct2cell(dir('*.jpg')); %处理8位的jpg文件
[k,len]=size(allnames); %获取需要处理文件的个数
for ii=1:len
name=allnames{1,ii};
ori=imread(name); %读入文件
I=rgb2gray(ori);
[height,width] = size(I);

%直方图均衡化
%进行像素灰度统计;
s = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
for j = 1: width
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = s(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
c(1) = p(1);
for i = 2:256
c(i) = c(i - 1) + p(i);
end
%累计分布取整,将其数值归一化为1~256
c = uint8(256 .* c + 0.5);
%对图像进行均衡化
for i = 1:height
for j = 1: width
I(i,j) = c(I(i,j)+1);
end
end

% x=strcat('img_histeq',num2str(ii));
% y='jpg';
% z=strcat(x,'.',y);
% imwrite(I,z);


[file,path]=uiputfile('*.jpg','Save File'); %只能单张存储,哎
dst=strcat(path,file)
imwrite(I,dst);

end



% subplot(223)
% imshow(I)%显示均衡化后的图像
% title('均衡化的图')
% subplot(224)
% imhist(I)%显显示均衡化后的图像的直方图
% title('均衡化的直方图')