How to create an empty array or empty struct ?

조회 수: 32 (최근 30일)
ahmad Al sarairah
ahmad Al sarairah 2019년 10월 13일
댓글: Rik 2019년 10월 14일
I have an image with 643x643 pixels , and i need to divide it to 100 blocks , each blocks with size 64x64 .
First,i need to create an empty array containing 100 cells and then store the 100 cropped images in it.More clearly B{0,0} is the first cropped image with 64x64, and B{0,1} is the second cropped image with 64x64 ,and so on.
i am using this code :
currentimage = imread('C:\Users\user\Desktop\D.gif');
[row,col,~]=size( currentimage );
height=fix(row/10);
width=fix(col/10);
for i=0:9
for j=0:9
B{i,j}=imcrop(currentimage,[(j*height) (i*width) height width]);
end
end

답변 (1개)

Ekemini Stephen
Ekemini Stephen 2019년 10월 13일
Hi Ahmad, I have edited your code to make it work. You need to store the 64*64 cropped images section in different fields within a structure. First, at each "i" of your outer for loop you need to create an empty structure with a field name and cropped the image within the inner for loop, and as this loop exits, you store the cropped image in the first created structure field. As your outer for loop continue, your images will be properly stored in the fields of that one structure. Look at the code below.
%% Import image file
currentimage = imread('C:\Users\lenovo\Desktop\FILES\Eket_MAT\ek.jpg');
[row,col,~]=size( currentimage );
height = fix(row/10);
width = fix(col/10);
%% Loop through image, crop and store
for i = 1:10
ss = ["a", string(i)]; % Define your field name
ss1 = join(ss,"a"); % Join the strings to create a valid name
data.(ss1) = {}; % Create the fields within the structure that holds each
% of your cropped image
for j = 1:10
B = imcrop(currentimage,[(i*width) (j*height) width height]); % Crop image
end
data.(ss1) = B; % Store each cropped image within the created field at each "i"
end
  댓글 수: 3
ahmad Al sarairah
ahmad Al sarairah 2019년 10월 14일
Thank you mr.stephn . I have applied the code above, but the result is only 10 cropped images (aa1-aa10). I need to divide the original images into 100 pieces (aa1-aa100) and each piece is 64x64 .
I used the function (fix) to be an integer division (64) ,So all the cropped images have the same measurement (64x64).
Rik
Rik 2019년 10월 14일
Please continue the discussion in the other thread.
@Ekemini Stephen: number struct field are almost as bad as numbered variables. You should avoid them if possible. As this problem can be solved with normal indexing (or blockproc, depending on the end goal of this code), that is a preferable solution, as that makes it easier to loop through the split elements.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by