如果我的图像尺寸为240x180并且我想使用Matlab从原始图像中找到每个子图像(20x20)的平均绝对偏差(MAD),那么我必须在最后提取108个结果,我知道通过找到每个20x20子像素的均值来找到MAD的概念,然后找到每个像素与计算平均值之差的绝对值的总和。
我开始用这个昏暗的(20x20)将图像(240x180)划分为子图像,我必须有108个子图像,但结果只包含84块我不知道为什么,你可以看看到以下代码:
>> I = imread('myimage-path')
>> %the size of image 180x240
>> [r,c] = size(I);
>> bs = 20; % size of block
>> nsb = (r/bs) * (c/bs); % total number of block ( 108 block )
>> %Dividong the image into 20x20 block
>> kk=0;
>> for i=1:(r/bs)
for j=1:(c/bs)
Block(:,:,kk+j)=I((bs*(i-1)+1:bs*(i-1)+bs),(bs*(j-1)+1:bs* (j-1)+bs));
end
kk=kk+(r/bs);
end
然后我定义了空数组来存储这个数组的所有108个块以完成我对这些块的工作
>> allBlocks = [[],[],[]]
>> for h=1:84
allBlocks(:,:,h) = Block(:,:,h);
end
>> size(allBlocks)
>> % result 20 20 84
答案 0 :(得分:0)
在这种情况下,您可以使用不同的块处理功能
答案 1 :(得分:0)
以这种方式看待这个问题!
1.创建一个功能MAD(接受一个iamge)
2.制定2个将窗口(或子图像或模板)传递给您的函数的循环。您可以使用:运算符为子图像指定范围
3.您可以配制一个三维数组来存储尺寸为20x20X180的输出
4. 祝你好运!!
小心!!
答案 2 :(得分:0)
我认为当你在第二个循环中进行划分时,kk=kk+(r/bs)
(r/bs)
会为某些r
和bs
提供一个舍入值,因此不会将{k
的值加起来1}}它的方式