How split an image into four parts?
8 views (last 30 days)
Show older comments
I have 2x10 cell array each cell contains 224x896 double, I want to split each image inside the cells to 224x224
0 Comments
Accepted Answer
Voss
on 3 Jan 2023
Edited: Voss
on 3 Jan 2023
% since I don't have your cell array, I make one up:
C = repmat({randi([0 255],224,896)},2,10)
% split each matrix in C into 4:
C_new = cellfun(@(x)mat2cell(x,224,224*ones(1,4)),C,'UniformOutput',false)
% each cell of C_new contains a 1x4 cell array containing the 4 224x224 matrices:
C_new{1,1}
C_new{2,1}
% etc.
5 Comments
Voss
on 6 Jan 2023
Instead of 4 separate variables, how about a single cell array of size 2x10x4?
% (same as before) generation of random data:
C = repmat({randi([0 255],224,896)},2,10)
% (same as before) split each matrix in C into 4:
C_new = cellfun(@(x)mat2cell(x,224,224*ones(1,4)),C,'UniformOutput',false)
% rearrange the contents of C_new:
C_newer = permute(reshape([C_new{:}],4,2,[]),[2 3 1])
So, C_newer{i,j,k} is the matrix stored in the kth cell of C_new{i,j}, i.e., C_new{i,j}{k}.
Put another way, C_newer{i,j,k} is the kth quarter of the original C{i,j}.
% Verification:
all_ok = true;
for i = 1:2
for j = 1:10
for k = 1:4
if ~isequal(C_newer{i,j,k}, C_new{i,j}{k}, C{i,j}(:,(end/4)*(k-1)+1:(end/4)*k))
all_ok = false;
break
end
end
if ~all_ok, break; end
end
if ~all_ok, break; end
end
if all_ok
disp('Looks good!');
else
disp('Something''s wrong!');
end
(If you really want 4 separate variables, you can easily do that:)
C_newer_1 = C_newer(:,:,1)
C_newer_2 = C_newer(:,:,2)
C_newer_3 = C_newer(:,:,3)
C_newer_4 = C_newer(:,:,4)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!