图像增强之直方图均衡化[MATLAB实现]

此处为方便理解,不使用MATLAB中自带的histeq,手写代码了解内在原理。

原始彩色图片如下:
在这里插入图片描述
均衡化后的图像如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从累计分布函数的图像可以明显看出,均衡化只需要用一次即可,第二次几乎没有作用,因为均衡化的累计分布函数已经是一条斜率为1的函数,表明其函数已经服从均匀分布~!
完整MATLAB代码如下:

clc
clear

%% 1.图片预处理
L = 256;                    % 划分的灰度级,一般也默认为256
img = imread('西西弗.jpg');  % 读图
img_gray = img(:,:,1);             %3通道彩色图片转换为1通道灰度图像

%% 2.计算每个灰度级的概率分布P(离散值)和累计分布S
N = imhist(img_gray);         % 直方图函数默认划分256个灰度级
for i = 1:size(N)
   P(i) = N(i)/sum(N);
   if i == 1
      S(1) = P(1); 
   else
      S(i) = S(i-1) + P(i);
   end
end

%% 3.将累计分布S映射回R,得到均衡化后的R
r = round((L-1).*S+0.5); 

%% 4.根据均衡化后的R,生成均衡化后的灰度图像
img_equal = img_gray;
for i = 1:size(img_equal(:))
    value = img_equal(i);
    if value == 0            % 灰度值value∈[0,255],但matlab中索引从1开始
        img_equal(i) = 1;
    else
        img_equal(i) = r(value);
    end
end

%% 5.绘图
figure('NumberTitle', 'on', 'Name', '原始彩色图片'),imshow(img)
figure('NumberTitle', 'on', 'Name', '原始灰度图片'),imshow(img_gray)
figure('NumberTitle', 'on', 'Name', '均衡化后的灰度图片'),imshow(img_equal)

figure
subplot(2,1,1);imhist(img_gray,L),title('1.原始灰度图直方图');   % 划分为L个灰度级
subplot(2,1,2);imhist(img_equal,L),title('2.均衡化后的灰度图片直方图');   % 划分为L个灰度级

figure('NumberTitle', 'on', 'Name', '累积分布函数'),plot(1:256,S)
axis([0 256 0 1]) % X象限∈[0,255],Y[0,1]

【参考文献】:
[1] 直方图均衡化计算过程.
[2] 直方图均衡(不用histeq)与直方图规定化.
[3] 直方图均衡化过程(例题).
[4] 直方图规定化计算过程.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SL_World

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

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

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

打赏作者

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

抵扣说明:

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

余额充值