What is the fit method to exclude the shadow??

3 ビュー (過去 30 日間)
Diah Junaidi
Diah Junaidi 2018 年 8 月 21 日
回答済み: Image Analyst 2018 年 8 月 21 日
Here the image...anyone please help to answer this challenge..

採用された回答

Image Analyst
Image Analyst 2018 年 8 月 21 日
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.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeExplore and Edit Images with Image Viewer App についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by