当前被认为是“最好的”是什么? 二维点匹配算法?
我有两个包含(星星的)xy 坐标的列表。 我还可以为每颗恒星附加星等(亮度)。 现在,每颗星星都有随机位置抖动,并且每张图像中可能存在一些额外或缺失的点。 我的问题是,“对于这样的数据集,最好的 2D 点匹配算法是什么?” 我猜想既适用于简单的线性(平移、旋转、缩放)也适用于非线性(例如坐标中的 n 次多项式)。 用点匹配领域的术语来说,我正在寻找能够在带有噪声和杂散点的 2D 点匹配程序之间的枪战中获胜的算法。 可能有不同的“获胜者”,具体取决于是否使用标签信息(幅度)和/或变换仅限于线性。
我知道有很多类 2D 点匹配算法,每个类中都有很多算法(实际上可能总共有数百种),但我不知道哪一个(如果有的话)是被认为是“最好的”或“最标准的”由计算机视觉领域的人们提出。 遗憾的是,我想阅读的许多文章或论文没有在线版本,我只能阅读摘要。 在我确定要实现的特定算法之前,最好听听几位专家的意见,以区分小麦和谷壳。
我有一个使用三角形的工作匹配程序,但它经常失败(约 5% 的时间),因此解决方案转换有明显的扭曲,但没有明显的原因。 这个程序不是我写的,而是来自大约 20 年前写的一篇论文。 我想编写一个性能最强大的新实现。 我假设(希望)该领域已经取得了一些进展,使这一点变得合理。
I have two lists containing x-y coordinates (of stars). I could also have magnitudes (brightnesses) attached to each star. Now each star has random position jiggles and there can be a few extra or missing points in each image. My question is, "What is the best 2D point matching algorithm for such a dataset?" I guess both for a simple linear (translation, rotation, scale) and non-linear (say, n-degree polynomials in the coordinates). In the lingo of the point matching field, I'm looking for the algorithms that would win in a shootout between 2D point matching programs with noise and spurious points. There may be a different "winners" depending if the labeling info is used (the magnitudes) and/or the transformation is restricted to being linear.
I am aware that there are many classes of 2D point matching algorithms and many algorithms in each class (literally probably hundreds in total) but I don't know which, if any, is the consider the "best" or the "most standard" by people in the field of computer vision. Sadly, many of the articles to papers I want to read don't have online versions and I can only read the abstract. Before I settle on a particular algorithm to implement it would be good to hear from a few experts to separate the wheat from the chaff.
I have a working matching program that uses triangles but it fails somewhat frequently (~5% of the time) such that the solution transformation has obvious distortions but for no obvious reason. This program was not written by me and is from a paper written almost 20 years ago. I want to write a new implementation that performs most robustly. I am assuming (hoping) that there have been some advances in this area that make this plausible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您对恒星匹配感兴趣,请查看 Astrometry.net 盲天体测量解算器 和 此处有相关论文。 他们使用四点四边形来解决 Flickr 夜空图片中的恒星排列问题。 查看这次采访。
If you're interested in star matching, check out the Astrometry.net blind astrometry solver and the paper on it here. They use four point quads to solve star configurations in Flickr pictures of the night sky. Check out this interview.
对此没有单一的“最佳”算法。 有许多不同的技术,每种技术在特定数据集和数据类型上都比其他技术效果更好。
我建议的一件事是阅读图像配准简介 Insight Toolkit 的教程。 ITK 支持多种类型的图像配准(这听起来像是您正在尝试的),并且在很多情况下都非常稳健。 他们的大多数用户都在医学领域,因此您必须费力地了解大量医学术语,但算法和代码适用于任何类型的图像(包括 1、2、3 和 n 维图像,不同类型的图像)。类型等)。
There is no single "best" algorithm for this. There are lots of different techniques, and each work better than others on specific datasets and types of data.
One thing I'd recommend is to read this introduction to image registration from the tutorials of the Insight Toolkit. ITK supports MANY types of image registration (which is what it sounds like you are attempting), and is very robust in many cases. Most of their users are in the medical field, so you'll have to wade through a lot of medical jargon, but the algorithms and code work with any type of image (including 1,2,3, and n dimensional images, of different types,etc).
您可以考虑首先仅将算法应用于 N 个最亮的恒星,然后逐步包括其他恒星以细化结果,同时缩小搜索范围。
使用 RANSAC 来增强额外点的鲁棒性也很常见。
You can consider applying your algorithm first only on the N brightest stars, then include progressively the others to refine the result, reducing the search range at the same time.
Using RANSAC for robustness to extra points is also very common.
我不确定它是否有效,但值得一试:
对于每颗恒星,对所有其他恒星进行圆时间射线傅里叶变换(以它为中心)(注意:这不是标准傅里叶变换,而是线时间线)。
圆乘射线的相空间是整数乘直线,但由于我们只有有限的精度,所以你只能得到一个矩阵; 矩阵的维度取决于精度。 现在尝试将矩阵彼此配对(例如使用 L_2 范数)
I'm not sure it would work, but worth a try:
For each star do the circle time ray Fourier transform - centered around it - of all the other stars (note: this is not the standard Fourier transform, which is line times line).
The phase space of circle times ray is integers times line, but since we only have finite accuracy, you just get a matrix; the dimensions of the matrix depend on accuracy. Now try to pair the matrices to one another (e.g. using L_2 norm)
不久前,我在电视上看到一个节目,讲述研究人员如何拍摄鲸鱼的照片,并利用鲸鱼身上的斑点(每条鲸鱼都是独一无二的)来识别每条鲸鱼。 它使用了点之间的角度。 通过使用角度,图像是否旋转、缩放或平移都无关紧要。 这听起来与您对三角形所做的类似。
I saw a program on tv a while ago about how researchers were taking pictures of whales and using the spots on them (which are unique for each whale) to id each whale. It used the angles between the spots. By using the angles it didn't matter if the image was rotated or scaled or translated. That sounds similar to what you're doing with your triangles.
我认为“最好”(最具技术性)的方法是对原始图像和新的线性修改图像进行傅里叶变换。 通过进行一些简单的过滤,应该很容易找出图像相对于旧图像的方向和比例。 此处有关于二维傅里叶变换的描述。
I think the "best" (most technical) way would to be to take the Fourier Transform of the original image and of the new linearly modified image. By doing some simple filtering, it should be easy to figure out the orientation and scale of your image with respect to the old one. There is a description of the 2d Fourier Transform here.