Converting .mat to .txt which also contains cell arrays.
2 次查看(过去 30 天)
显示 更早的评论
I am using the Lidar labeler app from the lidar toolbox in MATLAB. When i annotate the pcds and save them, they are saved in .mat files. We know, when there is more than 1 object in a frame, they are stored in cell arrays. I have 9 classes in my annotation and i want to store these label data frame wise and class wise in a text file. How do i do it? For your reference, the structure of the Label data is attached.
I have tried accessing the cell arrays but failed continuously. Would really appreciate your help in this regard.
Thank you in advance!
4 个评论
回答(1 个)
prabhat kumar sharma
2023-10-26
编辑:prabhat kumar sharma
2023-10-26
Hi Lab,
I understand that you are facing issue with storing data label wise and class wise in a text file.
To store the label data frame-wise and class-wise from the Lidar Labeler app in MATLAB, you can extract the relevant information from the saved MAT files and write it to a text file. Here's a step-by-step approach to help you accomplish this:
1. Load the label data from the .mat file:
load('label_data.mat'); % Replace 'label_data.mat' with the path to your label data file
2. Access the necessary fields in the label data structure:
frameData = label_data.frameAnnotations;
3. Iterate through each frame and extract the class-wise labels:
numFrames = numel(frameData);
numClasses = numel(label_data.labelDefinitions);
% Create a cell array to store the labels for each frame and class
labels = cell(numFrames, numClasses);
for i = 1:numFrames
for j = 1:numClasses
% Extract the labels for each class in the current frame
labels{i, j} = frameData(i).objectAnnotations(j).classification;
end
end
4. Write the label data to a text file:
filename = 'label_data.txt'; % Specify the filename for the text file
fid = fopen(filename, 'w'); % Open the file for writing
for i = 1:numFrames
fprintf(fid, 'Frame %d:\n', i);
for j = 1:numClasses
fprintf(fid, 'Class %d: ', j);
% Write the labels for each class in the current frame
if isempty(labels{i, j})
fprintf(fid, 'No label\n');
else
fprintf(fid, '%s\n', labels{i, j});
end
end
fprintf(fid, '\n');
end
fclose(fid); % Close the file
You can use the above code for reference for your MAT file and class and frame label.
After executing the above code, you will have a text file (`label_data.txt`) containing the label data frame-wise and class-wise. Each frame will be labelled with the corresponding class information. If there is no label for a specific class in a frame, it will be indicated as "No label" in the text file.
I hope it helps!
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Labeling, Segmentation, and Detection 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!