MATLAB直方图均衡化代码

MATLAB直方图均衡化代码,第1张

%函数功能,画出图像的直方图,并对图像进行直方图均衡

%直接读图像abc.jpg,读到tuu中

%graydis是原始直方图各灰度级像素个数

%原始直方图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))即可。运行结果如图


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12541866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存