如何连接较小的矩阵以形成更大的矩阵?

时间:2016-04-08 17:55:08

标签: matlab matrix concatenation

我想将14641个3X3矩阵连接成一个大小为363X363的矩阵,大矩阵每行必须包含121个子矩阵(121 * 3 = 363列)和121个这样的子矩阵行(121 * 3 = 363个)我已经完成了类似的问题,但我没有得到正确的逻辑来连接大量的矩阵。 等待你的建议。提前谢谢。

PS:我从363X363矩阵中获得了这些3X3矩阵。以下代码用于将单个矩阵拆分为子矩阵。

I=imread('photo.jpg');
B = randi([0 255],363,726,3);
B(1:numel(I)) = I;
L=B(1:363,1:363);
[al,bl]=size(L);
ImageSize=al*bl;
BlockD=3; % i assume 3x3 block
BlockSize=BlockD*BlockD;
TotalBlocks=ImageSize/BlockSize;
subL=zeros(BlockD,BlockD,TotalBlocks); %arrays of blocks.
LL=double(L); 
k=1;
for i=1:BlockD:al
 for j=1:BlockD:bl
    subL(:,:,k)=LL(i:i+BlockD-1,j:j+BlockD-1); 
    k=k+1;
 end
end

现在我想连接所有这些'subL'子矩阵再次形成'LL'

使用blocproc而不是上面的代码

我尝试使用blockproc函数而不是上面的代码。我做了这段代码并且工作得很好。谢谢你

I=imread('photo.jpg');
B = randi([0 255],363,726,3);
B(1:numel(I)) = I;
L=B(1:363,1:363);
q=[1 2 3 4];
fun=@(block_struct)quaternionrotate(q,block_struct.data);
LL = blockproc(L,[3 3],fun);

并且函数quaternionrotate是

function [ Lrot1 ] = quaternionrotate(q,A)
 qinv=quatinv(q);
 B=zeros(3,1);
 A1=[B A];
 Lrot=quatmultiply(q,quatmultiply(A1,qinv));
 Lrot(:,1)=[];
 Lrot1=Lrot;
end

1 个答案:

答案 0 :(得分:0)

终于搞清楚了!

% I used this to make 14641 3x3 sample matrices, you should use your own

matrix = ones(3,3);
for i = 2:14641
   matrix = [matrix, i*ones(3,3)]; 
end

c_size = 121;

output = cell(c_size, c_size) % Make 121x121 cell matrix

% Populate the cell matrix
for i = 1:1:c_size
    for j = 1:1:c_size
        output(i,j) = {matrix(1:3, (i-1)*c_size*3+(j-1)*3+1 : (i-1)*c_size*3+(j-1)*3+3)};
    end
end

这将363个3x3矩阵的43923x3大小矩阵分解为3x3矩阵的121x121单元矩阵。现在,这是一个绕口令......

无论哪种方式,代码都能满足您的需求! :)