Question
How to apply a Color Thresholder function in Image Batch Processor to get masked RGB Images instead of binary ones? 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?
Related Questions
Expert Answer
John Williams
PhD Expert
Answered Aug 13, 2026
You need to call it in a loop over all your images, like
folder = pwd; % Whatever.
filePattern = fullfile(folder, '*.webp');
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)
Have a different question? Ask here