How split an image into four parts?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Bajdar Nouredine
am 3 Jan. 2023
Verschoben: Matt J
am 6 Jan. 2023
I have 2x10 cell array each cell contains 224x896 double, I want to split each image inside the cells to 224x224
0 Kommentare
Akzeptierte Antwort
Voss
am 3 Jan. 2023
Bearbeitet: Voss
am 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 Kommentare
Voss
am 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)
Siehe auch
Kategorien
Mehr zu Image Data Workflows finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!