相机标定(Camera Calibration)

news2024/9/17 9:00:51

什么是 相机标定(Camera Calibration)?

相机标定(CameraCalibration)是确定相机内部参数(如焦距、光学中心、畸变系数等)和外部参数(如相机在世界坐标系中的位置和姿态)的一种过程

在这里插入图片描述

相机标定的主要内容

内参数(Intrinsic Parameters):

焦距(focal length):相机镜头的焦距。
主点(principal point):图像中心(光学中心)的坐标。
畸变系数(distortion coefficients):描述相机镜头的畸变,通常包括径向畸变和切向畸变。

外参数(Extrinsic Parameters):

旋转矩阵(rotation matrix):描述相机坐标系相对于世界坐标系的旋转。
平移向量(translation vector):描述相机坐标系相对于世界坐标系的平移。

相机标定的方法

棋盘格法(Checkerboard Method):

最常用的方法,通过拍摄多个角度下的棋盘格图片,利用棋盘格的几何特性来确定相机的内外参数。

标定板法(Calibration Board Method):

使用特定设计的标定板,如圆点阵列或条纹板,通过拍摄标定板的多张图片进行标定。

单点标定法(Single Point Method):

通过移动一个已知位置的点在相机视野中的位置变化来进行标定。

标定步骤

图像采集:

使用相机拍摄多张包含标定图案(如棋盘格或标定板)的图像,图像应覆盖不同的角度和位置。

特征点提取:

在每张图像中,检测并提取标定图案上的特征点(如棋盘格的角点)。

参数估计:

使用特征点的图像坐标和实际坐标,通过算法(如Tsai’s两步法、Zhang’s自标定法)估计相机的内参数和外参数。

非线性优化:

使用非线性优化算法(如Levenberg-Marquardt算法)进一步优化估计的参数,以最小化重投影误差。

畸变校正:

根据畸变系数,校正图像中的畸变,获取校正后的图像。

标定工具和软件

OpenCV:

一个开源的计算机视觉库,提供了丰富的相机标定函数,如cv2.findChessboardCorners、cv2.calibrateCamera等。

MATLAB:

提供了Camera Calibration Toolbox,可以方便地进行相机标定和畸变校正。

ROS(Robot Operating System):

提供了相机标定包camera_calibration,适用于机器人视觉系统。

示例代码(使用OpenCV)

import cv2
import numpy as np
import glob

# 设置棋盘格尺寸
chessboard_size = (9, 6)
frame_size = (640, 480)

# 设置标定板世界坐标系中的三维点
objp = np.zeros((chessboard_size[0] * chessboard_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)

objpoints = []  # 世界坐标系中的三维点
imgpoints = []  # 图像平面的二维点

# 读取棋盘格图像
images = glob.glob('calibration_images/*.jpg')

for image in images:
    img = cv2.imread(image)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 查找棋盘格角点
    ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)
    
    if ret:
        objpoints.append(objp)
        imgpoints.append(corners)
        
        # 绘制并显示角点
        cv2.drawChessboardCorners(img, chessboard_size, corners, ret)
        cv2.imshow('img', img)
        cv2.waitKey(500)

cv2.destroyAllWindows()

# 标定相机
ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, frame_size, None, None)

print("Camera matrix: \n", camera_matrix)
print("Distortion coefficients: \n", dist_coeffs)

# 畸变校正
for image in images:
    img = cv2.imread(image)
    h, w = img.shape[:2]
    new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(camera_matrix, dist_coeffs, (w, h), 1, (w, h))
    
    # 畸变校正
    dst = cv2.undistort(img, camera_matrix, dist_coeffs, None, new_camera_matrix)
    
    # 裁剪图像
    x, y, w, h = roi
    dst = dst[y:y+h, x:x+w]
    
    cv2.imshow('undistorted image', dst)
    cv2.waitKey(500)

cv2.destroyAllWindows()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马头条vue2.0项目实战(三)——个人中心功能的实现

1. Tabbar 处理 通过分析页面,可以看到,首页、问答、视频、我的 都使用的是同一个底部标签栏,我们没必要在每个页面中都写一个,所以为了通用方便,我们可以使用 Vue Router 的嵌套路由来处理。 父路由:一个…

激发潜能,Vatee万腾平台驱动企业持续发展

在当今这个日新月异的商业环境中,企业要想保持竞争力并实现持续发展,就必须不断挖掘自身潜能,探索新的增长点。而Vatee万腾平台,正是这样一位能够激发企业潜能、驱动其持续发展的强大伙伴。 一、智能化赋能,解锁企业潜…

了解ISO 22301:业务连续性管理的关键

在当今全球化和复杂化的商业环境中,企业面临着各种潜在的风险和灾难,这些可能对其运营和声誉造成严重影响。为了有效地应对这些挑战并保障持续经营,国际标准化组织(ISO)引入了ISO 22301标准,这是一项专注于…

智能制造与工业物联网CC2530——定时器查询和中断

一、项目目的: 熟悉 ZigBee 模块相关硬件接口。使用 IAR 开发环境设计程序,学习 CC2530 定时器的使用,利用 CC2530 的定时器 T1 查询方式控制 LED 周期性闪烁。 二、项目原理: LED及按键原理图,如下图所示&#xff…

使用“阿里云人工智能平台 PAI”制作数字人

