2013-06-25 25 views
1

我想根据形状将图像分为两类。为此,我用SVM分类器使用了傅里叶描述符。我的问题是傅立叶描述符的长度取决于边界点的数量,因此各种图像的描述符的长度是不同的。但是对于训练SVM,我需要带有描述符的训练矩阵作为矩阵的行(cv :: Mat)。我正在使用openCV在C++中实现它。我该怎么做?我应该:
1.pad剩余描述符来最长的描述符的长度与零
2.sample唯一的固定点的数量从边界支持向量机的傅立叶描述符实现,用于基于形状的对象类识别

否则建议我的正确途径。

+0

你能分享一下你用什么方法来取样一个固定数量的点以及它的工作效果如何?例如,您是如何选择要保留哪些点的? – Kittenmittons

回答

3

在这种情况下,最好的办法是从边界采样固定数量的点,以便您的输入矢量长度相等。填充是一个糟糕的主意,因为通过这样做,您可以隐式更改填充点与非填充点之间距离的定义。

+0

谢谢Marc.I我还有一个疑问。在边界点(x + jy x-real y-imaginary(x,y) - 坐标的坐标)上应用dft后,我所得到的是一个双通道Mat,它是Mat描绘复杂的价值。但支持向量机只采用单通道浮点矩阵作为训练数据。我应该将复数的幅度作为单通道实值描述符,还是应该将描述符的虚数部分(即第2通道)复制到第一个将原始列长加倍垫和减少1频道或我需要做什么? – user2442331

+0

“FD的旋转不变性是通过忽略相位信息和仅取得FD的幅度值来实现的。” - 正如研究论文所写的那样。这是否意味着我只需要处理我所具有的复数描述符值的大小,这也将解决将2通道cv :: Mat转换为训练SVM的单通道的问题。 – user2442331

+0

@ user2442331我不知道你的问题的具体情况,但我想忽略你的数据的复杂部分是一个坏主意。如你所建议的那样,你确实可以为每个复数使用两个输入,或者可以使用幅度+相位(每个复数也输入两个输入)。关于研究报告:这一切都取决于其假设和应用。最好尝试两种方法,看看最适合你的是什么。 –