How to apply a Color Thresholder function in Image Batch Processor to get masked RGB Images instead of binary ones?

4 views (last 30 days)
Hi
I've used color thresholder to create a function that extracts certain objects from an image and set background to black. This is the generated function:
function [BW,maskedRGBImage] = createMask(RGB)
%createMask Threshold RGB image using auto-generated code from colorThresholder app.
% [BW,MASKEDRGBIMAGE] = createMask(RGB) thresholds image RGB using
% auto-generated code from the colorThresholder app. The colorspace and
% range for each channel of the colorspace were set within the app. The
% segmentation mask is returned in BW, and a composite of the mask and
% original RGB images is returned in maskedRGBImage.
% Auto-generated by colorThresholder app on 07-Oct-2021
%------------------------------------------------------
% Convert RGB image to chosen color space
I = RGB;
% Define thresholds for channel 1 based on histogram settings
channel1Min = 23.000;
channel1Max = 80.000;
% Define thresholds for channel 2 based on histogram settings
channel2Min = 33.000;
channel2Max = 84.000;
% Define thresholds for channel 3 based on histogram settings
channel3Min = 0.000;
channel3Max = 34.000;
% Create mask based on chosen histogram thresholds
sliderBW = (I(:,:,1) >= channel1Min ) & (I(:,:,1) <= channel1Max) & ...
(I(:,:,2) >= channel2Min ) & (I(:,:,2) <= channel2Max) & ...
(I(:,:,3) >= channel3Min ) & (I(:,:,3) <= channel3Max);
BW = sliderBW;
% Initialize output masked image based on input image.
maskedRGBImage = RGB;
% Set background pixels where BW is false to zero.
maskedRGBImage(repmat(~BW,[1 1 3])) = 0;
end
However, when I apply this function for a batch of images in Image batch processor, I'm only getting the binary masks (the selected objects are white and a black background) as outputs.
Can you tell me how to get the objects in my image batch as RGB with black background?
Thanks

Accepted Answer

Image Analyst
Image Analyst on 7 Oct 2021
Edited: Image Analyst on 7 Oct 2021
You need to call it in a loop over all your images, like
folder = pwd; % Whatever.
filePattern = fullfile(folder, '*.png');
fileList = dir(filePattern);
for k = 1 : numImages
% Read in original image
thisFileName = fullfile(fileList(k).folder, fileList(k).name);
fprintf('Reading "%s".\n', thisFileName);
rgbImage = imread(thisFileName);
% Do color segmentation.
[mask, maskedRGBImage] = createMask(rgbImage);
% Now display the three images
subplot(2, 2, 1);
imshow(rgbImage)
subplot(2, 2, 2);
imshow(mask);
subplot(2, 2, 3);
imshow(maskedRGBImage);
drawnow;
end
Or if you're using the batch processing app, maybe it's using only the first output. Try reversing the outputs:
function [maskedRGBImage, BW] = createMask(RGB)

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by