直方图均衡化:将原图像的直方图通过变换函数修正为均匀得 直方图,使得各灰度级具有相同的出现頻数,均衡化后的图像看起来就更清晰(提高对比度)。
matlab实现函数:histeq,详见:http://www.ilovematlab.cn/thread-1499-1-1.html;
具体实现步骤:
首先计算图像中各个像素值的出现的概率,然后计算累计概率,最后根据累计概率来计算最后的梯度分布,根据梯度分布来对图像的每个像素进行映射。具体实现如下:
img = imread('F:/timg.jpg');
[X,Y] = size(img);
numPix = zeros(1,256);
%计算像素的数量
for i = 1:X
for j = 1:Y
numPix(1,img(i,j)) = numPix(1,img(i,j))+1;
end
end
prob = zeros(1,256);
%计算像素的概率
for i = 1:256
prob(1,i) = numPix(1,i)/(X*Y*1.0);
end
%计算累计概率
probAddup = zeros(1,256);
probAddup(1,1) = prob(1,1);
for i = 2:256
probAddup(1,i) = probAddup(1,i-1)+prob(1,i);
end
%将每个概率映射到对应的梯度,最后的映射梯度也为255
gradPix = uint8(probAddup .* 255 + 0.5);
%像素映射
newImg = uint8(zeros(X,Y));
for i = 1:X
for j = 1:Y
newImg(i,j) = gradPix(img(i,j));
end
end
figure;
imshow(img);
figure;
imshow(newImg);