当前位置: 首页 > news >正文

2024年度学习总结

2024年是我学业生涯的结束,是我职业生涯的开始。2024年6月19日我顺利研究生毕业,进入体制内,陆止于此,海始于斯,知识和文化最大的魅力,大概就是教会人谦卑和敬畏。读研的目的不是为了单纯拿到哪个证书,这是一次人生格局的扩展,是完成的一次修行,是思考逻辑能力、技术专业性上、专刊文笔上的一次个人突破,这种突破对于将来的工作发挥至关重要,记录以下2024年的成长,回顾过去,展望未来。我将从工作成长、生活娱乐和身体健康三个方面进行总结。

工作成长生活娱乐身体健康
总结单目相机标定算法
总结双目相机标定算法
总结IMU标定算法
使用ORB-SLAM3运行自制数据集
图像增强技术的总结
改进ORB-SLAM3算法
自学SolidWorks学习总结
Unity实现数字变化
VI-SLAM技术讨论
毕业设计
通过Vxlan实现数据中心
新华三H3C NE网络工程师认证学习
运维工作中对反爬虫的一些思考
信息化建设总结
网络安全对抗
信息系统项目管理师软考学习总结

本课题基于应急管理部重大科技项目“应急救援专用增强现实(AR)智能头盔关键技术和设备研发”,旨在设计出适合用于应急救援专用增强现实(AR)智能头盔的定位算法。
整个系统分为四部分,第一部分是传感器标定部分,对相机和IMU进行联合标定。目的是为得到IMU相机的内外参数,减少图像噪声的影响。第二部分是数据预处理,在IMU 模式下,跟踪线程还有进行 IMU 预积分的计算,以供后续局部地图构建线程视觉结合 IMU 进行局部 BA 优化,将视觉和 IMU 对齐,对 IMU 预积分的传递做了分析,将自适应关键帧阈值算法嵌入跟踪线程,改进初始化的问题。第三部分是采用 RANSAC 算法进行平面拟合,根据 SLAM 模块提供的点云信息计算出最佳平面参数,第四部分是根据 SLAM模块提供的相机位姿将虚拟模型通过透视投影变换渲染至平面。
本系统创新性的针对无GPS信号的情况,研究利用视觉与IMU融合的SLAM技术实现应急救援专用增强现实(AR)智能头盔的自主定位,并搭建一套高鲁棒、低运算负载、高精度的适合于智能头盔的自主定位系统。

import cv2
import numpy as np
import glob# 标定板的大小,标定板内角点的个数
# CHECKERBOARD = (6,9)
CHECKERBOARD = (6,7)
# 角点优化,迭代的终止条件
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)# step1:定义标定板在真实世界的坐标
# 创建一个向量来保存每张图片中角点的3D坐标
objpoints = []
# 创建一个向量来保存每张图片中角点的2D坐标
imgpoints = []# 定义3D坐标:[row,col,z]
objp = np.zeros((1, CHECKERBOARD[0]*CHECKERBOARD[1], 3), np.float32)
objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)# step2:提取不同角度拍摄的图片
# images = glob.glob('./images1/*.jpg')
images = glob.glob('./images2/*.jpg')
images = sorted(images)
for i,fname in enumerate(images):img = cv2.imread(fname) # 读取图片gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # RGB转换成灰度图# step3:计算标定板的角点的2D坐标# 寻找角点坐标,如果找到ret返回True, corners:[col, row],原点在左上角ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE)if ret == True:objpoints.append(objp)# 调用cornerSubpix对2D角点坐标位置进行优化corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)imgpoints.append(corners2)# 绘制寻找到的角点,从红色开始绘制,紫色结束img = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2,ret)cv2.imshow(fname+" succeed", img)else:print(f"第{i}张图,{fname}未发现足够角点")cv2.imshow(fname + " failed", img)cv2.waitKey(1)
cv2.destroyAllWindows()h,w = img.shape[:2]# step4:相加标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)print("相机内参:") # [[fx,0,cx],[0,fy,cy],[0,0,1]]
print(mtx,"\n")
print("畸变参数:") # k1,k2,p1,p2,k3
print(dist,"\n")
print("旋转矩阵:")
print(rvecs,"\n")
print("平移矩阵:")
print(tvecs,"\n")# step5:去畸变
# img = cv2.imread('./images/image_2.jpg')
img = cv2.imread('./images2/left12.jpg')
h, w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))# 使用undistort矫正图像
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
# 图片裁剪
x, y, w, h = roi
dst2 = dst[y:y+h, x:x+w]
print(f"ROI: x:{x},y:{y},w:{w},h:{h}")
cv2.imshow("original image", img)
cv2.imshow("image undistorted1", dst)
cv2.imshow("image undistorted1 ROI", dst2)
cv2.imwrite('./undistorted/img_undistort.png', dst2)# 使用remapping
mapx, mapy = cv2.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w,h), 5)
dst = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR)# crop the image
x, y, w, h = roi
dst2 = dst[y:y+h, x:x+w] # x,宽,y,高
cv2.imshow("image undistorted2", dst)
cv2.imshow("image undistorted2 ROI", dst2)
cv2.imwrite('./undistorted/img_remap.png', dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()# step6:计算重投影误差:
mean_error = 0
for i in range(len(objpoints)):# 使用内外参和畸变参数对点进行重投影imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)error = cv2.norm(imgpoints[i], imgpoints2, cv2.NORM_L2)/len(imgpoints2) # L2范数,均方误差mean_error += errormean_error /= len(objpoints)
print("total error: {}".format(mean_error))
http://www.lryc.cn/news/512897.html

相关文章:

  • 我的博客年度之旅:感恩、成长与展望
  • undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12
  • 【OTA】论文笔记--《智能网联汽车整车OTA功能设计研究》智能网联汽车OTA系统设计分析报告
  • c#String和StringBuilder
  • 【Linux】HTTP协议
  • 计算机网络 (14)数字传输系统
  • 《向量数据库指南》——Milvus Cloud 2.5:Sparse-BM25引领全文检索新时代
  • Unity3D 网络框架设计详解
  • 网络渗透测试实验四:CTF实践
  • Wend看源码-Java-Collections 工具集学习
  • [JAVA]MyLogger
  • 玩转OCR | 腾讯云智能结构化OCR初次体验
  • 记一次 dockerfile 的循环依赖错误
  • Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
  • 【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
  • LabVIEW化工实验室设备故障实时监测
  • 单例模式懒汉式、饿汉式(线程安全)
  • Cursor登录按钮点击没反应
  • 论文实现:Reactive Nonholonomic Trajectory Generation via Parametric Optimal Control
  • 基于单片机中药存放环境监测系统的实现
  • 九垠赢+商业管理系统 Common.ashx 文件上传致RCE漏洞复现
  • 速盾:服务器CDN加速解析的好处有哪些呢?
  • C++ 设计模式:备忘录模式(Memento Pattern)
  • Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法
  • PDF怎么压缩得又小又清晰?5种PDF压缩方法
  • YK人工智能(三)——万字长文学会torch深度学习
  • 关于CISP报名费用详情
  • vim 按下esc后取消高亮
  • SwiftUI:多语言实现富文本插值
  • 操作系统基础