使用blockproc错误而发现均值和方差的图像

6视图(30天)
我有一个blockproc函数如下:
函数[mean_ch,方差]= block_process(子通道)
fun1 = @ (block_struct)意味着(子通道(:));
mean_ch = blockproc(子通道,[8],fun1);
fun2 = @ (block_struct) var(子通道(:));
方差= blockproc(子通道,[8],fun2);
结束
当我运行这个,说我的形象的红色通道(tiff格式),我得到一个矩阵相同的值。当我试着做一个散点图,重塑这些价值观得到单个值。我相信函数只运行在一个单独的块因此单个值,但我应该使用blockproc作为一个滑动窗口操作符来计算样本均值和方差的每个8×8块。如何获得正确的结果?

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年12月12日
函数[mean_ch,方差]= block_process(子通道)
= @ (M) M上校(:);
fun1 = @ (block_struct)意味着(坳(block_struct.data(:,:子通道)));
mean_ch = blockproc(子通道,[8],fun1);
fun2 = @ (block_struct) var(坳(block_struct.data(:,:子通道)));
方差= blockproc(子通道,[8],fun2);
结束
这个假设您想处理每个独立的8×8块,而不是想做的滑动窗口。
如果你 想做的滑动窗口,你想要进行一个像素,然后有点问题,因为blockproc滑动窗口处理:当你想滑了一个奇怪的数量一次(如1像素),那么它只能处理块古怪(如7 x 7,但不是8 x 8)
因此,如果你想改变一个像素和你想要的8×8块,它通常是更容易做一些conv2()操作,或nlfilter ()
7评论

登录置评。

答案(1)

图像分析
图像分析 2021年12月13日
的意思是幻灯片的滑动窗口在一个像素:
windowWidth = 3;%不管…
内核= 1 (windowWidth) / windowWidth ^ 2;
blurredImage = imfilter (grayImage,内核);
标准偏差,使用stdfilt ():
windowWidth = 3;%不管…
内核的= (windowWidth);
sdImage = stdfilt (grayImage,内核);
方差%广场
varImage =双(sdImage) ^ 2;

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!