如何通过matlab找到图像的平均绝对偏差

时间:2016-03-19 22:31:24

标签: matlab image-processing mean image-recognition

如果我的图像尺寸为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 

3 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用不同的块处理功能

答案 1 :(得分:0)

以这种方式看待这个问题!
 1.创建一个功能MAD(接受一个iamge)
 2.制定2个将窗口(或子图像或模板)传递给您的函数的循环。您可以使用:运算符为子图像指定范围  3.您可以配制一个三维数组来存储尺寸为20x20X180的输出  4. 祝你好运!!
小心!!

答案 2 :(得分:0)

我认为当你在第二个循环中进行划分时,kk=kk+(r/bs) (r/bs)会为某些rbs提供一个舍入值,因此不会将{k的值加起来1}}它的方式