Creazione di un dataset da registrazione Doppler con Matlab

In questo post faccio vedere come creare un dataset in matlab in modo automatizzato, avendo a disposizione delle annotazioni in estensione “.mat”.

Nel mio caso sono un insieme di registrazioni fetali Doppler perchè, essendo un dottorando nel settore della biomedica, mi sono capitati recording di questo tipo.

Quello che faccio in questo codice è:

  1. Creare una struttura con tutte le immagini presenti nella cartella corrente (nel mio caso le registrazioni Doppler) e che hanno un ending tag noto (nel mio caso ‘*filtered.bmp’)
  2. Decidere dei labels coerenti con le annotazioni di cui dispongo (le mie annotazioni avevano, nella terza colonna della matrice “annotations”, numeri da 1 a 3, indicanti la tipologia del ciclo fetale: ciclo, flip di ciclo cardiaco o non ciclo)
  3. Creare delle cartelle in cui inserire i sample una volta estratti
  4. Fase di estrazione dei sample e inserimento nella cartella opportuna

Qui di seguito la prima fase:

% select all images with the desired ending and create the struct
TAG_EndNameImgs = '*filtered.bmp'; % choose the correct ending for you
imgs = dir(endNameImgs);
%% Load annotation on your workspace and prepare.
load('annotations.mat')
imgsStruct=imgs;
period=128; % my period was of 128 sample approximatively
imagesLabeled (1:size(annotations, 1)) = struct ('Image', [], 'Label', '');

Bisogna caricare nel workspace le annotazioni (erano un .mat). Nel mio caso la colonna tre della matrice delle annotazioni conteneva gli indici di inizio di un ciclo cardiaco o non cardiaco (annotazioni prese da un medico).

Qui di seguito la seconda fase:

%% choose your own labels
labels = ["heart_cicle" "heart_cicle_flipped" "NOT_heart_cicle"];

Terza fase:

 

%% here I'm dividing the folders that will contain the samples
if (~exist(pwd + "\heart_cicle", 'dir')||~exist(pwd + "\heart_cicle", 'dir'))
mkdir(pwd + "\heart_cicle");
mkdir(pwd + "\NOT_heart_cicle");
else
disp("the folders already exist");
end

Quarta fase:

 %% Go through each record in imgsStruct (for me was the doppler)
% and cut selectively.
% Insert all the cut images in imgsStruct
disp("Now, from all records, I'll build sample images. Please be patient...");
for i=1:size(imgsStruct, 1)
% find all the annotations for that file
indexes = find(annotations(:,3)==i);
imgTmp = imread(imgsStruct(i,1).name);

for j = 1:size(indexes,1)
beg_col =annotations(indexes(j),1); % annotated index tells the begin
end_col = annotations(indexes(j),1)+ period; % end on period
imgTmpSplitted = imageDopplerSplitter(imgTmp, beg_col, end_col);
% establish the labels and insert the sample into the appropriate folder
if ((annotations(indexes(j),2)==1)) % heart_cicle
imagesLabeled(indexes(j)).Label = labels(1);
imagesLabeled(indexes(j)).Image = imgTmpSplitted;
baseFileName = "sample" + int2str(indexes(j)) + ".bmp"; % Whatever....
fullFileName = fullfile(pwd + "\" + labels(1), baseFileName);
imwrite(imagesLabeled(indexes(j)).Image, fullFileName);
elseif ((annotations(indexes(j),2)==2)) % heart_cicle_flipped
imagesLabeled(indexes(j)).Label = labels(2);
imagesLabeled(indexes(j)).Image = imgTmpSplitted;
baseFileName = "sample" + int2str(indexes(j)) + ".bmp"; % Whatever....
fullFileName = fullfile(pwd + "\" + labels(1), baseFileName);
imwrite(imagesLabeled(indexes(j)).Image, fullFileName);
elseif ((annotations(indexes(j),2)==3)) % NOT_heart_cicle
imagesLabeled(indexes(j)).Label = labels(3);
imagesLabeled(indexes(j)).Image = imgTmpSplitted;
baseFileName = "sample" + int2str(indexes(j)) + ".bmp"; % Whatever....
fullFileName = fullfile(pwd + "\" + labels(3), baseFileName);
imwrite(imagesLabeled(indexes(j)).Image, fullFileName);
end
end
end
disp ("Now samples are separated into the folder heart_cycle and NOT_heart_cycle");

In questo post è stato presentato un esempio di codice Matlab per la creazione di un dataset esempio (nel mio caso un Doppler). Questa creazione di dataset può essere adattata ai propri scopi.

Non posso fornire il dataset su cui sto lavorando in quanto proprietà dell’Università per la quale lavoro e non posso neanche fornire i dettagli delle elaborazioni successive degli studi correlati. Nessuna domanda in tal senso verrà presa in considerazione e/o riceverà delle risposte.