我目前正在研究项目或指导/指导我的研究。我必须确定三种不同的叶子,并且每种都使用100个样本(300只是为了具体),我的教授要求我暗示K-Nearest Neighbor算法使用上传的100个样本对系统中上传的图像进行分类。数据库作为参考。
我已经为系统上传了样本和图像处理,但我仍然需要应用KNN算法对它们进行分类,任何建议或分步教程?
是否需要研究编码算法,或者是否有现有的库可以在C#语言的图像分类中轻松应用 KNN?并且每个叶子种类有足够的100个图像样本?
更多信息:来自martijin_himself答案的回复
是的,我说的是树叶。嗯,问题是,唯一要考虑的特征是树叶的形状。忽略其他功能,如颜色,大小等。我并不确切知道何时或如何提取这些“特征向量”,将它们放在何处以及如何将图像样本用作叶子的分类参考
关于系统的图像处理部分,图像经历二值化和斑点处理,使图像仅考虑其形状唯一特征。因此,我在数据库中上传的所有样本都是如此。如果我缺乏答案所需的信息,我感到非常抱歉。请多多包涵。
提前致谢! :)
答案 0 :(得分:5)
如果我理解正确,你有一套300张图片,每个班级(或标签)100张。
首先,您必须定义特征向量,这是一组您认为在分类图像时很重要的图像特征或属性。如果你在谈论(树)叶子,一个特征可能是图像中的颜色值?
第二步是定义一个计算特征向量之间距离的距离函数。例如,具有大量红色的图像与具有大量绿色的图像具有更大的距离。你甚至可以权衡这些特征,以反映它们对距离的重要性。
接下来,您可以选择k的值,并测试特征向量和距离函数的组合执行情况,以便为具有训练集的已知标签的图像进行分类。这称为交叉验证。如果您的特征向量和距离函数表现不佳,您可能选择了不属于该类的属性(例如图像的大小)。
在c#中实现它时,您可以为每个图像或类似的东西创建一个FeatureVector类,并且可以实现IComparable(或类似)接口来计算某些已知样本的距离函数。然后,您可以简单地创建一个List并对其进行排序。这只是一个建议。
答案 1 :(得分:0)
结果,我将图像分成两个部分(顶部和底部)。但我有三个特征向量(叶子的面积,它的顶部区域,以及它的底部区域)。与数据库中的所有样本相同。
因此,考虑到我拥有的三个特征向量,我设法通过计算它们的距离/ s(eauclidean,w / c包含在K-NN算法中)将K-NN算法应用于我的研究并基于它们进行分类在用户定义的K值上。因此,结果以百分比表示。
感谢帮助人员^ _ ^