Clear Filters
Clear Filters

I can't to find image SMOTE coding.

2 views (last 30 days)
Taradon
Taradon on 29 Mar 2024
Answered: Neha on 10 Apr 2024
I have some experimet for image classification and I want to generate new data by SMOTE but I can't to find about image SMOT coding. Can you suggest me about the code.

Answers (1)

Neha
Neha on 10 Apr 2024
Hi,
I understand that you want to implement SMOTE for image classification. You can refer to the following File Exchange submission to download the file containing the implementation of the 'smote' function:
Since SMOTE typically operates on numerical feature vectors, the first step involves converting images into a suitable format. After generating synthetic samples, you'll need to convert these back into images and handle them appropriately for your classification task. Please refer to the following code snippet which implements SMOTE for the Digits dataset using the code provided in the File Exchange submission.
dataFolder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(dataFolder, ...
'IncludeSubfolders',true,'LabelSource','foldernames');
allFeatures = [];
allLabels = [];
while hasdata(imds)
[img, info] = read(imds);
label = info.Label;
featureVector = double(reshape(img, [], 1));
allFeatures = [allFeatures; featureVector'];
allLabels = [allLabels; label];
end
% Convert labels to numeric if they're categorical
if iscell(allLabels)
[~, ~, allLabels] = unique(allLabels);
end
% Use SMOTE to oversample all classes 100% (using default 5 k-nearest neighbors)
[smoteFeatures, smoteLabels] = smote(allFeatures, 0.5, 'Class', allLabels);
%%
imageSize = [28, 28];
numImages = size(smoteFeatures, 1);
syntheticImages = reshape(smoteFeatures', [imageSize, 1, numImages]);
outputFolder = '<path to syntheticImages>'; % Define where to save images
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
numImages = size(syntheticImages, 4);
for i = 1:numImages
img = syntheticImages(:, :, :, i); % Extract the i-th image
label = smoteLabels(i);
filename = sprintf('%s_%d.png', label, i);
fullPath = fullfile(outputFolder, filename);
imwrite(img, fullPath);
end
syntheticImds = imageDatastore(outputFolder, 'Labels', smoteLabels);
Hope this helps!

Categories

Find more on Programming in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!