min{(th_vec - theta)^2 + (range - r)^2}
这会在外部嵌套循环中产生一个嵌套的for循环,因此我的复杂度为O(N^4)。一个512x512的图像需要整整一分钟才能完成。当然,这样的复杂度不能使用,所以我想知道是否有任何更快的算法来做到这一点?
我有这个图像和这两个向量。图像的X轴是角度,而图像的Y轴是距离中心的长度。角度始终为0-2pi,范围从0到r_max。
谢谢你们的帮助。
编辑:范围从0到r_max,而不是从-r_max到r_max,如之前所述。我看到有一些误解。我使用正常的反向转换,即:
r=sqrt(x^2 + y^2); theta=atan2(y,x);
问题是我必须先将x和y值转换为x'和y'值,因为网格在结果图像中从-r_max到r_max,但在数据中是以像素为单位的。所以我有一个512x512的图像,但r_max可能是3.512之类的东西。因此,我必须将每个像素值转换为网格值,然后找到r和theta值。当我找到r和theta值时,我必须遍历两个向量,range和th_vec,以查找与原始图像匹配的像素:
min{(range - r)^2 + (th_vec - theta)^2}
这使得我的复杂度为O(n^4),因为th_vec和range向量的大小与图像相同。因此,如果我有一个512x512元素的正方形矩阵,我必须遍历68 719 476 736个元素,这非常慢。所以我想知道是否有更快的算法?我无法更改输入数据,所以据我所知,如果您不从三角测量等开始,这是唯一的方法,但在记忆时间上这太昂贵了。