78 lines
2.7 KiB
Matlab
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');
|
|
|