我有一個尺寸爲412x550
的RGB圖像。我想將它分成尺寸爲2x2
的子矩陣。我試過使用mat2cell
函數,但它給出了錯誤。錯誤是:在MATLAB中將矩陣分成子矩陣
輸入參數D1到D2必須求和輸入矩陣大小[412 550]的每個維度。
如何解決此錯誤以獲得所需的子矩陣?
我有一個尺寸爲412x550
的RGB圖像。我想將它分成尺寸爲2x2
的子矩陣。我試過使用mat2cell
函數,但它給出了錯誤。錯誤是:在MATLAB中將矩陣分成子矩陣
輸入參數D1到D2必須求和輸入矩陣大小[412 550]的每個維度。
如何解決此錯誤以獲得所需的子矩陣?
您可能會得到一些語法錯誤。您的情況的正確語法是
>> 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] ...
...
thanx很多幫助 – user1692648
您應該使用功能im2col
。這正是你需要的。
A = rand(412,550);
B = im2col(A,[2 2]);
的文檔有:
http://www.mathworks.fr/help/images/ref/im2col.html;jsessionid=4d24325613716d84d4635b4fc636
實際上,Maurits已經在評論中談到了它。 – Oli
在一般情況下,你可以使用下面的代碼將圖像分割成塊(壓縮過程或其他)
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)
你必須顯示你實際嘗試過的內容(代碼本身),因爲你可能剛剛得到的語法有點不對。 – tmpearce
你也可以嘗試'im2col'。 – Maurits
@Maurits:提供OP有圖像處理工具箱(看起來貌似合理,但你永遠不知道) –