How to apply a Color Thresholder function in Image Batch Processor

Illustration
rekha_baliyaan - 2021-12-31T14:17:59+00:00
Question: How to apply a Color Thresholder function in Image Batch Processor

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?

Expert Answer

Profile picture of John Williams John Williams answered . 2025-11-20

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)

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!