在MATLAB中没有histeq函数的归一化图像的直方图均衡

时间:2017-11-15 07:14:24

标签: matlab histogram normalization

我正在尝试为MATLAB中没有内置函数的标准化图像制作直方图均衡代码,如'histeq'

我将灰度图像标准化,其值介于[0,1]

之间
    input_img = mat2gray(img);

我找到了一个没有histeq函数的示例代码

    for i=1:size(GIm,1)
        for j=1:size(GIm,2)
            value=GIm(i,j);
            freq(value+1)=freq(value+1)+1;
            probf(value+1)=freq(value+1)/numofpixels;
        end
    end

    sum=0;
    no_bins=255;

    %The cumulative distribution probability is calculated. 

    for i=1:size(probf)
       sum=sum+freq(i);
       cum(i)=sum;
       probc(i)=cum(i)/numofpixels;
       output(i)=round(probc(i)*no_bins);
    end

    for i=1:size(GIm,1)
        for j=1:size(GIm,2)
                HIm(i,j)=output(GIm(i,j)+1);
        end
    end

    figure,imshow(HIm);
    title('Histogram equalization');

但此代码适用于灰度为[0,255]

的图像

我应该如何将此代码应用于我的灰度标准化图像?

我的图片尺寸为450x450

1 个答案:

答案 0 :(得分:0)

使用您的代码计算256-bin直方图,方法是缩放图像以适应它:

input_img_255 = round(input_img * 255);

然后将input_img_255与您拥有的代码一起使用。 round应该足够好,可以使用舍入的double值作为代码中的索引。如果您想更精确,可以使用:

input_img_255 = uint8(round(input_img * 255));

以便值为整数。