1

そこから256x256のマトリックスがあり、8x8のマトリックスのブロックを作成したいと思います。以下のコードは、1つのブロックだけを示しており、すべてのブロックが必要で、マトリックスの各要素から数値を減算します。各要素から128を引くと、負の値は表示されず、0のみが表示されます。

[x,y] = size(M);

for i=1:8
   for j=1:8
      k(i,j) = M(i,j);
   end
end

disp(k);

for a=1:size(k)
   for b=1:size(k)
     A(a,b) = k(a,b) - 128;
   end
end

disp(A);
4

2 に答える 2

1

ええと、固定値を引く必要がある場合は、次のように行う方がよいでしょう。

M = M - 128;

それは速いです。

0負の値ではなく値を取得するとおっしゃいました。マトリックスのタイプが原因である可能性がありますunsigned(つまり、みんなが正である)。一般整数へのキャストが必要です。試す:

M = int16(M) - 128;

私が提案するパーティションを取得するには、より効率的な方法があります。

r = rand(256,256);            %// test case, substitute with your matrix M
[i j] = meshgrid(1:8:256);    %// lattice of indices      
idx = num2cell([ i(:) , j(:) ],2); %// cell version 

matr = cellfun( @(i) r(i(1):i(1)+7,i(2):i(2)+7), idx, 'UniformOutput',false); %// blocks

matrには、辞書式順序ですべてのサブ行列が含まれます。例えば

matr{2}

ans =

0.4026    0.3141    0.4164    0.5005    0.6952    0.1955    0.9803    0.5097
0.8186    0.9280    0.1737    0.6133    0.8562    0.7405    0.8766    0.0975
0.2704    0.8333    0.1892    0.7661    0.5168    0.3856    0.1432    0.9958
0.9973    0.8488    0.6937    0.2630    0.1004    0.5842    0.1844    0.5206
0.4052    0.0629    0.6982    0.1530    0.9234    0.1271    0.7317    0.3541
0.2984    0.3633    0.1510    0.0297    0.0225    0.7945    0.2925    0.0396
0.5097    0.0802    0.8744    0.1032    0.8523    0.6150    0.4845    0.5703
0.8635    0.0194    0.1879    0.5017    0.5297    0.6319    0.2406    0.5125

説明:matlabでは、行列とそのスライスを効率的に操作できます。たとえば、部分行列を簡単にコピーできます。たとえば、最初の8x8行列は次のようになります。

  sub = M(1:8,1:8);

すべての部分行列が必要なので、取得するには一種のインデックスの格子が必要です

  sub_ij = M(1+8*(i-1) : 7 * 8*(i-1) , 1+8*(j-1) : 7 * 8*(j-1))

つまり、格子が必要です

  (1+8*(i-1) : 7 * 8*(i-1) , 1+8*(j-1) : 7 * 8*(j-1))   % // for all i,j

あなたはmeshgridそのために使うことができます。

最後に、あなたは断片を切り落とさなければなりません、それは最後の2つの命令がすることです。特に、最初のものはインデックスを生成し(try idx{1}、...)、2番目のものは部分行列を生成します(try matr{1}、...)。

于 2012-11-27T21:03:22.743 に答える
0

このコードがお役に立てば幸いです。4x4ブロックに分割する16x16の画像があります。値を変更して、必要な出力を取得できます。

于 2012-11-28T03:50:34.153 に答える