本文主要是介绍自适应直方图均衡化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简述
自适应直方图均衡化(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);逐行计算得到整幅图像的自适应直方图均衡化图像。
我的理解:就是在一个给定框内做直方图均衡化,而框内所有处理(包括均衡化)只为了这个将原始中心点像素a变化到新的像素点b。
算法实现
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==1src = inpit_img;
elsesrc = 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:heightfor j=1:widthslideWindow = 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
endoutput_img = uint8(output_img);endfunction [ 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:heightfor j=1:widthgrayValue = window(i,j);NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;end
end%2.计算灰度分布密度
ProbPixel = zeros(1,256);
for k=1:256ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
end%3.计算累积分布密度
CumuPixel = zeros(1,256);
CumuPixel(1,1) = ProbPixel(1,1);
for l=2:256CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数%4.计算灰度值映射
outPiexl = CumuPixel(inPiexl);end
这篇关于自适应直方图均衡化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!