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 关于图像处理-nlfilter、blockproc、colfilt_Matlab_Image Processing - Fatal编程技术网

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!)