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

Histogram equalization for normalized image without histeq function in MATLAB

我正在尝试为标准化图像制作直方图均衡代码,而没有像 'histeq'

这样的 MATLAB 内置函数

我已经标准化灰度图像,其值介于 [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

使用您必须通过缩放图像以适合它来计算 256-bin 直方图的代码:

input_img_255 = round(input_img * 255);

然后将 input_img_255 与您拥有的代码一起使用。 round 应该足以在您的代码中使用四舍五入的双精度值作为索引。如果你想更准确,你可以使用:

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

因此值是整数。