![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194005/image.png)
What is the fit method to exclude the shadow??
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Diah Junaidi
am 21 Aug. 2018
Beantwortet: Image Analyst
am 21 Aug. 2018
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194125/image.jpeg)
Here the image...anyone please help to answer this challenge..
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 21 Aug. 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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194005/image.png)
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.
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Explore and Edit Images with Image Viewer App finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!