我目前正在运行一个需要在图像中滑动窗口的脚本。对于每个窗口,我必须计算直方图均衡以应用于它。 它说:
Assignment has more non-singleton rhs dimensions than non-singleton subscripts.
我相信可以在每个窗口中使用基于nlfilter
的滑动窗口运行histeq
,但我无法弄清楚出了什么问题。
答案 0 :(得分:1)
您收到nlfilter
错误的原因是直方图均衡输出图像。对于图像中的每个像素位置,nlfilter
处理此像素周围的邻域,并生成单输出像素。因此,nlfilter
无法使用。 colfilt
以相同的方式运行,但它需要像素邻域,将它们重新整形为单列,并且我们分别过滤每列。每列的输出是单个像素,然后colfilt
重新整形输出,使其再次成为图像,这就是输出。因此,这回答了您关于colfilt
的问题!
如果在本地应用histeq
,我只能在块不重叠的情况下才能看到这种情况,因此您的blockproc
代码应该可行。滑动窗口(重叠)方法不起作用,因为您的输出将是图像块,而不是单个像素。我会假设您将使用histeq
'版本替换图像中的每个块?在这种情况下,使用blockproc
非常自然。
另外,如果我们在滑动窗口上执行histeq
,我们会有多个块相互重叠。你会如何结合所有这些?此外,由于窗口尺寸太小,您的结果会变差。 histeq
旨在增加对比度,并且通过在如此小的窗口上应用直方图均衡,您可以吹掉每个局部窗口的对比度,并且所有这些的组合将使图像看起来非常嘈杂。在你的代码中,你指定了一个3 x 3的补丁大小。这样,你就会得到3 x 3的黑白色块,因为这种小尺寸窗口的变化非常小,因此强度较小。在如此少量的强度下,输出块将不可避免地被推到黑白。
尝试将窗口大小增加到更大的范围(例如31 x 31),看看你得到了什么!