How to Save image Features in .mat file??

조회 수: 4 (최근 30일)
saeeda saher
saeeda saher 2018년 4월 27일
댓글: Ameer Hamza 2018년 4월 30일
I am trying to extract facial features from image using HOG and trying to save them in .mat file, but when i run my code it saves the features of all images in one column. I want to save the features of each image in separate row.
Here is my CODE:
myFolder = 'folder'; % or whatever.
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.jpg');
matFiles = dir(filePattern);
for k = 1:length(matFiles)
baseFileName = matFiles(k).name;
img = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', img);
storedStructure = imread(img);
% Now do whatever you need to do with the structure you recalled.
%figure % New figure, do not specify the index
%imshow(img);
FaceDetect = vision.CascadeObjectDetector;
FaceDetect.MergeThreshold = 7 ;
BB = step(FaceDetect,storedStructure); %figure(2),imshow(img);
for i = 1:size(BB,1)
rectangle('Position',BB(i,:),'LineWidth',3,'LineStyle','- ','EdgeColor','r');
end
% figure
for i = 1:size(BB,1)
J= imcrop(storedStructure,BB(i,:));
%subplot(6,6,i);
figure
imshow(J);
% Create a folder with the base file name
[~, baseFileNameNoExt, ~] = fileparts(baseFileName);
outputFolder = fullfile(myFolder, baseFileNameNoExt);
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
fprintf('Created folder : %s\n', outputFolder);
end
% Prepare output filename
outputFileName = fullfile(outputFolder, baseFileName);
% Write file to that folder
imwrite(J, outputFileName);
fprintf(' Copied %s to the folder called %s.\n', baseFileName, outputFolder);
end
end
J
HOG(J)
X=HOG(J)
save('features.mat','J');

채택된 답변

Ameer Hamza
Ameer Hamza 2018년 4월 27일
In your code, the matrix you want to save is X, not J. Also, you are also calculating HOG feature for the last image. To calculate for all images and save them write your code as follows.
  • Before the start of first for loop add the following line
X = [];
  • At the end of inner for loop add the following line, like this
fprintf(' Copied %s to the folder called %s.\n', baseFileName, outputFolder); % line from your code
X{k, i} = HOG(J);
Each row in X represents HOG feature for one complete image. Each element in the row represents HOG features for one bounding box.
Then save the features like this
save('features.mat', 'X');
  댓글 수: 9
saeeda saher
saeeda saher 2018년 4월 30일
Thank You @Ameer Hamza
Ameer Hamza
Ameer Hamza 2018년 4월 30일
You are welcome.

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2018년 4월 27일
You are doing a loop with imcrop, but you are only storing the output for the current iteration in J. Afterwards, J is going to have the value it had on the last iteration of the loop. You are then applying HOG only to that one cropped version.
You should be calculating the HOG inside the loop and saving all of the results.

카테고리

Help CenterFile Exchange에서 Image Data Workflows에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by