Alo*_*iel 7 matlab image-processing computer-vision object-recognition
我需要一些帮助,我必须做一个关于叶子的项目.
我想通过MATLAB来实现它.
我的输入是一片叶子的图像(带有白色背景),我需要知道关于叶子的两件事:
1)找到叶片(每片叶片的像素):
将叶子放在桌子或工作空间上,您可以在那里检查它.
看看你想要识别的叶子.如果叶子看起来像有手指,这些被认为是叶片.叶子上可以有两到多个叶片.
通过观察叶子下面的静脉来区分羽状叶与掌状叶.如果静脉都来自叶子底部的同一个地方,则认为是掌状裂片.如果它们从一条中心线形成在叶子上的不同位置,则叶片呈羽状叶状.
使用叶字典识别叶的类型.
2)找到大约叶片的凸起数量:
换句话说,找到每片叶子的"肿胀点".
这些是叶子的例子:
我在这里找到了一些叶子的例子.
这是我尝试解决问题的方法.在我发现的图像中,背景是完全黑色的.如果你的图像不是这样,你应该使用Otsu的阈值处理方法.
根据你的形象,我假设只有3种叶子:
这个想法是做blob分析.我使用开放的形态学操作来分离叶子.如果开幕后只有一个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
Run Code Online (Sandbox Code Playgroud)