在 C++ 中计算相似图像的偏移/倾斜/旋转
我同时拍摄了多张图像,从同一起始位置指向同一方向。然而,仍然存在轻微的偏移,因为拍摄照片时这些相机并不位于完全相同的位置。我正在寻找一种方法来计算将一个图像与另一个图像匹配所需的最佳平移/剪切/倾斜/旋转,以便它们(几乎)完美地重叠。
这些图像采用 .raw 格式,我一次读取 16 位。
我被建议(由我的不是程序员的雇主[顺便说一句,我是实习生])获取源图像的一部分(不在边缘)并强力搜索具有高像素的相同大小的部分。数据值的相关性。我希望有一种更少浪费的算法。
I have multiple images taken simultaneously pointing at the same direction from the same starting location. However, there is still a slight offset because these cameras were not in the exact same place when the picture was taking. I'm looking for a way to calculate the optimal translation/shear/skew/rotation needed to apply to match one image to another so that they overlay (almost) perfectly.
The images are in a .raw format which I am reading in 16 bits at a time.
I have been suggested (by my employer who is not a programmer [I'm an intern btw]) to take a portion of the source image (not at the edges) and brute-force search for a same-sized portion with a high correlation in data values. I'm hoping there is a less-wasteful algorithm.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个简短的代码,可以实现您想要的功能(我使用 openCV 2.2):
代码:
Here is a short code that does what you want (I use openCV 2.2):
Code:
图像是否是从相同的位置站立拍摄的,但只是旋转了一点,导致它们没有正确对齐?如果是这样,那么图像通过 同应性 相关 - 即投影变换。给定图像之间的一组对应关系(至少需要 4 对),查找单应性的标准方法是使用 DLT 算法。
Are the images taken standing from the same position but you're just rotated a bit so that they're not aligned correctly? If so then the images are related by a homography - i.e. a projective transformation. Given a set of correspondences between the images (you need at least 4 pairs), the standard way to find the homography is to use the DLT algorithm.
使用以下代码避免链接器错误:
Avoid linker errors using the below code: