0

サイズ の RGB イメージがあります412x550。サイズのサブ行列に分割したい2x2mat2cell関数を使用してみましたが、エラーが発生しています。エラーは次のとおりです。

入力引数 D1 から D2 は、入力行列サイズ [412 550] の各次元に合計する必要があります。

このエラーを解決して目的のサブ マトリックスを取得するにはどうすればよいですか?

4

3 に答える 3

4

構文が少しずれている可能性があります。あなたの状況の正しい構文は次のようになります

>> A = rand(412,550);
>> B = mat2cell(A, 2*ones(size(A,1)/2,1), 2*ones(size(A,2)/2,1))

ans = 
    [2x2 double]    [2x2 double]    ... 
    [2x2 double]    [2x2 double]    ...
    ...
于 2012-09-23T18:14:28.790 に答える
1

関数を使用する必要がありますim2col。それはまさにあなたが必要とするものです。

A = rand(412,550);
B = im2col(A,[2 2]);

ドキュメントはそこにあります:

http://www.mathworks.fr/help/images/ref/im2col.html;jsessionid=4d24325613716d84d4635b4fc636

于 2012-09-23T20:31:04.023 に答える
0

一般に、次のコードを使用して画像をブロックに分割できます(圧縮プロセスなどのために)

    A=imread('image.bmp'); % i assume 8-bit gray scale image
    [m,n,k]=size(A); % and m=n with 1 channel k=1
    ImageSize=m*n;
    BlockD=2; % i assume 2x2 block
    BlockSize=BlockD*BlockD;
    NoOfBlock=ImageSize/BlockSize;
    SubB=zeros(BlockD,BlockD,NoOfBlock); %arrays of blocks.
    B=double(A); important to convert uint8 to double when dialing with image.
    % thats what ru asking for.
    k=1;
    for i=1:BlockD:m
    for j=1:BlockD:n
        SubB(:,:,k)=B(i:i+BlockD-1,j:j+BlockD-1); k=k+1;
    end
    end
    %compare between first submatrix A with first block.. its the same elements.
    B(1:2,1:2)
    SubB(:,:,1)
于 2014-10-05T13:13:59.927 に答える