其傅里叶变换的深度图的相位转换

时间:2016-05-12 15:16:25

标签: c++ math fft

this paper(跳到熊的图像)和this one中所述,“相位转换”深度图的傅里叶变换(像素的亮度与其相关的图片)当物体沿垂直轴旋转时,应向左或向右平移到观察者的距离。

考虑这两个例子(来自链接1):左边是对象的原始深度图,右边是其“相位转换”的傅里叶变换...正如你所看到的,当对象时旋转,FT的一部分被翻译到左侧,这是一个非常实用的功能(请参阅第一个链接以了解原因)......

Example: http://www.androwing.com/webpix/a_09.gif

我一直试图用混合结果复制这种行为。 首先,我需要实现“相位转换”深度图的公式,该图给出(参见链接)作为函数Ph定义为

PH [X,Y] = EXP(I *深度[X,Y])

所以很明显我不得不把它从指数形式变成矩形形式,其中

radius * exp(i * angle)-----> [半径* cos(角度),半径* sin(角度)]

因此,我从标准

修改了我的2D FT应用程序初始化

傅立叶[i,j] .real =(double)GreyImage [i,j]; // GreyImage:byte [0..255]

傅立叶[i,j] .imag = 0

双角=(双)GreyImage [i,j];

傅里叶[i,j] .real = Math.Cos(角度);

傅立叶[i,j] .imag = Math.Sin(角度);

起初结果令人鼓舞......让我们看一个例子(来自第二个链接)

Example2: http://www.androwing.com/webpix/orig_cube.jpg

左边是物体的深度图,中间是FT(幅度),右边是相位转换的FT,其中3个点位于3个平面的中心...... / p>

现在让我们看看使用上面的代码时我的结果是什么......

Example2: http://www.androwing.com/webpix/mytest.jpg

如您所见,如果FT远程相似,则右侧的三角形水平反转。这可以通过反转cos和sin来治愈......

傅里叶[i,j] .real = Math.Sin(角度);

傅里叶[i,j] .imag = Math.Cos(角度);

或通过反转深度图......

双角度= 255.0 - (双)GreyImage [i,j];

但无论如何,周围有一些不匹配...现在让我们试试real depth map(警告:图片NSFW,但我没有找到同一个旋转对象的多个深度图的任何其他示例)

Example2: http://www.androwing.com/webpix/depth-map-test.jpg

在这种情况下(它应该具有与熊示例类似的结果)我的相位转换实现是完全错误的,因为FT保持居中,并且不会通过对象的旋转向左或向右平移。

所以我的问题是:我对相位转换的编码有什么问题?

(我已经尝试过几乎所有的想象和解释都可以决定,比如将深度图缩放为弧度或以任何可能的方式使用Math.exp ......但没有成功)

0 个答案:

没有答案