【图像处理】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)。
  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);

实验所需图片

链接:https://pan.baidu.com/s/1LaxnZdLeY3LnKKv276E0pA
提取码:vk8y

实验源码

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编码

测试结果

学如逆水行舟,不进则退
一百个Chocolate CSDN认证博客专家 CSDN博客专家 Vue爱好者 博客之星
不是只会写业务代码的前端开发攻城狮!博客网站:yangchaoyi.vip做限量版的自己,就这样安静地努力。一个还在苦学前端的小小Chocolate,我的博客主要分享前端、算法、大学课程笔记、平常遇到的bug、心得感悟体会,感谢您的访问,若喜欢可以关注一下~每一个清晨,记得鼓励自己。没有奇迹,只有你努力的轨迹;没有运气,只有你坚持的勇气!每一份坚持都是成功的累积,只要相信自己,总会遇到惊喜!座右铭:学如逆水行舟,不进则退!
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值