直方图均衡化---图像处理

图像处理实验

直方图均衡化

程序清单:


clc;
close all;
clear 
 
src_img = imread('cameraman.tif');  

figure (1) 
%显示原始图像 
subplot(321),imshow(src_img),title('原图像'); 

%显示原始图像直方图  
subplot(322),imhist(src_img),title('原图像直方图');

%利用自己的函数做直方图均衡化
I=myHisteq(src_img);             
%显示均衡化后的图像
subplot(325),imshow(I),title('均衡化'); 
%显示均衡化图像直方图
subplot(326),imhist(I),title('均衡化直方图');

function I=myHisteq(src_img) 
% 获取图像的维数
[height,width] = size(src_img);
I=size(src_img);
% 原始图像灰度级 k=256,
% 保存图片中各个灰度级的像素的个数
pixelNum=zeros(1,256);

% 统计图片中每个灰度级像素的个数
% 妙用: 图片中每个像素点的灰度值为 (0,255)之间的整数,
%        而保存像素点个数的数组为一维数组,且为(1,256)
%        所以可以通过灰度值加一得到数组的索引号,再将对应
%        位置的计数加一,从而可以统计出每个灰度级像素的个数。
for i=1:height
    for j=1:width
        pixelNum(src_img(i,j)+1)=pixelNum(src_img(i,j)+1) +1;
    end
end

% 归一化 即计算各个灰度级的概率
% 原始直方图 (Original histogram )
Sk=zeros(1,256);
for i=1:256
    Sk(i)=pixelNum(i)/(height*width*1.0);
end

% 累计直方图 (Cumulative histogram) 
Tk=zeros(1,256);% 保存累积后的概率
for i = 1:256
    if i==1
        Tk(i)=Sk(i);
    else
        Tk(i)=Tk(i-1)+Sk(i);
    end
end
subplot(323),bar(Tk),title('累计直方图');


% 取整扩展(Integral expansion) 
% 公式: pixelCumu = int[(L-1)*pixelCumu+0.5](L为灰度级)
  Tk(i) = uint8((256-1) .* Tk(i) + 0.5);

% 对灰度值进行映射
for i=1:height
    for j=1:width
        I(i,j)=Tk(src_img(i,j));
    end
end

实验结果:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值