体验 阿里云人工智能平台 PAI PAI-DSW免费试用 https://free.aliyun.com/?spm5176.14066474.J_5834642020.5.7b34754cmRbYhg&productCodelearn https://help.aliyun.com/document_detail/2261126.html 体验PAI-DSW https://help.aliyun.com/document_detail/2261126.…

一文详解香港机房服务器干什么用的

香港机房服务器干什么用的?香港机房服务器是用于数据存储和备份、网络服务、数据处理与分析、云计算服务、游戏托管服务、其他服务等。香港机房服务器在现代互联网业务中扮演着至关重要的角色,其主要用途可以归纳为以下几个方面: 1、数据存储…

卡拉OK歌唱比赛活动策划方案

一、活动详细策划 (一)、前期工作准备 1、制定详细的策划方案、比赛流程,通知稿。 2、收集各参赛选手详细资料在选手上台前展示出,让各评委及嘉宾对选手有个初步认识。 3、各工作组准备好相关道具(音响、无线话筒、低…

数据大脑智慧工厂数据平台建设方案(可编辑60页PPT)

引言:随着工业4.0时代的到来,智能制造已成为推动产业升级的核心引擎。为了进一步提升生产效率、优化资源配置、实现精准决策与个性化定制,构建一套高效、智能的数据大脑智慧工厂数据平台显得尤为重要。 方案介绍: 在数字化转型的…

05.FreeRTOS任务挂起与恢复

05. FreeRTOS任务挂起与任务恢复 1. FreeRTOS 挂起和恢复任务相关 API 函数 函数描述vTaskSuspend()挂起任务vTaskResume()恢复被挂起的任务xTaskResumeFromISR()在中断中恢复被挂起的任务 函数vTaskSuspend() 此函数用于挂起任务,若使用此函数,需要在…

【Docker】Namespace 空间隔离实战

一、实战目的 了解隔离能力并不是 Docker 提供的,而是操作系统内核提供基本能力。 二、基础知识 1、dd 命令详解 Linux dd 命令用于读取、转换并输出数据。 dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、…

直流电表常见的应用有哪些

直流电表作为电力系统中不可或缺的计量工具,其应用广泛且多样化。以下是对直流电表常见应用的详细归纳: 一、新能源发电系统 1. 太阳能光伏发电 应用背景:太阳能光伏发电系统通过太阳能电池板将光能转化为直流电能。直流电表在这一系统中扮…

浪潮NF5280M4虚拟磁盘OFFLINE和磁盘状态为“Frn-Bad”与“UB”故障处理

客户托管设备的机房异常断电,导致6台浪潮NF5280M4的系统无法访问,系统所在的RAID组中的2块磁盘全部亮故障灯。 通过设备管理界面检查,发现逻辑磁盘处于Offline状态: 物理磁盘也处于Offline状态: 进入BIOS RAID配置…

介绍几种 iutils.dll丢失的解决办法,iutils.dll文件详细介绍

电脑中经常会出现 iutils.dll文件丢失的情况,所以如果电脑中缺失 iutils.dll文件会让大家很苦恼,那么 iutils.dll丢失有什么解决办法呢?今天就给大家介绍几种 iutils.dll丢失的解决办法。 1. iutils.dll 文件的来源 iutils.dll 是一个动态链…

npm 修改 淘宝源

aliyun ECS npm 源也不顺畅了,哎 😑 npm config get registrynpm config set registry https://registry.npmmirror.com喜欢或对你有帮助,点个赞吧,自己先点个嘿嘿。 有错误或者疑问还请评论指出。 我的个人网站 点击访问 hongw…

暑假时光的趣味新选择:《米小圈漫画历史》的魅力探秘

当暑假的炎炎夏日来临,许多家长都会面临一个共同的挑战:如何让孩子远离手机屏幕,找到既有趣又有教育意义的活动。作为一名父母,我被这个问题所困扰。看着孩子一整天沉浸在电子设备中,我深知这不仅会影响他们的视力&…

web程序员转大模型岗位,零基础入门到精通非常详细,收藏我这一篇就够了

从Web程序员转型到大模型岗位,需要掌握一系列新技能和知识。以下是一个详细的攻略: 了解大模型基础: 学习大模型的基本概念,如Transformer架构、自注意力机制等。 阅读相关论文,如“Attention is All You Need”等。 …

Debug-019-git reflog的两种使用场景

前情:最近在开发项目中对版本管理有了新的理解,感觉在这方面有了新的收获。同时学习了一个新的git指令:git reflog 实际了解之后,发现这个指令不是很常用,但是对于特定的场景的话它还是非常比较方便 这里我列举两种我…

使用 LangChain 开发 LLM 应用(3):记忆

注: 本文是基于吴恩达《LangChain for LLM Application Development》课程的学习笔记;完整的课程内容以及示例代码/Jupyter笔记见:LangChain-for-LLM-Application-Development; 课程大纲 目前 LLM 基本上都有最大 Token 的限制,即…

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享_哔哩哔哩_bilibili 非限定性定语从句,使用逗号和which、动名词搭配使用, 尽量避免使用被动语态。 obviously- 使用clearly,apparently感觉上更好。 In this study/work 后面的交…

C++重载左移运算符

通过重载左移运算符&#xff0c;可以实现cout << p;直接输出类对象的各个属性。 其只能使用全局函数重载。 注意cout的定义如下&#xff1a; _EXPORT_STD extern "C" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream cout; 也就是说我们一直用来输出的c…