pic1=imread('Fig0618(a).tif');
pic2=myHistEqualization(pic1); %封装成了函数,见下
figure;
subplot(1,2,1);imshow(pic1);title('原图');
subplot(1,2,2);imshow(pic2);title('均衡化之后');
function equalized_image = myHistEqualization(image)
%计算原始图像直方图
histogram=zeros(256,1);
[rows,cols]=size(image);
for i=1:rows
for j=1:cols
pixel_value=image(i,j);
histogram(pixel_value+1)=histogram(pixel_value+1)+1;
end
end
n=cols*rows; %有n个像素点
for i=1:256
histogram(i)=histogram(i)/n;%除以n个像素,也就是化成百分比
end
%计算累积分布函数,也就是累积,此处约等于cumsum函数
sum=zeros(1,256);%一共有256个灰度值
sum(1)=histogram(1); %因为1没有i-1
for i=2:256
sum(i)=(sum(i-1)+histogram(i)); %累加起来
end
%对equalized_image初始化
equalized_image=zeros(rows,cols); %但是我发现这步注释掉也不会报错
%此步相当于uint8函数
%累积的百分比乘以255,也就是i是原本的像素值,对应了sum(i)的值就是均衡化后的值
sum(i)=round(sum(i)*255); %要进行四舍五入
for i=1:rows
for j=1:cols
equalized_image(i,j)=sum(image(i,j)+1);
%image(i,j)是原本的像素值+1后 对应的sum()的值就是均衡化后的值
end
end
end
均衡化后效果