Matlab实现数字图像处理——直方图均衡
主程序:
f = imread('outman.jpg');
image = rgb2gray(f);
figure();
imshow(image),title('原图');
equalization = HistogramEqualization(image, 256);
figure();
imshow(equalization),title('均衡后');
函数:
function [outImage] = HistogramEqualization(image,NPTS)
[height, width] = size(image);
NumPixel = zeros(1,NPTS);
for i = 1 : height
for j = 1 : width
k = image(i,j);
NumPixel(k+1) = NumPixel(k+1) + 1;
end
end
figure;
bar(NumPixel),title('原图直方图');
ProbPixel = zeros(1,NPTS);
for i = 1 : NPTS
ProbPixel(i) = NumPixel(i) / (height * width);
end
figure;
bar(ProbPixel),title('归一化直方图');
CumPixel = cumsum(ProbPixel);
CumPixel = uint8((256-1) .* CumPixel + 0.5);
figure;
bar(CumPixel),('概率分布函数');
outImage = uint8(zeros(height, width));
for i = 1 : height
for j = 1 : width
outImage(i,j) = CumPixel(image(i,j)+1);
end
end
for i = 1 : height
for j = 1 : width
k = outImage(i,j);
NumPixel(k+1) = NumPixel(k+1) + 1;
end
end
figure;
bar(NumPixel),title('均衡后直方图');