归一化积分图像

时间:2016-11-27 15:28:56

标签: matlab image-processing

我使用ii = cumsum(cumsum(image, 2), 1)计算了给定图像的积分图像;在我的课程中,问题要求我绘制标准化的积分图像,这真的让我很困惑,因为大多数值都会大于255,我会得到一个明亮的图像。那么如何绘制规范化的积分图像?

1 个答案:

答案 0 :(得分:0)

只需简单地将图像标准化即可。看起来您正在使用MATLAB,因此只需创建一个新的图像,将0到255之间的值标准化:

ii_norm = 255*(ii - min(ii(:))) / (max(ii(:)) - min(ii(:)));

操作首先假定您在[0,1]范围内进行规范化,然后在之后缩放到[0,255]。由于您希望将其显示为图像,请不要忘记将其转换为uint8

ii_norm = uint8(ii_norm);

但是,您可以使用imagesc自动缩放值,以便它们始终符合上述范围。但是,imagesc将使用颜色贴图显示图像,该颜色贴图使用独特颜色着色强度。我怀疑您可能希望自己显示实际强度值,因此您必须致电colormap并将其设置为gray才能执行此操作。此外,您可以使用imshow将第二个参数设为空,以帮助您进行此缩放:imshow(ii, []); ...实际上,您甚至根本不需要进行缩放。如果你想将图像写入文件,你会的。

只需做:

imagesc(ii); colormap('gray');
% or
%imshow(ii,[]);

...如果是浮​​点数,上面会自动将图片缩放到[0,255][0,1]的范围内。

你应该期待的是一个渐变渐增的图像,其中左上角是0或接近零,当你接近右下角时,图像的强度开始增加到完全变白的程度。你接近图像的右下角。请记住,积分图像计算从图像左上角到空间坐标(x,y)的区域。

此外,根据图像的大小,积分图像值可能会非常快速地填满,因此显示日志标准化强度图像可能也很有用:

imagesc(log(1 + ii)); colormap('gray');
% or
imshow(log(1 + ii), []);

当您从左上角向右下角扫描时,这将为您提供更均匀的强度分布。