Matlab底层算法实现直方图均衡

理论原理

     直方图均衡常用于图像预处理过程中,对灰度的矫正十分有效。

公式

     灰度的线性变换就是将图像中所有点的灰度按照线性灰度变换函数进行变换。灰度变换方程为:
                                                                P r ( r i ) = N u m ( r i ) C o u n t N u m P_{r}(r_{i})=\frac{Num(r_{i})}{CountNum} Pr(ri)=CountNumNum(ri),
                                                                     ∑ i = 0 k − 1 P r ( r i ) = 1 \sum_{i=0}^{k-1}P_{r}(r_{i})=1 i=0k1Pr(ri)=1
式中 k k k为一帧图像对应的灰度级数。
     直方图均衡化就是利用累积分布函数作为灰度变换函数。 T ( r ) T(r) T(r)与原图像概率密度分布函数 P r ( r ) Pr(r) Pr(r)之间的关系为:
                                                                s = T ( r ) = ( k − 1 ) ∫ 0 r 1 P r ( r ) d r s=T(r)=(k-1)\int_{0}^{r_{1}}P_{r}(r)dr s=T(r)=(k1)0r1Pr(r)dr

源代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%图像灰度直方图均衡化
%Author:Zhu
%时间:2022.3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
image = imread("F:\\fabrik.png");

image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
image_out=zeros(height,width);

%灰度映射表,灰度从0255之间
gray_map = zeros(1,256);

%灰度直方图丧失了灰度的像素值位置信息,只有灰度分布信息
 for i=1:height
      for j=1:width
           T = image_matrix(i,j)+1;
           %灰度统计计数
           gray_map(T)=gray_map(T)+1;
      end
 end

%计算灰度分布密度,即归一化,灰度分布概率
gray_layout = zeros(1,256);
for i=1:256
    gray_layout(i)=gray_map(i)/(height*width);
end

%进行均衡化处理
tmp = zeros(1,256);
balance_gray = zeros(1,256);
for i=1:256
    if(i==1)
       tmp(1) = gray_layout(1);
    else
       %先累加
       tmp(i) = tmp(i-1)+gray_layout(i);
    end
    balance_gray(i)=ceil(255*tmp(i)+0.1);
end

 for i=1:height
      for j=1:width
           T = image_matrix(i,j)+1;
           image_out(i,j)=balance_gray(T);
      end
 end
 
image_out = uint8(image_out);
%显示 
subplot(1,2,1);
imshow(image);
title("原图");
subplot(1,2,2);
imshow(image_out);
title("直方图均衡");

效果图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手写不期而遇

感谢你的打赏,也欢迎一起学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值