MATLAB直方图均衡化代码

求个直方图均衡化得程序

%函数功能,画出图像的直方图,并对图像进行直方图均衡
%直接读图像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('直方图均衡化后的图');
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-03
你好。
很幸运看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运~!
第2个回答  2021-03-25

Opencv13(直方图和均衡化)

第3个回答  2018-05-14

    I = imread('rice.png');  

    [height,width] = size(I);  

    figure  

    subplot(221)  

    imshow(I)%显示原始图像  

    subplot(222)  

    imhist(I)%显示原始图像直方图  

    %进行像素灰度统计;  

    NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级  

    for i = 1:height  

    for j = 1: width  

    NumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一  

    end  

    end  

    %计算灰度分布密度  

    ProbPixel = zeros(1,256);  

    for i = 1:256  

    ProbPixel(i) = NumPixel(i) / (height * width * 1.0);  

    end  

    %计算累计直方图分布  

    CumuPixel = zeros(1,256);  

    for i = 1:256  

    if i == 1  

    CumuPixel(i) = ProbPixel(i);  

    else  

    CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);  

    end  

    end  

    %累计分布取整  

    CumuPixel = uint8(255 .* CumuPixel + 0.5);  

    %对灰度值进行映射(均衡化)  

    for i = 1:height  

    for j = 1: width  

    I(i,j) = CumuPixel(I(i,j));  

    end  

    end  

    subplot(223)  

    imshow(I)%显示原始图像  

    subplot(224)  

    imhist(I)%显示原始图像直方图