直方图均衡化matlab代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图片采用了维基百科直方图均衡化中的图片保存为文件名test0.jpg
直方图均衡化的原理参考《数字图像处理第三版(冈萨雷斯)》第75页公式3.3-8(主要就是一个公式)
代码如下:
imgdat0=imread('test0.jpg');%读图
[r,c]=size(imgdat0);%图像尺寸
PixelNum=r*c;%图像尺寸
distribute=zeros(1,256);%原始直方图统计
for i=1:PixelNum
pos=imgdat0(i)+1;%加1是因为matlab索引从1开始而不是从0开始
distribute(pos)=distribute(pos)+1;%pos为像素值,范围0-255/1-256
end
distribute=distribute/PixelNum;%原始直方图统计
convertarray=zeros(1,256);%像素转换对应
tempadd=0;%累加计算使用
for i=1:255%计算像素转换对应公式
tempadd=tempadd+distribute(i);
convertarray(i)=uint8(255*tempadd);
end
rimgdat0=uint8(zeros(r,c));%计算结果图像
for i=1:PixelNum
rimgdat0(i)=convertarray(imgdat0(i));%像素值转换
end
%显示
figure
imshow(imgdat0)
figure
imshow(rimgdat0)
figure
bar(distribute)
rdistribute=zeros(1,256);%计算结果直方图统计
for i=1:PixelNum
pos=rimgdat0(i)+1;
rdistribute(pos)=rdistribute(pos)+1;
end
figure
bar(rdistribute)
原图
结果图
计算前后的直方图