关于图像处理 - nlfilter,blockproc,colfilt

时间:2014-08-21 01:35:44

标签: matlab image-processing

我目前正在运行一个需要在图像中滑动窗口的脚本。对于每个窗口,我必须计算直方图均衡以应用于它。 它说:

Assignment has more non-singleton rhs dimensions than non-singleton subscripts.

我相信可以在每个窗口中使用基于nlfilter的滑动窗口运行histeq,但我无法弄清楚出了什么问题。

1 个答案:

答案 0 :(得分:1)

您收到nlfilter错误的原因是直方图均衡输出图像。对于图像中的每个像素位置,nlfilter处理此像素周围的邻域,并生成单输出像素。因此,nlfilter无法使用。 colfilt以相同的方式运行,但它需要像素邻域,将它们重新整形为单列,并且我们分别过滤每列。每列的输出是单个像素,然后colfilt重新整形输出,使其再次成为图像,这就是输出。因此,这回答了您关于colfilt的问题!

如果在本地应用histeq,我只能在块不重叠的情况下才能看到这种情况,因此您的blockproc代码应该可行。滑动窗口(重叠)方法不起作用,因为您的输出将是图像块,而不是单个像素。我会假设您将使用histeq'版本替换图像中的每个块?在这种情况下,使用blockproc非常自然。

另外,如果我们在滑动窗口上执行histeq,我们会有多个块相互重叠。你会如何结合所有这些?此外,由于窗口尺寸太小,您的结果会变差。 histeq旨在增加对比度,并且通过在如此小的窗口上应用直方图均衡,您可以吹掉每个局部窗口的对比度,并且所有这些的组合将使图像看起来非常嘈杂。在你的代码中,你指定了一个3 x 3的补丁大小。这样,你就会得到3 x 3的黑白色块,因为这种小尺寸窗口的变化非常小,因此强度较小。在如此少量的强度下,输出块将不可避免地被推到黑白。

尝试将窗口大小增加到更大的范围(例如31 x 31),看看你得到了什么!