C# 基于人工神经网络的目标识别

C# 基于人工神经网络的目标识别,c#,visual-studio-2010,emgucv,C#,Visual Studio 2010,Emgucv,我有一个关于神经网络输入的问题 我想识别一种叶子 我有3000张不同大小和角度的图片。我正在使用emgucv和VisualStudio2010C 首先,我将所有训练数据转换为灰度,然后将灰度图像转换为二值图像。但为了识别树叶,我决定使用一些基于形状的方法 这是个好主意吗?理想的做法是以矩阵的形式输入数据,无论是RGB、灰度还是黑白矩阵,3000幅图像中的每一幅都应转换为这种数据格式。只是不用担心形状,也就是说:左外周长只是颜色a和颜色B之间的一系列连续局部差异(隐藏层处理这个问题) 你能更具体地

我有一个关于神经网络输入的问题

我想识别一种叶子

我有3000张不同大小和角度的图片。我正在使用emgucv和VisualStudio2010C

首先,我将所有训练数据转换为灰度,然后将灰度图像转换为二值图像。但为了识别树叶,我决定使用一些基于形状的方法


这是个好主意吗?

理想的做法是以矩阵的形式输入数据,无论是RGB、灰度还是黑白矩阵,3000幅图像中的每一幅都应转换为这种数据格式。只是不用担心形状,也就是说:左外周长只是颜色a和颜色B之间的一系列连续局部差异(隐藏层处理这个问题)


你能更具体地说明你为什么选择你的方法吗?尝试了解有关为训练NN准备图像的信息。您还可以以java为例,了解如何在RGB和形状基础上准备图像

我使用神经网络结合EMGU进行手写数字识别,也许它可以帮助你

这是一个有监督的分类问题,因此您需要定义3件事(它们将影响识别的质量):1。班级,2。例3。特征

  • 您必须定义类(在我的例子中,我有10个类:“1”、“2”、“3”、…、“9”、“0”)。在您的案例中,您可以有2个类(“您想要识别的叶子类型”VS“其他叶子”)或N个类(“您想要识别的叶子类型”VS“另一种”VS“另一种”…)

  • 然后你需要每节课的例子来学习。在我的例子中,我每堂课使用10000张图片

  • 最后,您需要提取特征。通常我使用形状(泽尼克或胡的时刻)、颜色(颜色时刻)和纹理(塔穆拉、加博…)。您还可以直接使用图像的像素值作为输入。如果特征对旋转和缩放不稳定,则规范化图像(或图像内容)的大小和方向可能是一个好主意


  • 哦,是的。!我读了你给我的链接!最简单的方法是!!将所有图像转换为灰度,然后转换为二进制图像,每个像素都将作为ann的输入,对吗。我的图像有640x480个,我应该调整到20x20吗?有没有办法一次转换3000个图像?因为一个一个的转换是浪费时间的!图像越小,NN的结果越好,始终建议将用于训练的图像尺寸缩放到相同的测试尺寸,以避免可能的问题。使用相同的颜色模式和图像尺寸进行训练和识别。如果颜色对你来说不重要,那么就使用黑白,因为训练速度更快。对于转换,如果是一段代码,那么你“一个接一个”使用的是什么?试着用它批量处理图像。此线程提供了如何执行此任务,此线程对您非常有帮助。只需在一个大for循环中插入代码:)噢!!例如,我有一个包含叶子和背景的图像!但叶子并没有占据所有的图像,所以在这种情况下,我必须裁剪图像,以便叶子占据所有的图像,我是正确的!!首先,我将使用像素值作为输入。!我定义了2个类别,这是一个我想重新命名的叶子,而不是一个叶子(我给出一个包含叶子的图像,NN必须告诉我“那是一片叶子”,如果我给出包含岩石的图像,NN必须告诉我“那不是一片叶子”)!你说的方向正常化是什么意思?用不同角度的不同图像训练神经网络不是更好吗?如果你想识别的对象可以有不同的方向,你有3种解决方案:1。学习几个方向的图像,2。提取对旋转鲁棒的特征(如SIFT、Hu等)或3。通过预处理“规范化”方向,即处理图像,以确保学习和训练图像具有相同的方向。嗯,我决定使用第一种解决方案!你能再给我解释一个问题吗?我之前说过,如果我有两张10x10的图像,我会使用图像的每个像素作为ANN fo示例的输入。输入应为10x10=100x2图像=200。在这种情况下,我有200个输入,对吗?不,NN一次识别一个图像。如果要识别两幅图像,应使用NN两次。如果您的图像有10x10像素,您的输入有100个特征/尺寸。您应该检查mmm,例如,如果安识别出一支钢笔,我如何在钢笔所在的位置绘制一个矩形??