标签: image-stitching

将多张图像对齐成一张图像?

有什么好方法可以将可能具有不同旋转,曝光等但具有相同背景或其他固定参考的图像对齐在一起?

Adobe Photoshop可以通过其“ Photomerge”功能实现此目的。

如何以编程方式执行此操作?是否有开放源代码应用程序?

image-processing alignment template-matching image-stitching

5
推荐指数
1
解决办法
3233
查看次数

是否有任何Autopano Server替代或自动全景拼接/视频全景开源?

我没有找到拼接图像或视频制作的任何服务器端全景图.我想要一个开源替代品,但发现任何.我只是不想通过自己开发所有这些的麻烦,但付费软件通常是封闭源,而不是非常灵活.

我从iphone的视频软件中看到了一些漂亮的全景,并认为在*nix系统上很容易找到,但没有运气.任何帮助将不胜感激.提前致谢.

server-side video-processing panoramas image-stitching

5
推荐指数
1
解决办法
1422
查看次数

有人可以解释OpenCV Stitcher的参数吗?

我正在尝试减少拼接算法的计算时间.我得到了一些我想按照定义的顺序cv::stitcher.stitch()拼接的图像,但似乎功能试图将每个图像与其他所有图像拼接在一起.

我觉得我可能会在OpenCV Stitcher的参数中找到解决方案.如果没有,也许我必须修改功能或尝试其他方法来减少计算时间.但由于我几乎是初学者,我不知道如何.我知道使用GPU可能是一种可能性,但我现在还没有在Ubuntu上运行CUDA.

如果你能给我一些建议,那就太好了!

OpenCV Stitcher模块的参数:

