我正在尝试使用this example from the docs计算图像中每个8x8像素块的标准偏差,但在这种情况下我不能很好地使用它,所以任何人都可以帮我计算每个块的std。
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 , []);
答案 0 :(得分: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);