我在这里找到了一些叶子的例子。
这是我解决问题的尝试。在我找到的图像中,背景是完全黑色的。如果您的图像不是这样,您应该使用 Otsu 的阈值方法。
根据您的图像,我假设只能有 3 种类型的叶子:
这个想法是进行blob分析。我使用开放的形态学操作来分离叶子。如果打开后只有一个斑点,我认为它不是复合的。如果叶子不是复合的,我会分析斑点的坚固性。不够坚固意味着它们有裂片。
这里有些例子:
function IdentifyLeaf(dirName,fileName)
figure();
im = imread(fullfile(dirName,fileName));
subplot(1,3,1); imshow(im);
% thresh = graythresh( im(:,:,2));
imBw = im(:,:,2) > 0;
subplot(1,3,2);imshow(imBw);
radiusOfStrel = round( size(im,1)/20 ) ;
imBwOpened = imopen(imBw,strel('disk',radiusOfStrel));
subplot(1,3,3);imshow(imBwOpened);
rpOpened = regionprops(imBwOpened,'Area');
if numel(rpOpened)>1
title('Pinnately Compound');
else
rp = regionprops(imBw,'Area','Solidity');
%Leave only largest blob
area = [rp.Area];
[~,maxIndex] = max(area);
rp = rp(maxIndex);
if rp.Solidity < 0.9
title('Pinnately Lobed');
else
title('Pinnately Veined');
end
end
end