之前在用LBP做单样本人脸识别的时候,对于光照角度太大或者光线太暗的情况并不是很好,出错的概率还是很大,老师推荐用直方图均衡化先对大图做一下预处理。
直方图均衡化的主要思想是对像素个数较多的灰度级进行展宽,而对于像素个数较少的灰度级进行压缩。
在处理过程中,直方图均衡化分为四个部分:
(1) 统计每个像素点的个数并计算分布密度
(2)计算直方图分布
(3)计算每个像素值均衡化之后的值,并取整
(4) 均衡化原始图片
Matlab具体实现代码如下:
function equ_image = equalization( image )
[row,column] = size(image);、
%统计像素值的分布密度
pixelNum=zeros(1,256);
for i=0:255
pixelNum(i+1)=length(find(image==i))/(row*column*1.0);
end
%计算直方图分布
pixelEqualize=zeros(1,256);
for i=1:256
if i==1
pixelEqualize(i)=pixelNum(i);
else
pixelEqualize(i)=pixelEqualize(i-1)+pixelNum(i);
end
end
%取整
pixelEqualize=round(256 .* pixelEqualize +0.5);
%均衡化
for i=1:row
for j=1:column
equ_image(i,j)=pixelEqualize(image(i,j)+1);
end
end
end
例子: