数字图像处理学习(一):直方图均衡化

本文介绍了灰度直方图的概念及其在图像处理中的作用,强调了直方图均衡化对改善图像亮度和对比度的效果。通过MATLAB代码展示了直方图均衡化的实现过程,包括计算灰度累计分布、映射新灰度值等步骤,并给出了直方图均衡化前后图像的对比展示。

灰度直方图

  • 定义:遍历图像上的每一个像素点,并根据事先确定的灰度区间,统计每一个灰度区间的像素点数量,即为灰度直方图。
  • 意义:清晰的图片一般灰度直方图会均匀分布,而那些像素点聚集在某个区域的图像往往会过暗或过亮。直方图均衡化的作用就在于使直方图趋向于均衡分布。

均衡化

1. 数学计算

(1)计算直方图每个方柱的百分率
(2)设灰度等级分为N级->计算百分率乘上(N-1)->进行累加->四舍五入将累加结果映射到新的灰度等级上->得到规则g
(3)将规则g应用到图像中,将图像的灰度值映射到新的值,得到新的图像,即为均衡化图像。

2.matlab源码实现

直方图均衡化实现函数

% 高斯低通滤波器
% img 传入图像
% N_size 定义的模板大小,需为奇数值
% sigma 标准差
function H = GaussianLowpass(img, N_size, sigma)

% 定义图像长宽    
N_row = N_size;
N_col = N_size;

% 高斯滤波器模板
G_ry = zeros(N_row, N_col);

% 求图像中心点
center = (N_size + 1) / 2;
    
% 求解模板
for i=1 : N_row
    for j=1 : N_col
        distance_s = double((i-center-1)^2 + (j-center-1)^2);
        G_ry(i,j)=exp((-1) * distance_s/(2*sigma^2))/(2*pi*(sigma^2));
    end
end

% 图像滤波
H = imfilter(img,G_ry);

end

主函数

% 读入图像
p = imread("photo.jpeg");      

% 获得输入图像尺寸
[M,N,K] = size(p);    
if(K>1)
    % 将RGB 图像或颜色图转换为灰度图
    p = rgb2gray(p);  
end

% 求直方图
hist_0 = GetInhist(p,256)';  

% 求灰度分布概率
hist_1 = hist_0/(M*N);       

% 求原图灰度累计分布 
hp0 = cumsum(hist_1);   

 % 求关于原图的映射
hp1 = round(hp0*255);     
G = zeros(M, N);
               
% 求出每一个像素点的灰度值F(i,j),赋给新图像的对应像素值G(i,j)
for i=1:M
    for j=1:N
        GrayScale = p(i,j);   % 原图灰度值
        NewGrayScale = hp1(GrayScale+1);
        G(i,j) = NewGrayScale;
    end
end
% 将计算得到的新图像矩阵中所有点的灰度值由double转换为uint8,输出图像
figure,imshow(uint8(p));title('原图');
figure,imshow(uint8(G));title('直方图均衡化后的图像');

3.效果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

煜个头头

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值