What is the fit method to exclude the shadow??

2 visualizaciones (últimos 30 días)
Diah Junaidi
Diah Junaidi el 21 de Ag. de 2018
Respondida: Image Analyst el 21 de Ag. de 2018
Here the image...anyone please help to answer this challenge..

Respuesta aceptada

Image Analyst
Image Analyst el 21 de Ag. de 2018
Try this:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clearvars;
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 16;
%=======================================================================================
% Read in image.
fullFileName = fullfile(pwd, '63.jpg');
[folder, baseFileName, ext] = fileparts(fullFileName);
rgbImage = imread(fullFileName);
% Shrink it to speed it up
% rgbImage = imresize(rgbImage, 0.75);
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(rgbImage);
% Display the original image.
subplot(2, 2, 1);
imshow(rgbImage, []);
axis on;
caption = sprintf('Original Color Image "%s"', baseFileName);
title(caption, 'FontSize', fontSize, 'Interpreter', 'None');
drawnow;
hp = impixelinfo(); % Set up status line to see values when you mouse over the image.
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0.05 1 0.95]);
% Get rid of tool bar and pulldown menus that are along top of figure.
% set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
% Get mask for outer gray, and inner blue parts of the wheel by doing color segmentations.
[mask, maskedRGBImage] = createMask(rgbImage);
% Clean up noise by filling holes and taking largest blob only.
mask = imfill(mask, 'holes');
mask = bwareafilt(mask, 1);
% Display the mask image.
subplot(2, 2, 2);
imshow(mask);
axis on;
title('Mask, binary image', 'FontSize', fontSize, 'Interpreter', 'None');
% Mask the image and show the masked image.
subplot(2, 2, 3);
imshow(maskedRGBImage, []);
axis on;
title('Masked RGB image', 'FontSize', fontSize, 'Interpreter', 'None');
drawnow;
hp = impixelinfo(); % Set up status line to see values when you mouse over the image.
% Display the original image with mask boundary over it.
subplot(2, 2, 4);
imshow(rgbImage, []);
axis on;
caption = sprintf('Color Image with Boundary');
title(caption, 'FontSize', fontSize, 'Interpreter', 'None');
drawnow;
hp = impixelinfo(); % Set up status line to see values when you mouse over the image.
% Plot boundaries
boundaries = bwboundaries(mask);
hold on;
numberOfBoundaries = size(boundaries, 1);
for k = 1 : numberOfBoundaries
thisBoundary = boundaries{k};
plot(thisBoundary(:,2), thisBoundary(:,1), 'r', 'LineWidth', 3);
end
hold off;
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 20-Aug-2018
%------------------------------------------------------
% Convert RGB image to chosen color space
I = rgb2hsv(RGB);
% Define thresholds for channel 1 based on histogram settings
channel1Min = 0.959;
channel1Max = 0.099;
% Define thresholds for channel 2 based on histogram settings
channel2Min = 0.194;
channel2Max = 1.000;
% Define thresholds for channel 3 based on histogram settings
channel3Min = 0.410;
channel3Max = 1.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
Notes: It's not perfect because you don't have good control over your image capture situation. Get rid of shadows and background clutter to get a better masking.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by