图像处理之直方图均衡化

来源:互联网 发布:mysql 防止重复update 编辑:程序博客网 时间:2024/03/28 22:03

直方图均衡化:将原图像的直方图通过变换函数修正为均匀得 直方图,使得各灰度级具有相同的出现頻数,均衡化后的图像看起来就更清晰(提高对比度)。

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;    endendprob = 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%将每个概率映射到对应的梯度,最后的映射梯度也为255gradPix = 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));    endendfigure;imshow(img);figure;imshow(newImg);