How can I Segment this image efficiently
1 回表示 (過去 30 日間)
表示 古いコメント
Daniel Allkenmach
2015 年 12 月 14 日
コメント済み: Image Analyst
2015 年 12 月 30 日
So I've been trying everything in order to get an automated system where the leaf is left by itself, but nothing has met to my specifications. How can I segment an image with the entire leaf part being left over? heres an example image:
2 件のコメント
採用された回答
Image Analyst
2015 年 12 月 28 日
Daniel, try this code:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
% Read in image.
rgbImage=imread('8.jpg');
subplot(2,2,1);
imshow(rgbImage);
title('Original RGB Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Threshold
% Convert RGB image to chosen color space
hsvImage = rgb2hsv(rgbImage);
% Define thresholds for Hue based on histogram settings
hueMin = 0.139;
hueMax = 0.356;
% Define thresholds for Saturation based on histogram settings
saturationMin = 0.451;
saturationMax = 1.000;
% Create mask based on chosen histogram thresholds
mask = (hsvImage(:,:,1) >= hueMin ) & (hsvImage(:,:,1) <= hueMax) & ...
(hsvImage(:,:,2) >= saturationMin ) & (hsvImage(:,:,2) <= saturationMax);
% Fill holes.
mask=imfill(mask,'holes');
% Extract biggest blob.
mask = bwareafilt(mask, 1);
subplot(2,2,2);
imshow(mask)
title('Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Mask the image using bsxfun() function
maskedRgbImage = bsxfun(@times, rgbImage, cast(mask, 'like', rgbImage));
% Display final masked image
subplot(2,2,3);
imshow(maskedRgbImage)
title('Masked RGB Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% 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')

2 件のコメント
Image Analyst
2015 年 12 月 30 日
If you think this is the best answer, then can you go ahead and Accept it? Thanks in advance.
Be sure to check out the color thresholder app on the Apps tab.
その他の回答 (2 件)
Image Analyst
2015 年 12 月 19 日
I have done leaves so many times before for people. Surely you can find some of my code and adapt it to your images. See http://www.mathworks.com/matlabcentral/answers/?term=tag%3A%22leaf%22
Or else look for more general color segmentation routines in my File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862
6 件のコメント
Image Analyst
2015 年 12 月 19 日
Be sure to also try out the color thresholder app on the App tab of the toolbar ribbon.
harjeet singh
2015 年 12 月 22 日
hello dear use this code for extraction

clear all
close all
clc
img=imread('leaf.jpg');
figure(1)
imshow(img)
drawnow
img=double(img);
img_1=(img(:,:,2)-img(:,:,1)>1 & img(:,:,2)-img(:,:,1)<40 & img(:,:,3)<90);
img_1=imfill(img_1,'holes');
figure(2)
imshow(img_1)
drawnow
[lab,num]=bwlabel(img_1);
for i=1:num
[r,c]=find(lab==i);
a(i,:)=[i length(r)];
end
a=sortrows(a,2);
roi=lab==a(end,1);
img_3(:,:,1)=img(:,:,1) .* double(roi);
img_3(:,:,2)=img(:,:,2) .* double(roi);
img_3(:,:,3)=img(:,:,3) .* double(roi);
img_3=uint8(img_3);
figure(3)
imshow(img_3)
drawnow
3 件のコメント
参考
カテゴリ
Help Center および File Exchange で Image Processing Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!