我想将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'
我尝试使用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
答案 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单元矩阵。现在,这是一个绕口令......
无论哪种方式,代码都能满足您的需求! :)