gpt4 book ai didi

python - 用鱼眼(等距)立体校正重新映射后,仅裁剪为有效像素吗?

转载 作者:行者123 更新时间:2023-12-02 17:27:21 31 4
gpt4 key购买 nike

我有两个水平偏移的相机,并在针孔等效模型(失真系数k1, k2, k3, k4)下使用Kalibr获取了它们的校准参数(相机矩阵和失真系数,以及它们之间的转换)。

我想使用openCVs cv.fisheye.stereoRectify 为每个摄像机创建新的投影矩阵,我可以将它们输入 cv.fisheye.initUndistortRectifyMap ,然后输入 cv.remap 来校正和不失真每个图像。

不幸的是,即使将fisheye.stereoRectify中的balance参数设置为0,remap ed图像仍会向其弯曲黑色像素。我想裁剪每个图像,以使两个未失真的相机图像中都不存在无效像素。

我看到标准的 cv.stereoRectify 函数具有一个执行此操作的alpha参数。但似乎cv.fisheye.stereoRectify没有此参数。因此,我想复制其功能。
cv.stereoRectify似乎使用了radtan失真模型(失真参数k1, k2, p1, p2),因此我不认为可以轻松交换该函数,因为我没有p1p2

我的管道的摘要如下:

R1, R2, P1, P2, Q = cv2.fisheye.stereoRectify(mtx_right, dist_right, 
mtx_left, dist_left,
(960,1280), R, tvec,
flags=cv2.CALIB_ZERO_DISPARITY,
balance= 0.0, fov_scale=1)

map1_right, map2_right = cv2.fisheye.initUndistortRectifyMap(mtx_right, dist_right,
R1, P1[0:3, 0:3],
(1280, 960), cv2.CV_16SC2)

map1_left, map2_left = cv2.fisheye.initUndistortRectifyMap(mtx_left, dist_left,
R2, P2[0:3, 0:3],
(1280, 960), cv2.CV_16SC2)

undistorted_right = cv2.remap(img_rgb_right, map1_right, map2_right,
interpolation=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT)
undistorted_left = cv2.remap(img_rgb_left, map1_left, map2_left,
interpolation=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT)

是否有一种简单的方法来获得与oj​​it_code在传统 alpha中产生的功能相同的功能? cv.stereoRectify似乎很接近,但不能完全切断无效像素。

当前输出( balance=0缩小一点)
fisheye.stereoRectify

目的是使两个图像都只显示绿色框中的内容(如果不清楚,则以相同的尺寸显示,以较小的有效像素矩形为准):

goal

最佳答案

这是我将在Imagemagick中使用-trim进行操作的方式。我注意到,-trim可以跟踪修剪后相对于修剪前的位置的左上角的偏移量(通过取消+ repage,可清除该几何信息)。因此,我修剪了每张图像并保持追踪。然后,将修剪的图像分别放置在黑色背景中,然后并排附加两个结果,然后再次修剪黑色。

由于未提供原件,因此我从提供的图像中剪下了图像。

剩下:

enter image description here

对:

enter image description here

magick left.png -format "%wx%h" -write info: -fuzz 15% -trim \
-fuzz 5% -define trim:percent-background=0 \
-define trim:background-color=black -trim left_im_trim.png

magick right.png -format "%wx%h" -write info: -fuzz 15% -trim \
-fuzz 5% -define trim:percent-background=0 \
-define trim:background-color=black -trim right_im_trim.png


magick \
\( left_im_trim.png -set page "%wx+0+%Y" -background black -flatten \) \
\( right_im_trim.png -set page "%wx+0+%Y" -background black -flatten \) \
-background black +append \
-define trim:percent-background=0 \
-define trim:background-color=black \
-trim +repage left_right_trim_append.png

左修剪:

enter image description here

右修剪:

enter image description here

追加并再次修剪:

enter image description here

我将上面的3个命令分开放置,以便可以看到结果。但它们都可以组合成1个长命令行。

关于python - 用鱼眼(等距)立体校正重新映射后,仅裁剪为有效像素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58349762/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com