Matlab 关于图像处理-nlfilter、blockproc、colfilt
我目前正在运行一个脚本,该脚本需要一个通过图像的滑动窗口。对于每个窗口,我必须计算直方图均衡化来应用它。 它说:Matlab 关于图像处理-nlfilter、blockproc、colfilt,matlab,image-processing,Matlab,Image Processing,我目前正在运行一个脚本,该脚本需要一个通过图像的滑动窗口。对于每个窗口,我必须计算直方图均衡化来应用它。 它说: Assignment has more non-singleton rhs dimensions than non-singleton subscripts. 我相信可以根据每个窗口中的histeq使用滑动窗口运行nlfilter,但我无法找出哪里出了问题。之所以出现nlfilter错误,是因为直方图均衡化输出了图像。对于图像中的每个像素位置,nlfilter处理围绕该像素的邻域,
Assignment has more non-singleton rhs dimensions than non-singleton subscripts.
我相信可以根据每个窗口中的
histeq
使用滑动窗口运行nlfilter
,但我无法找出哪里出了问题。之所以出现nlfilter
错误,是因为直方图均衡化输出了图像。对于图像中的每个像素位置,nlfilter
处理围绕该像素的邻域,并生成单个输出像素。因此,无法使用nlfilter
colfilt
的操作方式相同,但它采用像素邻域,将其重新塑造为单列,并分别对每列进行过滤。每列的输出是一个单像素,然后colfilt
对输出进行整形,使其再次成为图像,这就是输出。因此,这回答了您关于colfilt
的问题
对于本地应用histeq
,我只能在块不重叠的情况下看到这一点,因此您的blockproc
代码应该可以工作。滑动窗口(重叠)方法不起作用,因为输出是图像块,而不是单个像素。我假设您将用其histeq
'd版本替换图像中的每个块?在这种情况下,使用blockproc
是非常自然的
此外,如果我们在滑动窗口上执行histeq
,我们将有多个块相互重叠。你会如何将它们结合起来?而且,由于窗口太小,结果也不好histeq
旨在增加对比度,通过在这样一个小窗口上应用直方图均衡化,您将吹出每个局部窗口的对比度,所有这些的组合将使图像看起来非常嘈杂。在代码中,您指定的修补程序大小为3 x 3。有了这个,你将有3 x 3的黑白补丁,因为在这样一个小尺寸的窗口中变化很小,因此导致了较少的强度。使用如此少量的强度,输出块将不可避免地被推到黑白
尝试将窗口大小增加到更大的大小(如31 x 31),看看会得到什么 你好,rayryeng,谢谢你的回复。是的,histeq似乎不可能由nlfilter或colfilt实现。在这种情况下,histeq的数组性质对其中任何一个都不起作用。我想blockproc将是我唯一的选择,使用一个更大的窗口。再次感谢!没问题。如果我写了一个描述这个的答案,你会接受吗?是的!看起来增加的窗口大小产生了更好的效果!感谢您的深入解释(rayryeng!)