数字图像处理——直方图均衡

步骤:

1.求原图像的灰度分布直方图

2.根据灰度变换函数构建映射表

3.根据映射表生成均衡图像

Matlab代码:

clc,clear;
f = imread('river.jpg');
[h,w] = size(f);

% 求图像f的灰度分布直方图
hist1 = zeros(1,256);   % hist1为灰度分布向量,0无法作为索引,索引1对应灰度值0
for row = 1:h
    for col = 1:w
        hist1(f(row,col)+1) = hist1(f(row,col)+1) + 1; 
    end
end
% 求直方图均衡的变换函数
map_table = zeros(1,256);   % map_table为映射表,map_table[i+1]代表原来的灰度值i经过变换后的灰度值
cum_sum = 0;
for index = 1:256
    cum_sum = cum_sum + hist1(index);
    map_table(index) = (255/(h*w))*cum_sum;
end
% 根据直方图均衡变换函数求均衡后的图像f1
f1 = zeros(h,w);  % 先初始化f1
for row = 1:h
    for col = 1:w
        f1(row,col) = map_table(double(f(row,col)+1));  % 先进行类型转换,防止溢出
    end
end
% 上述循环等效于f1 = map_table(double(f)+1);
f1 = uint8(f1);
f2 = histeq(f); % 调用histeq()函数

% 显示原图像,均衡后的图像,调用库函数均衡后的图像
figure;
subplot(131),imshow(f),title('原图像');
subplot(132),imshow(f1),title('直方图均衡后的图像');
subplot(133),imshow(f2),title('调用库函数均衡后的图像');

% 显示原图像,均衡后的图像,调用库函数均衡后的图像的直方图
figure;
subplot(131),imhist(f),title('原直方图');
subplot(132),imhist(f1),title('均衡后的直方图');
subplot(133),imhist(f2),title('调用库函数均衡后的直方图');

测试图像:

运行结果:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值