colmap undistorted images

发现colmap结束前后的图片分辨率会发生改变。例如输入时1920×1080输出是2566×1688.
参考colmap官方repo的issue710issue1100,发现是因为colmap在去畸变的过程中会改变图片的分辨率,issue2282中说可以通过把参数–min_scale 1.0设置为保证去畸变前后的图片分辨率不变。

另一个issue采用了另一个做法,尽管colmap前后的图片分辨率会变,但是可以读取camera.bin重新对图片做畸变。参考代码。但是运行了报错如下:

Image undistortion
==============================================================================
I0426 20:13:51.803295 3169281 undistortion.cc:644] Undistorting image [1/15]
E0426 20:13:51.840860 3169290 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.842965 3169284 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.857650 3169296 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.858551 3169319 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.861701 3169320 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.861874 3169282 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.863216 3169307 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.866176 3169305 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.868665 3169289 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.874071 3169287 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.874647 3169297 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.875243 3169283 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.875304 3169292 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.877285 3169344 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
E0426 20:13:51.884048 3169302 undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
terminate called after throwing an instance of 'std::invalid_argument'
  what():  [undistortion.cc:963] Check failed: distorted_camera.width == distorted_bitmap.Width() (3591 vs. 2560)
*** Aborted at 1714133631 (unix time) try "date -d @1714133631" if you are using GNU date ***
PC: @     0x7f9798ada00b gsignal
*** SIGABRT (@0x3e900305c01) received by PID 3169281 (TID 0x7f97941dc000) from PID 3169281; stack trace: ***
    @     0x7f9799fbb631 (unknown)
    @     0x7f9799f92420 (unknown)
    @     0x7f9798ada00b gsignal
    @     0x7f9798ab9859 abort
    @     0x7f9798e96ee6 (unknown)
    @     0x7f9798ea8f8c (unknown)
    @     0x7f9798ea8ff7 std::terminate()
    @     0x7f9798ea8f7e std::rethrow_exception()
    @     0x55bb9b116761 colmap::PureImageUndistorter::Run()
    @     0x55bb9a9e45a4 colmap::RunImageUndistorterStandalone()
    @     0x55bb9a9a09ef main
    @     0x7f9798abb083 __libc_start_main
    @     0x55bb9a9a797e _start
Traceback (most recent call last):
  File "colmap_undistorted.py", line 81, in <module>
    assert subprocess.call([
AssertionError

发现有点蠢,只要把图片重新过一遍就好了,具体来说比方说我原本有888张图片,然后要重新distorted15张,那就把这15张改成一样的名字替换原本888张中的15张对应名字的图片然后运行以下代码,记得image_undistorter 的所有参数要和之前保持一致(例如前面加了–min_scale那么这里也要加上):

colmap image_undistorter \
    --image_path " + args.source_path + "/input \
    --input_path " + args.source_path + "/distorted/sparse/0 \
    --output_path " + args.source_path + "\
    --output_type COLMAP

后续尝试了一下改变–min_scale的方法发现不work,参考这个github发现min_scale只是限制了去畸变时候缩小的最小范围,但是没有限制去畸变时候放大的范围,如果要输入分辨率和输出分辨率一样那么就需要设置max_scale为1。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值