Matlab-8x8窗口与求均值
假设我有一个图像矩阵,我想做以下工作:Matlab-8x8窗口与求均值,matlab,matrix,window,mean,Matlab,Matrix,Window,Mean,假设我有一个图像矩阵,我想做以下工作: 在矩阵上滑动8x8窗口 计算矩阵中每个像素的平均值 如果我对matlab中的编码有点陌生,那么在matlab中如何做到这一点呢 谢谢。您可以将conv2与ones(8)过滤器一起使用,如I2=conv2(I,1.0/64.0*ones(8),“valid”)。我们除以64.0,因为“过滤器”未标准化。您也可以使用: 但是,正如@s.bandara所建议的那样,conv2比仅计算平均值快得多。。。 请注意,将conv2与valid一起使用时,矩阵大小将发
- 在矩阵上滑动
窗口8x8
- 计算矩阵中每个像素的平均值
matlab中如何做到这一点呢
谢谢。您可以将conv2
与ones(8)
过滤器一起使用,如I2=conv2(I,1.0/64.0*ones(8),“valid”)代码>。我们除以64.0,因为“过滤器”未标准化。您也可以使用:
但是,正如@s.bandara所建议的那样,conv2
比仅计算平均值快得多。。。
请注意,将conv2
与valid
一起使用时,矩阵大小将发生变化
nlfilter
运行时间为0.433989秒
conv2
运行时间为0.000803秒
因此,很明显,对于查找平均值的任务,conv2
要快得多。尝试首先提取图像的子矩阵,如下所示:
然后对每个子矩阵使用该功能我想他想要的是一个滑动窗口,而不是平铺。@natan。谢谢你的友好回复。在矩阵上滑动te窗口是否有效?是的nlfilter
是一个通用的滑动邻域运算函数,它可以使用比mean
更高级的函数,因此有点过分了。conv2
也应该可以工作,我会将有效的
输入替换为相同的
,不过…@natan,非常有用,+1。我建议不要使用相同的
,因为顺序效应。你考虑过边缘附近会发生什么吗?我猜你想做一个类似a的东西,但是使用平均值
作为内核?谢谢你的回复。这对在矩阵上滑动te窗口有效吗?是的,@natan's和我的解决方案都会在矩阵上滑动平均值过滤器conv2
会快一点,但两种解决方案都是正确的。@s.bandra,您不想使用same
而不是valid
?使用same
保持原始图像大小。。。这不是因为有效
在数学上是错误的,只是让下游的生活更轻松,而OP更满意,但是相同的
在边界上是不正确的,您可以始终使用大小
。。。但是是的,两者都可以。顺便说一下,nlfilter
也有同样的问题!
fun = @(x) mean(x(:));
ans= nlfilter(img,[8 8],fun);