2

我目前正在研究项目或研究指南/教程。我必须确定三个不同的叶子物种,并且每个使用 100 个样本(具体来说是 300 个),我的教授要求我在使用上传的 100 个样本对系统中上传的图像进行分类时暗示 K-最近邻算法数据库作为参考。

我已经为系统完成了样本的上传和图像处理,但我仍然需要应用 KNN 算法对它们进行分类,有什么建议或分步教程吗?

是否需要研究编码算法,或者是否有现有的库可以轻松地将KNN 应用于 C# 语言的图像分类?每个叶子有 100 个图像样本就足够了吗?

更多信息:martijin_himself 的回答

是的,我说的是树叶。嗯,一个问题是,唯一要考虑的特征是树叶的形状。忽略其他特征,如颜色、大小等。而且我不确切知道何时或如何提取这些“特征向量”,将它们放在哪里以及如何将图像样本用作要分类的叶子的参考

在系统的图像处理部分,对图像进行二值化、斑点处理,使图像只考虑其形状特征。因此,我在数据库中上传的所有样本也是如此。如果我缺少答案所需的信息,我感到非常抱歉。请多多包涵。

提前致谢!:)

4

2 回答 2

6

如果我理解正确,您有一个包含 300 张图像的训练集,每个类别(或标签)有 100 张。

首先,您必须定义特征向量,这是您认为对图像分类很重要的一组图像特征或属性。如果您在谈论(树)叶子,一个特征可能是图像中的颜色值?

第二步是定义一个计算特征向量之间距离的距离函数。例如,带有大量红色的图像与带有大量绿色的图像的距离会更大。您甚至可以权衡特征以反映它们对距离的贡献的重要性。

接下来,您可以选择 k 的值,并测试您的特征向量和距离函数的组合在对具有已知标签的训练集的图像进行分类方面的表现如何。这称为交叉验证。如果您的特征向量和距离函数表现不佳,您可能选择了不代表该类的属性(例如图像的大小)。

在 c# 中实现这一点时,您可以为每个图像或类似的东西创建一个 FeatureVector 类,并且可能实现 IComparable(或类似)接口来计算与某个已知样本的距离函数。然后,您可以简单地创建一个列表并对其进行排序。这只是一个建议。

于 2011-02-09T17:51:31.337 回答
0

结果,我将图像分为两部分(顶部和底部)。但是我有三个特征向量(叶子的面积、顶部的面积和底部的面积)。与数据库中的所有样本相同。

因此,考虑到我拥有的三个特征向量,我设法通过计算它们的距离/s(欧几里得、w/c 包含在 K-NN 算法中)将 K-NN 算法应用于我的研究,并根据用户对它们进行分类-定义的 K 值。因此,结果以百分比表示。

谢谢各位帮忙^_^

于 2011-03-03T14:40:35.443 回答