当前位置:   article > 正文

直方图均衡化、自适应直方图均衡化_直方图均衡化与自适应直方图均衡化

直方图均衡化与自适应直方图均衡化

一、直方图均衡化

  • 简述

直方图均衡化的英文名称是:Histogram Equalization. 
  图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
  直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
  缺点: 
  1)变换后图像的灰度级减少,某些细节消失; 
  2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。

  • 数学原理

假定变换函数为:


上述推导可知ps(s)(输出灰度级的概率密度函数)是均匀为1的,换句话说就是由变换函数得到的图像的灰度级是等概率的。而且,注意到这变换函数是一个累积分布函数(CDF)。

均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数都满足,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题)。

那么在计算灰度级为离散图像时,我们用每个灰度值在整幅图像中出现的频率作为该灰度值的概率,因此离散形式的均衡化变换成为以下形式:

  • 算法实现

<span style="font-family:SimSun;">function [output_img] = my_HistEqual( input_img )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
%   图像直方图均衡化处理函数

[height,width,channels]=size(input_img);

if channels==1
    src = inpit_img;
else
    src = rgb2gray(input_img);
end
%1.像素灰度统计
NumPixel = zeros(1,256);
for i=1:height
    for j=1:width
        grayValue = src(i,j);
        NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;
    end
end

%2.计算灰度分布密度
ProbPixel = zeros(1,256);  
for k=1:256
    ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
end

%3.计算累积分布密度
CumuPixel = zeros(1,256);  
CumuPixel(1,1) = ProbPixel(1,1);
for l=2:256
    CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);    
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数

%4.计算灰度值映射
output_img = zeros(height,width);
for m=1:height
    for n=1:width
        output_img(m,n) = CumuPixel(src(m,n));
    end
end

output_img = uint8(output_img);
end
</span>

二、自适应直方图均衡化

  • 简述

 自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节

  • 算法思想
移动模板W在图像A上逐行移动,并且模板W的中心c(x0,y0)对应图像上的点f(x0,y0);计算模板W区域的直方图均衡化变化关系:g(x,y)= T(f(x,y),计算模板中心点c(x0,y0)的均衡化对应像素值:g(x0,y0) = T(f(x0,y0))。用g(x0,y0)替代f(x0,y0);逐行计算得到整幅图像的自适应直方图均衡化图像。
  • 算法实现
function [ output_img ] = my_AHE( input_img, w)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
%   自适应直方图均衡化
%   输入:input_img:待处理图像
%        w: 局部处理的窗口大小

[height,width,channels]=size(input_img);

if channels==1
    src = inpit_img;
else
    src = rgb2gray(input_img);
end

%1.图像边界扩展
padsize=[(w-1)/2,(w-1)/2];
padSrc = padarray(src,padsize,'symmetric','both');

%2.循环求解每个区域对应的值
output_img = zeros(height,width);
iter = 0;
for i=1:height
    for j=1:width
        slideWindow = zeros(w,w);
        slideWindow = padSrc(i:i+w-1,j:j+w-1);
        AHE_piexl = my_AHE_piexl(slideWindow,src(i,j));
        output_img(i,j) = AHE_piexl;
        iter = iter+1;
        disp(iter);
    end
end

output_img = uint8(output_img);


end

function [ outPiexl ] = my_AHE_piexl( window,inPiexl )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
%   计算局部图像的直方图均衡化的像素对应值
%   输入:window: 局部图像
%        inPiexl:输入像素
%        outPiexl:输出像素

[height,width]=size(window);

%1.像素灰度统计
NumPixel = zeros(1,256);
for i=1:height
    for j=1:width
        grayValue = window(i,j);
        NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;
    end
end

%2.计算灰度分布密度
ProbPixel = zeros(1,256);  
for k=1:256
    ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
end

%3.计算累积分布密度
CumuPixel = zeros(1,256);  
CumuPixel(1,1) = ProbPixel(1,1);
for l=2:256
    CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);    
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数

%4.计算灰度值映射
outPiexl = CumuPixel(inPiexl);

end



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/78892
推荐阅读
相关标签
  

闽ICP备14008679号