Matlab 不使用内置函数histeq、imteq的灰度图的直方图均衡化实现代码


pic1=imread('Fig0618(a).tif');
pic2=myHistEqualization(pic1); %封装成了函数,见下
figure;
subplot(1,2,1);imshow(pic1);title('原图');
subplot(1,2,2);imshow(pic2);title('均衡化之后');
 

function equalized_image = myHistEqualization(image)
  %计算原始图像直方图
  histogram=zeros(256,1);
  [rows,cols]=size(image);
  for  i=1:rows
      for  j=1:cols
          pixel_value=image(i,j);
          histogram(pixel_value+1)=histogram(pixel_value+1)+1;
      end
  end
  
   n=cols*rows;  %有n个像素点
  for i=1:256
       histogram(i)=histogram(i)/n;%除以n个像素,也就是化成百分比
  end
  
  %计算累积分布函数,也就是累积,此处约等于cumsum函数
  sum=zeros(1,256);%一共有256个灰度值
  sum(1)=histogram(1); %因为1没有i-1
  for i=2:256
      sum(i)=(sum(i-1)+histogram(i));   %累加起来
  end
  
    %对equalized_image初始化
   equalized_image=zeros(rows,cols); %但是我发现这步注释掉也不会报错
  
  %此步相当于uint8函数
  %累积的百分比乘以255,也就是i是原本的像素值,对应了sum(i)的值就是均衡化后的值
    sum(i)=round(sum(i)*255); %要进行四舍五入
  
   for i=1:rows
       for j=1:cols
           equalized_image(i,j)=sum(image(i,j)+1);
           %image(i,j)是原本的像素值+1后 对应的sum()的值就是均衡化后的值
       end
   end
 
end

均衡化后效果

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值