Stitcher Stitcher::createDefault(bool try_use_gpu) {
Stitcher stitcher;
stitcher.setRegistrationResol(0.6);
stitcher.setSeamEstimationResol(0.1);       
stitcher.setCompositingResol(ORIG_RESOL);    
stitcher.setPanoConfidenceThresh(1);    
stitcher.setWaveCorrection(true);    
stitcher.setWaveCorrectKind(detail::WAVE_CORRECT_HORIZ);    
stitcher.setFeaturesMatcher(new detail::BestOf2NearestMatcher(try_use_gpu));
stitcher.setBundleAdjuster(new detail::BundleAdjusterRay());
Run Code Online (Sandbox Code Playgroud)

来自stitcher.cpp:

https://code.ros.org/trac/opencv/browser/trunk/opencv/modules/stitching/src/stitcher.cpp?rev=7244

opencv image-stitching opencv-stitching

5
推荐指数
1
解决办法
2441
查看次数

OpenCV的拼接模块能够拼接从平行运动相机拍摄的图像吗?

我想知道OpenCV 的拼接(http://docs.opencv.org/modules/stitching/doc/stitching.html)模块是否能够将从平行运动的摄像机拍摄的图像拼接到飞机上被拍照?

我知道通常所有的全景拼接工具都假设摄像机的中心是固定的,而摄像机只能进行平移或俯仰等运动.

我在想是否可以使用这个模块缝合从平行于平面移动的相机拍摄的图像.这个想法是创建一个地面的全景地图.

问候

opencv image-processing panoramas image-stitching opencv-stitching

4
推荐指数
1
解决办法
1455
查看次数

以数学方式将全画幅鱼眼转换为等距柱状投影

我想将全帧鱼眼图像转换为等距柱状图像,这样我就可以用它进行全景拼接。我为此目的使用了 Hugin 和 libpano,它们工作得很好。以下图片已由 Hugin 转换。我想知道可以实现此类或类似转换的数学方程。

原始图像 全画幅鱼眼

转换后的图像

转换后的图像

opencv image-processing fisheye panoramas image-stitching

4
推荐指数
1
解决办法
5141
查看次数

在OpenCV C++中拼接2张图像后去除图像的黑色部分

所以我在 OpenCV C++ 中拼接了 2 个图像,但我知道图像中有一个全黑的部分,想删除它。要走的路是什么?

这是我的图像输出:

在此处输入图片说明

c++ opencv image image-processing image-stitching

4
推荐指数
2
解决办法
641
查看次数

如何在OpenCv中使用单应矩阵拼接两个图像?

我想在 OpenCv 中使用单应矩阵拼接两个全景图像。我找到了 3x3 单应矩阵,但无法拼接两个图像。我必须手动缝合两个图像(没有内置功能)。这是我的代码:

import cv2
import numpy as np

MIN_MATCH_COUNT = 10

img1 = cv2.imread("pano1/cyl_image00.png")
img2 = cv2.imread("pano1/cyl_image01.png")

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)

flann = cv2.FlannBasedMatcher(index_params, search_params)

des1 = np.float32(des1)
des2 = np.float32(des2)

matches = flann.knnMatch(des1, des2, k=2)

goodMatches = []

for m, n in matches:
    if m.distance < 0.7 * n.distance:
        goodMatches.append(m)

src_pts = 0
dst_pts = 0
if …
Run Code Online (Sandbox Code Playgroud)

python opencv computer-vision homography image-stitching

4
推荐指数
1
解决办法
1万
查看次数

使用warpAffine将拼接图像显示在一起而不会中断

我试图通过使用模板匹配将2个图像拼接在一起找到3组点,我通过这些点来cv2.getAffineTransform()获得一个经线矩阵,我将其传递cv2.warpAffine()到对齐我的图像.

然而,当我加入我的图像时,我的大部分仿射图像都没有显示出来.我已经尝试过使用不同的技术来选择点,改变顺序或参数等等,但我只能得到一张瘦弱的图像来显示.

有人可以告诉我,我的方法是否有效,并建议我可能会出错?任何关于可能导致问题的猜测都将非常感激.提前致谢.

这是我得到的最终结果.下面是原始图像(1,2),并且我使用的代码:

编辑:这是变量的结果 trans

array([[  1.00768049e+00,  -3.76690353e-17,  -3.13824885e+00],
       [  4.84461775e-03,   1.30769231e+00,   9.61912797e+02]])
Run Code Online (Sandbox Code Playgroud)

以下是传递给我们的观点cv2.getAffineTransform:unified_pair1

array([[  671.,  1024.],
       [   15.,   979.],
       [   15.,   962.]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

unified_pair2

array([[ 669.,   45.],
       [  18.,   13.],
       [  18.,    0.]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
import cv2
import numpy as np


def showimage(image, name="No name given"):
    cv2.imshow(name, image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return

image_a = cv2.imread('image_a.png')
image_b = cv2.imread('image_b.png')


def get_roi(image):
    roi = cv2.selectROI(image) # spacebar to confirm …
Run Code Online (Sandbox Code Playgroud)

opencv image-stitching

3
推荐指数
1
解决办法
3849
查看次数

Python OpenCV实时图像拼接(n=5)性能优化

我需要即时拼接五个视频流。录制视频的摄像机并排安装在机架上,并且永远不会改变彼此的相对位置。因此单应性矩阵是静态的。

我正在遵循此 github 存储库中的方法:

从中心图像开始,首先缝合到左侧,然后将其余图像缝合到右侧。

该存储库中的代码可以工作,但速度慢得令人痛苦。我已经能够显着提高其性能(系数 300),但拼接五幅图像的全景图仍然需要 0.25 秒(在 2015 年 Macbook Pro 上)。

缓慢的部分:将每个结果应用于cv2.warpPerspective(...)到该点缝合的图像。受此SO 答案的启发,我目前正在通过使用 alpha 通道并混合两个图像来完成此操作。正是这种混合使得缝合速度变慢。

(伪代码:

def blend_transparent(background, foreground):
    overlay_img = foreground[:, :, :3]  # Grab the BRG planes 
    overlay_mask = foreground[:, :, 3:]  # And the alpha plane

    # Again calculate the inverse mask
    background_mask = 255 - overlay_mask

    # Turn the masks into three channel, so we can use them as weights
    overlay_mask = cv2.cvtColor(overlay_mask, cv2.COLOR_GRAY2BGR)
    background_mask = cv2.cvtColor(background_mask, …
Run Code Online (Sandbox Code Playgroud)

python opencv image-stitching

3
推荐指数
1
解决办法
3752
查看次数

使用Python和OpenCV的图像拼接问题

将 24 个拼接图像拼接到下一个第 25 个图像后,我得到如下输出。在此之前,缝合效果很好。

在此输入图像描述

有谁知道为什么/何时拼接输出会这样?这样的输出有什么可能性?这可能是什么原因?

拼接代码遵循标准拼接步骤,例如查找关键点、描述符,然后匹配点,计算单应性,然后扭曲图像。但我不明白为什么会有这样的输出。

拼接的核心部分如下:

detector = cv2.SIFT_create(400)
# find the keypoints and descriptors with SIFT
gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
ret1, mask1 = cv2.threshold(gray1,1,255,cv2.THRESH_BINARY)
kp1, descriptors1 = detector.detectAndCompute(gray1,mask1)

gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
ret2, mask2 = cv2.threshold(gray2,1,255,cv2.THRESH_BINARY)
kp2, descriptors2 = detector.detectAndCompute(gray2,mask2)

keypoints1Im = cv2.drawKeypoints(image1, kp1, outImage = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0,0,255))
keypoints2Im = cv2.drawKeypoints(image2, kp2, outImage = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0,0,255))

# BFMatcher with default params
matcher = cv2.BFMatcher()
matches = matcher.knnMatch(descriptors2,descriptors1, k=2)

# Apply ratio test
good = []
for m, n in …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing computer-vision image-stitching

3
推荐指数
1
解决办法
4055
查看次数

文字的全景拼接

我正在寻找一个好的文本拼接库。我尝试了OpenCVOpenPano。它们都可以在普通照片上很好地工作,但是在文本上却不能。例如,我需要缝合以下3张图像:

第一 第二 第三名

图像之间相互重叠约45%。

如果可以选择使上述库中的一个在文本图像上运行良好,而不是查找另一个库,那将是很好的选择。

  • 我需要该库才能在linux arm上工作。

opencv panoramas image-stitching

2
推荐指数
1
解决办法
1050
查看次数

Python OpenCV Stitcher 类文档

您能否给我一些提示,我在哪里可以找到 Python Stitcher 类的详细文档?

我能够找到示例并实现它们,但我想更多地了解这个类及其功能。

python opencv image-stitching opencv-stitching

2
推荐指数
1
解决办法
920
查看次数

基于内部和外部相机参数计算单应矩阵

我愿意对6个鱼眼相机进行360\xc2\xb0全景拼接。

\n

为了找到相机之间的关系,我需要计算单应性矩阵。后者通常是通过查找图像中的特征并进行匹配来计算的。

\n

然而,对于我的相机设置我已经知道

\n
    \n
  • 固有相机矩阵K,我通过相机校准计算得出。
  • \n
  • 相机外参数 R 和 t。相机方向是固定的并且在任何时候都不会改变。摄像机位于已知直径 d 的圆上,每个摄像机相对于圆偏移 60\xc2\xb0 度。
  • \n
\n

因此,我认为我可以手动计算单应性矩阵,我认为这会产生比执行特征匹配更准确的方法。

\n

在文献中,我找到了以下公式来计算将图像 2 与图像 1 相关联的单应性矩阵:

\n
H_2_1 = (K_2) * (R_2)^-1 * R_1 * K_1\n
Run Code Online (Sandbox Code Playgroud)\n

该公式仅考虑相机之间的旋转角度,而不考虑我的情况中存在的平移向量。

\n

如何将每个摄像机的平移 t 插入到 H 的计算中?

\n

我已经尝试在不考虑平移的情况下计算 H,但由于 d>1 米,图像在全景图中没有准确对齐。

\n

编辑:

\n

根据下面弗朗西斯科的回答,我得到了以下问题:

\n
    \n
  • 校准鱼眼镜头后,我得到了一个尺寸为 1024 x 768 的图像的K焦距矩阵。f=620这被认为是大焦距还是小焦距

    \n
  • \n
  • 我的相机位于一个直径为 1 米的圆上。下面的解释让我很清楚,由于相机之间的这种“大”平移,我对距离它们相对较近的物体产生了显着的重影效果。因此,如果Homography模型不能完全代表相机的位置,是否可以使用其他模型(例如Fundamental/Essential Matrix)进行图像拼接?

    \n
  • \n …

computer-vision homography projective-geometry image-stitching 360-panorama

2
推荐指数
1
解决办法
5525
查看次数