图像处理 直方图均衡化

直方图均衡化的作用和优势:

作用:这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
优点:直观可视化的技术,且可逆,计算量小
缺点:对处理的数据不加选择,可能增加背景噪声的对比度,也可能降低有用信息的对比度

举个栗子:

对下面的灰度图像进行直方图均衡化处理

该灰度图像的灰度值出现次数如下表所示,为了简化表格,出现次数为0的值已经被省略

累积分布函数(cdf)如下所示,与上一表格类似,为了简化,累积分布函数值为0的灰度值已经被省略
累积分布函数为:


如表格所示,灰度值最小值为52,最大值为154. 通常,直方图均衡化算式如下:

累积分布函数最小值cdfmin在本例中为1, M和N分别代表了图像的长宽像素个数(本例中为8×8=64),而L则是灰度级数(如本例中,图像为8位深度,则灰度级数共有2^8=256级数,这也是最常见的灰度级数).则对于本例的直方图均衡化算式为:

例如,灰度为78的像素的累积分布函数为46,均衡化后,灰度值变化为:

直方图均衡化后,图像的灰度值变化如下表所示:

注意:原最小灰度值52变为了0,而最大灰度值154变为了255

原始的图像如下所示:

变化后的图像如下所示:

整个程序的流程就是:

1.统计每个灰度值的个数
2.找出累积分布函数
3.得到累积分布函数最小值cdfmin
4.根据直方图均衡化算式计算均衡化的灰度值
5.得到均衡化后的图像 

下面给出代码:

clc
clear all;
picture=imread('路径'); %读取图像
figure
imshow(picture)
title('原来的图象'); %显示原始图象

after = hist_1(picture);
figure
imshow(after)
title('变化后图象'); %显示原始图象

%%
%函数部分
function hist_img = hist_1(I)
    [M, N] = size(I);
    size_img = M*N;
    c = zeros(1,256);%统计每个每个像素值的个数
    b= c;%转化前后的对照表
  
    temp = I(:);
    temp = sort(temp);
    
    for i = 1:size_img
        c(temp(i)+1) = c(temp(i)+1)+1;      
    end
    a = c;%求和
    for i = 2:256
       a(i) = c(i) + a(i-1);
    end
    
    min_cdf = 10000;
    for i = 1:256
       if a(i)>0
           if a(i) < min_cdf
                min_cdf = a(i);
           end
       end
    end
    
    for j = 1:256
        if a(j) > 0
             b(j) = round(255*(a(j)-min_cdf)/(size_img-min_cdf));
        end
    end
    
    for i = 1:M
        for j = 1:N
            I(i,j) = b(I(i,j)+1);
        end       
    end
    
    hist_img = I;
%     figure;
%     plot(b)
%     title('变化前后映射')
 
end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值