Calculations/Data-Analyzer/+Scripts/BECToDropletsToStripes/FeatureDetection/generateImagesForOptimization.m

78 lines
2.7 KiB
Matlab

%% generateImagesForOptimization.m
% Converts a cell array of images into PNG files for Bayesian optimization
% Launches Image Segmenter for manually labeling ground truth masks
% ----------------- USER INPUTS -----------------
outputFolder = 'OptimizationImages'; % folder to save PNGs
maskFolder = 'OptimizationMasks'; % folder to save masks
startIdx = 1; % first image to export
endIdx = 10; % last image to export (set = 1 for a single test image)
createMasks = true; % set true to generate masks manually
% -----------------------------------------------
% Create folders if they don't exist
if ~exist(outputFolder,'dir')
mkdir(outputFolder);
end
if createMasks && ~exist(maskFolder,'dir')
mkdir(maskFolder);
end
% Loop over selected images
for idx = startIdx:endIdx
img = od_imgs{idx};
% Convert to double if not already
if ~isa(img,'double')
img = im2double(img);
end
% Normalize to [0,1] for PNG
img = img - min(img(:));
img = img / max(img(:));
% Save image
imgName = sprintf('image_%03d.png', idx);
imwrite(img, fullfile(outputFolder, imgName));
% Optional: create ground truth mask using Image Segmenter
if createMasks
fprintf('\n[INFO] Segment image %d/%d using Image Segmenter...\n', idx, endIdx);
% Launch Image Segmenter with the image
imageSegmenter(img);
% --- Instructions for user ---
% 1. Segment the regions you want as ground truth.
% 2. Click "Export" → "Export to Workspace", export the binary mask
% 3. Close the Image Segmenter when done.
% ------------------------------------------------
% Pause script until user confirms they exported the mask
input('\n[INFO] After exporting mask from Image Segmenter, press Enter to continue...','s');
% Look for any BW variables in base workspace
bwVars = evalin('base', 'who(''BW*'')');
if ~isempty(bwVars)
% Pick the last one (e.g. BW, BW1, BW2, ...)
latestBW = bwVars{end};
gtMask = evalin('base', latestBW);
% Save mask
maskName = sprintf('mask_%03d.png', idx);
imwrite(gtMask, fullfile(maskFolder, maskName));
fprintf('\n[INFO] Mask saved: %s (from %s)\n', maskName, latestBW);
% Clear masks from workspace to avoid confusion
for v = 1:numel(bwVars)
evalin('base', sprintf('clear %s', bwVars{v}));
end
else
warning('No mask found. Skipping mask save for image %d.', idx);
end
end
end
fprintf('\n[INFO] Image and mask export complete.\n');