Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
Image 图像中的运动像素统计信息_Image_Matlab_Image Processing_Filtering_Sliding Window - Fatal编程技术网

Image 图像中的运动像素统计信息

Image 图像中的运动像素统计信息,image,matlab,image-processing,filtering,sliding-window,Image,Matlab,Image Processing,Filtering,Sliding Window,我希望使用大小为3x3像素的滑动窗口以逐像素的方式迭代图像,并且在滑动窗口的每个位置,我希望计算像素值的最小值,最大值,平均值,以及标准偏差 你能告诉我如何做到这一点吗?另外,执行此操作的最快方法是什么 非常感谢 如果可能,您应该始终使用内置函数 建议用于滑动窗口操作。是相同的,但通常具有更好的内存局部性,您应该使用它 neigh = [3,3]; I_mean = colfilt(I, neigh, 'sliding', @mean); I_max = colfilt(I, neigh, '

我希望使用大小为
3x3
像素的滑动窗口以逐像素的方式迭代图像,并且在滑动窗口的每个位置,我希望计算像素值的最小值最大值平均值,以及标准偏差

你能告诉我如何做到这一点吗?另外,执行此操作的最快方法是什么


非常感谢

如果可能,您应该始终使用内置函数

建议用于滑动窗口操作。是相同的,但通常具有更好的内存局部性,您应该使用它

neigh = [3,3];

I_mean = colfilt(I, neigh, 'sliding', @mean);
I_max = colfilt(I, neigh, 'sliding', @max);
I_min = colfilt(I, neigh, 'sliding', @min);
标准偏差可使用以下公式计算:
colfilt(…@std)
出于某种原因需要进行数据类型转换,在我的机器上速度慢了约4倍

I_std = stdfilt(I); 
返回使用3x3滑动窗口生成的标准偏差图像

如果公平比较是指比较速度,请注意
colfilt
stdfilt
是完全不同的

I_std = colfilt(double(I), neigh, 'sliding', @std);
您还可以通过计算平均图像。它的速度快了一个数量级,但边界像素输出有点不同

tic;
meanh = fspecial('average', neigh);
I_mean = imfilter(I, meanh);
toc

Elapsed time is 0.024311 seconds.
vs

下面是差异的一个例子(
double(我的意思是)-double(我的意思是2)
)。只有边框像素不同:


邻近区域越大,速度差越大。

如果可能,应始终使用内置函数

建议用于滑动窗口操作。是相同的,但通常具有更好的内存局部性,您应该使用它

neigh = [3,3];

I_mean = colfilt(I, neigh, 'sliding', @mean);
I_max = colfilt(I, neigh, 'sliding', @max);
I_min = colfilt(I, neigh, 'sliding', @min);
标准偏差可使用以下公式计算:
colfilt(…@std)
出于某种原因需要进行数据类型转换,在我的机器上速度慢了约4倍

I_std = stdfilt(I); 
返回使用3x3滑动窗口生成的标准偏差图像

如果公平比较是指比较速度,请注意
colfilt
stdfilt
是完全不同的

I_std = colfilt(double(I), neigh, 'sliding', @std);
您还可以通过计算平均图像。它的速度快了一个数量级,但边界像素输出有点不同

tic;
meanh = fspecial('average', neigh);
I_mean = imfilter(I, meanh);
toc

Elapsed time is 0.024311 seconds.
vs

下面是差异的一个例子(
double(我的意思是)-double(我的意思是2)
)。只有边框像素不同:


附近地区越大,速度差就越大。

非常感谢您的帮助。事实上,时间复杂性正是我想要衡量的。我的原始代码是Java,它只扫描图像一次。在扫描过程中,计算滑动窗口当前位置的四个值,即min、max、mean和stdev,并将其输入到函数中,然后再进入下一个位置。在您的代码中,我认为将生成四个图像(矩阵),然后我需要重新扫描这些图像,以便对窗口的每个位置进行操作。你知道如何模仿我的java过程吗?非常感谢你的hep。对不起,我不明白你想达到什么目的。Matlab是关于矢量化代码和调用高度优化的例程的。如果您使用for循环实现某些东西,并尝试将其速度与Java中的类似例程进行比较,那就是将苹果与橙子进行比较。如果是你的函数在等待图像被计算,你会担心,我可以保证这种方法会更快。之后,您可以在图像上循环。或者更好,将它们输入到矢量化函数。非常感谢您的帮助。事实上,时间复杂性正是我想要衡量的。我的原始代码是Java,它只扫描图像一次。在扫描过程中,计算滑动窗口当前位置的四个值,即min、max、mean和stdev,并将其输入到函数中,然后再进入下一个位置。在您的代码中,我认为将生成四个图像(矩阵),然后我需要重新扫描这些图像,以便对窗口的每个位置进行操作。你知道如何模仿我的java过程吗?非常感谢你的hep。对不起,我不明白你想达到什么目的。Matlab是关于矢量化代码和调用高度优化的例程的。如果您使用for循环实现某些东西,并尝试将其速度与Java中的类似例程进行比较,那就是将苹果与橙子进行比较。如果是你的函数在等待图像被计算,你会担心,我可以保证这种方法会更快。之后,您可以在图像上循环。或者更好的是,将它们提供给一个矢量化函数。请展示您已经尝试过的内容,包括您考虑使用的函数、您考虑采用的方法、其他语言的实现等。如果MATLAB文档中有不清楚的地方,您应该提一下。如果你遇到了一些错误,你应该提到这一点。如果您担心性能问题,您应该询问(例如,“我做了X,您能建议一种更有效的方法吗?”)。自己努力解决自己的问题会鼓励别人回答。祝你好运请展示您已经尝试过的内容,包括您考虑使用的函数、您考虑采用的方法、其他语言的实现等。如果MATLAB文档中有不清楚的地方,您应该提及。如果你遇到了一些错误,你应该提到这一点。如果您担心性能问题,您应该询问(例如,“我做了X,您能建议一种更有效的方法吗?”)。自己努力解决自己的问题会鼓励别人回答。祝你好运