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

조회 수: 6 (최근 30일)
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

채택된 답변

Image Analyst
Image Analyst 2021년 10월 7일
편집: Image Analyst 2021년 10월 7일
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)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Image Processing and Computer Vision에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by