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));
因此值是整数。
我正在尝试为标准化图像制作直方图均衡代码,而没有像 '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));
因此值是整数。