直方图统计及均衡化matlab代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自己编的代码
Matlab中自带的函数
clc;clear all;
%用自己编的函数
pic1=imread('188_2.jpg');%修改数字可以看到另一幅图片的效果pic1=rgb2gray(pic1);
subplot(221);imshow(pic1);title('均衡化前的图像'); subplot(222);imhist(pic1);title('均衡化前的直方图');
L=256;%设置灰度级为256
[width,height]=size(pic1);
%求nk
nk=zeros(1,L);
for i=0:L-1
num=find(pic1==(i+1));
nk(i+1)=length(num);
end
%求pr(rk)=nk/MN
pr=zeros(1,L);
for i=1:L
pr(i)=nk(i)/(width*height);
end
%pc存储的就是累计的归一化直方图
pc=zeros(1,L);
for i=1:L
for j=1:i
pc(i)=pc(i)+pr(j);
end
end
sk=zeros(1,L);
for i=1:L
sk(i)=round((L-1)*pc(i));
end
%求pr(sk),即计算现有每个灰度级出现的概率并显示在屏幕上for i=0:L-1
pr(i+1)=sum(pc(find(sk==i)));
end
pr %显示pr值
%替换原有图片
pic2=pic1;
for i=1:L
pic2(find(pic2==(i-1)))=sk(i);
end
subplot(223);imshow(pic2);title('均衡化后的图像'); subplot(224);imhist(pic2);title('均衡化后的直方图');
%用matlab自带的函数
pic1=imread('188_2.jpg');%先把要处理的图像读入
pic1=rgb2gray(pic1);%转化成灰度图像
%显示灰度图像与直方图
figure;
subplot(221);imshow(pic1);title('均衡化前的图像'); subplot(222);imhist(pic1);title('均衡化前的直方图');
%直方图均衡化
pic2=histeq(pic1);
subplot(223);imshow(pic2);title('均衡化后的图像'); subplot(224);imhist(pic2);title('均衡化后的直方图');