直方图均衡化(matlab实现)

对图像(灰度图)进行直方图均衡化主要有一下几个步骤:

1、计算各个灰度值(0-255)出现的次数

2、计算各个灰度值的累积分布率

2、根据累积分布率计算出原来各灰度值的均衡化之后的新的值

%This file is to implement histogram equlization
originalImage = imread('tire.tif');%这个TIFF图像是四维的(M*N*4),需要转换成灰度图

%先取出TIFF图像的前三维数据(丢弃第四维)并将其合成RGB图像
R = originalImage(:,:,1);
G = originalImage(:,:,2);
B = originalImage(:,:,3);

rgbImage = cat(3,R,G,B);
grayImage = rgb2gray(rgbImage);
%显示图像
figure,imshow(grayImage);
title('Original Image');
%计算图像的像素个数
numOfPixels = size(grayImage,1) * size(grayImage,2);

frequency = zeros(256,1);%用于统计各个灰度出现的次数
probability = zeros(256,1);%计算出现的可能性

for i=1:size(grayImage,1)
    for j=1:size(grayImage,2)
       value = grayImage(i,j);
       frequency(value+1) = frequency(value+1) + 1;
       probability(value+1) = frequency(value+1) / numOfPixels;
    end
end

cum = zeros(256,1);%记录各个像素值的累积分布
probc = zeros(256,1);%记录各个像素值的累积分布的可能性
output = zeros(256,1);%与那图像中各个灰度值的均衡化之后的值
sum = 0;
numOfBins = 255;

for i=1:size(probability)
    sum = sum + frequency(i);
    cum(i) = sum;
    probc(i) = cum(i) / numOfPixels;
    output(i) = round(probc(i) * numOfBins);
end

HEImage = uint8(zeros(size(grayImage,1),size(grayImage,2)));%均衡化后的图像
for i=1:size(grayImage,1)
    for j=1:size(grayImage,2)
        HEImage(i,j) = output(grayImage(i,j)+1);
    end
end

figure,imshow(HEImage);
title('Histogram Equalization');

结果:

直方图均衡化(matlab实现)_第1张图片




你可能感兴趣的:(image,File,matlab,output,tiff)