直方图均衡化matlab代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

原图

结果图

计算前后的直方图

相关文档
最新文档