%直接读图像abc.jpg,读到tuu中
%原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro
%t[]计算和原始灰度对应的新的灰度扒春t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标
%new_graydis是统计新直方图各灰度级像素个数
%计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro
%计算直方图均衡后的新图new_tu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
all
close
all
tuu=imread('abc.jpg')
%读桐洞入图片
tu=rgb2gray(tuu)
%将彩色图片转换为灰度图
graydis=zeros(1,256)
%设置矩阵大小
graydispro=zeros(1,256)
new_graydis=zeros(1,256)
new_graydispro=zeros(1,256)
[h
w]=size(tu)
new_tu=zeros(h,w)
%计算原始直方图各灰度级像素个数graydis
for
x=1:h
for
y=1:w
graydis(1,tu(x,y))=graydis(1,tu(x,y))+1
end
end
%计算原始直方图graydispro
graydispro=graydis./sum(graydis)
subplot(1,2,1)
plot(graydispro)
title('灰度直春轮耐方图')
xlabel('灰度值')ylabel('像素的概率密度')
%计算原始累计直方图
for
i=2:256
graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1)
end
%计算和原始灰度对应的新的灰度t[],建立映射关系
for
i=1:256
t(1,i)=floor(254*graydispro(1,i)+0.5)
end
%统计新直方图各灰度级像素个数new_graydis
for
i=1:256
new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i)
end
%计算新的灰度直方图new_graydispro
new_graydispro=new_graydis./sum(new_graydis)
subplot(1,2,2)
plot(new_graydispro)
title('均衡化后的灰度直方图')
xlabel('灰度值')ylabel('像素的概率密度')
%计算直方图均衡后的新图new_tu
for
x=1:h
for
y=1:w
new_tu(x,y)=t(1,tu(x,y))
end
end
figure,imshow(tu,[])
title('原图')
figure,imshow(new_tu,[])
title('直方图均衡化后的图')
数据类型问题,histeq函数,当你的图像是double型时手巧,返回值是0或者1;当你的图像是uint8型时,返回值为0-255。
所以你编的代码里的:k=histeq(m)%对块图进行直方图均衡,m为double型,所以其k就是全1,闷薯冲那么x2中对应的位置也就是全1,蚂歼最后显示转化成uint8显示肯定为黑色。
所以把k=histeq(m)改成k=histeq(uint8(m))即可。运行结果如图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)