Compute block-wise standard deviation
2 次查看(过去 30 天)
显示 更早的评论
i have converted 80*80 image into blocks. next i converted blocks to linear array. now i need to find standard deviation of first 8 arrays. then standard deviation of next 8 arrays and so on. please send code.std2(tv(:,me:nn*nnn), 2). it show error
for i=1:4:nr-3
for j=1:4:nc-3
block=I(i:i+3,j:j+3);
%convert 4X4 into 16X1 column vector
tv(:,col)=reshape(block,16,1);
col=col+1;
count=count+1;
column=column+4;
end
row=row+4;
end
1 个评论
回答(2 个)
Matt J
2016-4-24
编辑:Matt J
2016-4-24
Not sure I fully understand. You can get the standard deviations of each 4x4 block, all in just 2 lines, by using SEPBLOCKFUN ( Download )
sz=[4,4];
Imeans=sepblockfun(I,sz,@mean);
result=sqrt(sepblockfun(I.^2, sz,@mean ) - Imeans.^2 );
Or, if you set sz=[32,4] this will do the same across blocks of size [32,4] which is what you get if you group consecutive sets of eight 4x4 blocks together.
0 个评论
Image Analyst
2016-4-24
You can use blockproc:
% Block process the image to replace every pixel in the
% 8 pixel by 8 pixel block by the standard deviation
% of the pixels in the block.
% Image will be smaller since we are not using ones() and so for each block
% there will be just one output pixel, not a block of 8 by 8 output pixels.
blockSize = [8 8];
StDevFilterFunction = @(theBlockStructure) std(double(theBlockStructure.data(:)));
blockyImageSD = blockproc(grayImage, blockSize, StDevFilterFunction);
See attached demos.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!