2012-09-23 142 views
0

我有一個尺寸爲412x550的RGB圖像。我想將它分成尺寸爲2x2的子矩陣。我試過使用mat2cell函數,但它給出了錯誤。錯誤是:在MATLAB中將矩陣分成子矩陣

輸入參數D1到D2必須求和輸入矩陣大小[412 550]的每個維度。

如何解決此錯誤以獲得所需的子矩陣?

+3

你必須顯示你實際嘗試過的內容(代碼本身),因爲你可能剛剛得到的語法有點不對。 – tmpearce

+0

你也可以嘗試'im2col'。 – Maurits

+2

@Maurits:提供OP有圖像處理工具箱(看起來貌似合理,但你永遠不知道) –

回答

3

您可能會得到一些語法錯誤。您的情況的正確語法是

>> 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] ... 
    ... 
+0

thanx很多幫助 – user1692648

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)