Как создать массив с логическими переменными и перебрать эти переменные в течение l oop? - PullRequest
0 голосов
/ 31 января 2020

У меня есть 16 двоичных изображений типа logi c, и я хочу поместить эти изображения (имена переменных) в массив и выполнить итерацию по ним в течение l oop, выполняя обработку изображений.

Ниже приведен пример имен моих двоичных изображений и моего текущего для l oop (не работает).

bin_RD1 = imbinarize(rightDam1, T_RD1); %these are my binary images
bin_RD2 = imbinarize(rightDam2, T_RD2);
bin_RD3 = imbinarize(rightDam3, T_RD3);
bin_RD4 = imbinarize(rightDam4, T_RD4);

i = who('bin*'); %says of type 16x1 cell

for j = 1:length(i) %j is listed as just a number
k = i{j}; %char type: 'bin_RD1'
% logical k; did not work
roi = bwareaopen(k, 25); 
graindata = regionprops('table',roi,'Area','EquivDiameter','MajorAxisLength','MinorAxisLength','Centroid','Orientation'); 
end

1 Ответ

0 голосов
/ 31 января 2020

Ваша формулировка сбивает с толку, и я не знаю, ищите ли вы это. Попробуйте назначить свои переменные в матричной форме (имейте в виду, что я никогда не работал с изображениями, поэтому мое индексирование может быть очень неправильным):

for i=1:16
     bin_RD(:,:,i) = imbinarize(rightDam(:,:,i),T_RD(i));
end

Вы можете использовать такую ​​операцию для обработки вашей переменной bin_RD также. Вам даже не придется оставлять l oop.

for i=1:16
     bin_RD(:,:,i) = imbinarize(rightDam(:,:,i),T_RD(i));
     roi(:,:,i) = bwareaopen(bin_RD(:,:,i), 25);
     graindata = regionprops('table',roi(:,:,i),'Area','EquivDiameter','MajorAxisLength','MinorAxisLength','Centroid','Orientation'); 
end

Последний совет: я использовал i = 1: 16, но если вы когда-нибудь захотите снова использовать этот код в ситуации где у вас может быть 5, 22, 100 и др. c изображений, используйте для i = 1: length (T_RD) или что-то в этом роде, и вам не придется каждый раз менять его.

...