2016-03-19 27 views
0

この寸法の画像が240x180で、オリジナル画像から各サブ画像(20x20)のMean Absolute Deviation(MAD)を見つけるためにMatlabを使用したいのですが最終的に108の結果を抽出しなければならないので、各20x20サブピクセルの平均を求め、各ピクセルと計算された平均との差の絶対値の合計を求めることによってMADの概念を知る。matlabで画像の平均絶対偏差を見つけるには

私は、このdim(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.関数MADを作成する
2.関数にウィンドウ(またはサブ画像やテンプレート)を渡す2つのループを定式化する。 :operatorを使用して、サブイメージの範囲を指定することができます。
3. 3次元配列を作成して、20×20×180の寸法の出力を保存することができます。
4. 幸運!!
テイクケア!

+0

べき方法を追加することはないと思いますポストで上記のコードのように私はわずか84ブロックを得るが、私は108ブロックを持っている必要があります私はこの場合の問題は何か分からない –

0

私はあなたが第二のループに分裂しているときkk=kk+(r/bs)(r/bs)は、いくつかのrbsため丸めた値を与え、ひいてはkの値まで私は、サブ画像に画像を分割し始め、それが

関連する問題