识别叶片的叶片和凸起

Alo*_*iel 7 matlab image-processing computer-vision object-recognition

我需要一些帮助,我必须做一个关于叶子的项目.

我想通过MATLAB来实现它.

我的输入是一片叶子的图像(带有白色背景),我需要知道关于叶子的两件事:

1)找到叶片(每片叶片的像素):

  • 将叶子放在桌子或工作空间上,您可以在那里检查它.

  • 看看你想要识别的叶子.如果叶子看起来像有手指,这些被认为是叶片.叶子上可以有两到多个叶片.

  • 通过观察叶子下面的静脉来区分羽状叶与掌状叶.如果静脉都来自叶子底部的同一个地方,则认为是掌状裂片.如果它们从一条中心线形成在叶子上的不同位置,则叶片呈羽状叶状.

  • 使用叶字典识别叶的类型.

在此输入图像描述

2)找到大约叶片的凸起数量:

换句话说,找到每片叶子的"肿胀点". 在此输入图像描述

这些是叶子的例子:

在此输入图像描述 在此输入图像描述 在此输入图像描述

And*_*ein 8

我在这里找到了一些叶子的例子.

这是我尝试解决问题的方法.在我发现的图像中,背景是完全黑色的.如果你的图像不是这样,你应该使用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)

  • 我知道希伯来语,我来自以色列:-T TODA! (2认同)