Cut region of interest images from 3D stack with known indices and without for loop
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Kevin Jansen
am 2 Mär. 2023
Kommentiert: Kevin Jansen
am 2 Mär. 2023
Hi! I am having trouble cutting region of interest from a 3D stack.
A small example, I have a 3x3x2 array of:
array = [1,2,3;4,5,6;7,8,9];
array(:,:,2) = [1,2,3;4,5,6;7,8,9];
mini image indices:
left = [1,2]
right = [2,3]
top = [1,2]
bottom = [2,3]
create mini images:
miniImages = array(top:bottom,left:right,:)
result:
miniImages(:,:,1) = [1,2;4,5]
miniImages(:,:,2) = [1,2;4,5]
However, I want the result to be:
miniImages(:,:,1) = [1,2;4,5]
miniImages(:,:,2) = [5,6;8,9]
It seems that it only uses the first indices in variables left, right, top, bottom to create all mini images.
Anyone know how to solve this? Currently I use a for loop over the indices, but I want to make it faster.
Thanks!
2 Kommentare
Akzeptierte Antwort
Matt J
am 2 Mär. 2023
Bearbeitet: Matt J
am 2 Mär. 2023
I doubt anything will be faster than a loop, but you can try this:
array = [1,2,3;4,5,6;7,8,9];
array(:,:,2) = [1,2,3;4,5,6;7,8,9]
left = [1,2];
top = [1,2];
bottom = [2,3];
right = [2,3];
args=cellfun(@(z)reshape(z,1,1,[]) , {left,top,bottom,right} ,'un' ,0);
[L,T,B,R]=deal(args{:});
[m,n,p]=size(array);
[I,J]=ndgrid(1:m,1:n);
lidx=T<=I & I<=B & L<=J & J<=R;
miniImages=reshape( array(lidx) ,B(1)-T(1)+1,R(1)-L(1)+1,[])
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!