与 SIFT 匹配(概念)
我有两个现实世界的图像。 (重要)我大约知道一个现实世界到另一个现实世界的转变。由于纹理问题,我在两个图像之间没有得到足够的匹配。如何使用 SIFt 将转换信息考虑在内以获得更多且正确的匹配。 任何想法都会有所帮助。
I have two images of real world. (IMPORTANT)I approximately know transformation of one real world to another. Due to texture problem I don't get enough matches between two images. How can I bring transformation information into account to get more and correct matches by using SIFt.
Any idea will be helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您是否尝试过其他替代方案?您确定 SIFT 就是答案吗?首先,OpenCV 提供 SIFT 等工具。 (目前,我对 OpenCV 的评价还不够高)。
如果我要解决这个问题,我会首先尝试:
如果您仍然想查看 SIFT 或 SURF,OpenCV 也提供这些功能。
Have you tried other alternatives? Are you sure SIFT is the answer? First, OpenCV provides SIFT, among other tools. (At the moment, I can't speak highly enough of OpenCV).
If I were solving this problem, I would first try:
If you still want to look at SIFT or SURF, OpenCV provides those capabilities, as well.
如果您知道变换,则应用变换,然后将 SURF/SIFT 应用于变换后的图像。这是在大的视角变化中扩展特征描述符/匹配器的鲁棒性的一种标准方法。
If you know the transform, then apply the transform and then apply SURF/SIFT to the transformed image. That's one standard way to extend the robustness of feature descriptors/matchers across large perspective changes.
还有另一种选择:
在 sift 参数中,对比度阈值设置为 0.04。如果您减少它并将其设置为较低值(0.02,0.01),SIFT将找到更多足够的匹配:
SIFT(int nfeatures=0, int nOctaveLayers=3, double contrastThreshold=0.04,双边缘阈值=10,双西格玛=1.6)
There is another alternative:
In sift parameters, Contrast Threshold is set to 0.04. If you reduce it and set it to a lower value ( 0.02,0.01) SIFT would find more enough matches:
SIFT(int nfeatures=0, int nOctaveLayers=3, double contrastThreshold=0.04, double edgeThreshold=10, double sigma=1.6)
我认为第一步是尝试使用 SIFT 算法的设置来找到针对您的问题的最佳效率。
更有效地使用 SIFT 的另一种方法是将颜色信息添加到 SIFT。因此,您可以将描述符中使用的点的颜色信息(RGB)添加到其中。例如,如果您的描述符大小为 10x128,则表明您在每个描述符中使用 10 个点。现在您可以提取并添加三列并将大小设置为 10x(128+3) [每个点的 RGB]。这样SIFT算法就会更加高效。但请记住,您需要对描述符应用权重,并使最后三列比其他 128 列更强。实际上我不知道你的情况下图像如何。但这个方法对我帮助很大。您可以看到,这种修改使得 SIFT 成为比以前更强的方法。
类似的实现可以在此处找到。
The first step I think is to try with the settings of the SIFT algorithm to find the best efficiency with respect to your problem.
One another way to use SIFT more effectively is adding the COLOR information to SIFT. So you can add the color information (RGB) of the points which are being used in the descriptor to it. For instance if your descriptor size is 10x128 then it shows that you are using 10 points in each descriptor. Now you can extract and add three column and make the size 10x(128+3) [R-G-B for each point]. In this way the SIFT algorithm will work more efficient. But remember, you need to apply weight to your descriptor and make the last three columns be stronger than the other 128 columns. Actually I do not know in your case how the images are. but this method helped me a lot. and you can see that this modification makes SIFT a stronger method than before.
A similar implementation can be find here.