【图像处理】matlab实现灰度图像的直⽅图均衡化算法
实验内容
实现灰度图像的直⽅图均衡化算法
实验过程
1. 读⼊⼀幅灰度图像,存放在图像矩阵F中。(imread函数)。
2. 获得输⼊图像尺⼨M、N、C(size函数)。并将图像矩阵F中的数据由uint8类型转换为double类型以便后续处理。如果颜⾊通道数
C>1,则将彩⾊图像转化为灰度图rgb2gray
3. 计算图像F的灰度直⽅图h(imhist函数;或者通过两重循环遍历每个像素点从⽽得到每个灰度值的累计像素点个数)。
4. 计算计算原图的灰度分布概率hs。hs=h/(M*N) (i=0,1,…,255)。
matlab直方图5. 计算原图灰度的累计分布hp0(使⽤cumsum函数)。
6. hp1=hp0*255。
7. 将hp1四舍五⼊,令hp1(1)=0。
8. 根据步骤(6)得到的新旧图像灰度值的映射结果,设置两重循环遍历图像F中所有像素点,求出每⼀个像素点的灰度值F(i,j),计算
F(i,j)对应数组hp1中的位置x,得到hp1(x)并赋给新图像的对应像素值G(i,j)
9. 将计算得到的新图像矩阵中所有点的灰度值由double转换为uint8。输出最终得到的结果图像。
测试代码
F =imread('.\im\pict1.png');
[G]=imhisteq(F);
figure,imshow(G);
实验所需图⽚
实验源码
function [J]=imhisteq(I)
[height,width,d]=size(I);%获得输⼊图像尺⼨M、N、C(size函数)
if(d>1)
I=rgb2gray(I);%如果颜⾊通道数C>1,则将彩⾊图像转化为灰度图rgb2gray
end
nbins =256;
%计算图像F的灰度直⽅图h(imhist函数;
%或者通过两重循环遍历每个像素点从⽽得到每个灰度值的累计像素点个数)。
hist_0 =imhist(I,nbins)';
%计算原图的灰度分布概率hs。hs=h/(M*N)(i=0,1,…,255)。
hist_1 = hist_0/(height*width);
%计算原图灰度的累计分布hp0(使⽤cumsum函数)
hp_0 =cumsum(hist_1);
%hp1=hp0*255将hp1四舍五⼊,令hp1(1)=0
hp_1 =round(hp_0*255);
hp_1(1)=0;
I0 =double(I);
%置两重循环遍历图像F中所有像素点,求出每⼀个像素点的灰度值F(i,j)
for i=1:height
for j=1:width
GrayScale=I0(i,j);
NewGrayScale =hp_1(GrayScale+1);
J(i,j)=NewGrayScale;
end
end
%计算得到的新图像矩阵中所有点的灰度值由double转换为uint8
J =uint8(J);%转换uint8编码
测试结果
学如逆⽔⾏⾈,不进则退
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论