【问题标题】:How can I calculate standard deviation for every block in an image如何计算图像中每个块的标准偏差
【发布时间】:2013-09-27 08:08:10
【问题描述】:

我正在尝试使用this example from the docs 计算图像中每个 8x8 像素块的标准偏差,但在这种情况下我不能很好地使用它,所以任何人都可以帮我计算每个块的标准差。

 fun = @(block_struct) std2(block_struct.data) * ones(size(block_struct.data))
 I2 = blockproc('moon.tif',[8 8],fun);
 figure;
 imshow('moon.tif');
 figure;
 imshow(I2 , []);

【问题讨论】:

  • 您好,以后您可以只编辑您之前的问题,而不是重新提问。这个有更多细节,所以我要投票结束你的前一个。
  • 你的代码到底有什么问题?你得到的结果有什么问题?

标签: image-processing std matlab


【解决方案1】:

我怀疑你想要nlfilter(或colfilt'sliding' 选项)。使用blockproc,它将图像分割成不同的块不重叠,并通过复制它计算的标准偏差值来写入块。使用nlfilter,它是一个滑动窗口,因此您可以获得平滑的输出图像。

nlfilter 的语法不同,所以应该这样应用:

Iout = nlfilter(imread('moon.tif'),[8 8],@std2);

或者,您可以使用colfilt 来获得更好的性能:

Iout = colfilt(double(imread('moon.tif')),[8 8],'sliding',@std);

【讨论】:

  • 这是一项很好的工作,但我仍然无法用真正的功能替换 @std2 对不起,我不知道如何
  • 在这种情况下没有区别,但您可以像上面一样使用blockfilt
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多