Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中实现积分图像的几个问题_Matlab_Image Processing - Fatal编程技术网

在MATLAB中实现积分图像的几个问题

在MATLAB中实现积分图像的几个问题,matlab,image-processing,Matlab,Image Processing,我尝试通过以下方式在MATLAB中实现积分图像: im = imread('image.jpg'); ii_im = cumsum(cumsum(double(im)')'); im是原始图像,ii_im是整体图像 这里的问题是ii_im中的值超出了0到255的范围。 当使用imshow(ii_im)时,我总是得到一个非常明亮的图像,我不确定结果是否正确。我说的对吗?您正确地实现了积分图像计算,但我不明白您为什么要将其可视化-特别是因为总和将超出任何正常的整数范围。当您移动到图像的右下角时

我尝试通过以下方式在MATLAB中实现积分图像:

im = imread('image.jpg');  
ii_im = cumsum(cumsum(double(im)')');
im
是原始图像,
ii_im
是整体图像

这里的问题是
ii_im
中的值超出了0到255的范围。
当使用
imshow(ii_im)
时,我总是得到一个非常明亮的图像,我不确定结果是否正确。我说的对吗?

您正确地实现了积分图像计算,但我不明白您为什么要将其可视化-特别是因为总和将超出任何正常的整数范围。当您移动到图像的右下角时,执行由越来越大的矩形邻域限定的强度总和时,这是预期的。不可避免的是,你会在右下角看到大量的数字。此外,当您试图显示此图像时,显然会得到一个白色图像,因为大多数值都会超过255,这被视为白色

如果我可以添加一些东西,我的一个小优化就是去掉转置,并使用
cumsum
指定要处理的维度。具体来说,您可以执行以下操作:

ii_im = cumsum(cumsum(double(im), 1), 2);
首先指定哪个方向并不重要(2然后1,或者1然后2)。只要指定要操作的所有方向,每个有界区域内所有像素的总和就应该相同

回到你要展示的问题,如果你真的,真的,真的。。。我的意思是真的如果你想正常化对比度,可以执行以下操作:

imshow(ii_im, []);
然而,你应该期待的是一个渐变图像,它从顶部开始变暗,然后在你到达图像右下角时变亮。请记住,积分图像中的每个点计算图像左上角到该点的像素强度总和,从而形成需要求和的强度矩形。因此,当我们进一步向下移动到积分图像的右侧时,总和应该增加

使用
cameraman.tif
图像,这是原始图像,也是使用上述命令可视化的整体图像:

无论哪种方式,你都绝对没有理由想把它形象化。您可以将其直接用于任何需要的应用程序(自适应阈值、Viola-Jones检测器等)

另一个选项是对积分图像中的每个值应用
log
操作。比如:

imshow(log(1 + ii_im), []);
但是,这将使大多数像素具有相同的对比度,这可能没有用处。这就是我从摄影师那里得到的。tif:



这个故事的寓意是,您需要某种对比度标准化,这样您就可以在使用
imshow

在屏幕上显示图像时所使用的数据类型的范围内,将整幅图像中的所有值进行拟合(谢谢!)这帮了大忙。我正在实现intgeral图像以实现viola-jones人脸检测算法。当我使用cumsum时,我得到的值是数千。正如你所说,我可以在我的项目中使用得到的积分图像。是不是。。。再次感谢您的帮助:)@rayryeng@AmitRaj-是的,完成后你可以使用它。这是一个问题的积分图像-它会变得更大,因为你认为更大的分辨率图像。顺便说一下,如果我帮助过你,请考虑接受我的回答。这可以通过单击我的文章顶部上下箭头下方左侧的复选标记图标来完成。这意味着StackOverflow社区不再需要帮助。祝你好运好的:)再次感谢!!:)您还可以使用
cumsum(cumsum(double(im),1),2)
代替转置。