我正在尝试使用傅里叶描述符构建一个简单的系统来识别简单的形状:
我在我的程序中使用快速傅里叶变换的这种实现:(链接如下)
http://www.wikijava.org/wiki/The_Fast_Fourier_Transform_in_Java_%28part_1%29
fft(double[] inputReal, double[] inputImag, boolean direction)
输入是:真实和图像部分(它本质上是边界参数的x,y坐标) 和输出是转换的实数和图像数。
问题:我如何使用输出(变换后的真实,图像)作为我简单形状的不变描述符?
这就是我的想法:
R = sqrt( real^2 + imag^2 )
。 R
除以R[1]
=归一化因子,使其保持不变。 问题是我对于稍微不同的图像(例如应用轻微旋转等)获得了非常不同的R值
换句话说:
我的描述符不是不变的......我认为我在获取R值时做错了。
答案 0 :(得分:8)
首先需要了解傅立叶描述符的一些理论:这是一种非常有趣的技术,但应该正确设计。你想要的是不变性;旋转,平移,甚至仿射变换的不变性。为了与其他傅立叶描述符集进行良好比较,您应该考虑以下事项:
希望这会有所帮助。顺便说一句,用户自己制作的FFT解决方案在我看来并不值得信任。寻找解决方案库。如果使用图像,OpenCV提供傅里叶变换实用程序。
答案 1 :(得分:0)
如果您想要匹配不同的形状,请尝试使用MPEG-7标准中的不同形状描述符。你可能需要一个分类器,看看SVM,Boosting,神经网络...:http://docs.opencv.org/modules/ml/doc/ml.html