Halcon棋盘格畸变矫正

news2024/11/15 8:10:27

前言

通常我们使用的相机都是带有一定的畸变的,只是畸变的大小不同。对于我们常见的测量项目来说,对测量精度的要求很高,通常从相机镜头上进行优化,但是即使镜头优化或者成本原因,造成图像仍有一定的畸变时,我们就可是使用棋盘格标定板,进行畸变矫正

1.程序

* Image Acquisition 01: Code generated by Image Acquisition 01
read_image (Image, 'C:/Users/1/Desktop/work/3.8/10.bmp')
*****************************标定矫正过程**************************************
WidthOfGrid := 0.17
NumSquares := 110
create_rectification_grid (WidthOfGrid, NumSquares, 'rectification_grid.ps')
MinContrast := 25
Radius := 10
find_rectification_grid (Image, GridRegion, MinContrast, Radius)
reduce_domain (Image, GridRegion, ImageReduced)

SigmaSaddlePoints := 2
Threshold := 3
saddle_points_sub_pix (ImageReduced, 'facet', SigmaSaddlePoints, Threshold, Row, Col)
gen_cross_contour_xld (SaddlePoints, Row, Col, 20, 1)
dev_display (Image)
dev_display (SaddlePoints)

SigmaConnectGridPoints := 0.9
MaxDist :=5
GridSpacing := 45
dev_set_color ('red')
connect_grid_points (ImageReduced, ConnectingLines, Row, Col, SigmaConnectGridPoints, MaxDist)
gen_grid_rectification_map (ImageReduced, ConnectingLines, Map, Meshes, GridSpacing,0, Row, Col, 'bilinear')
map_image (ImageReduced, Map, ImageMapped)

******************************************存储标定参数*****************
write_image (Map, 'tiff', 0, 'C:/Users/1/Desktop/work/3.8/calib.tiff')
read_image (Map, 'C:/Users/1/Desktop/work/3.8/calib.tiff')

***************************************读取图像测试***********************
read_image (Image, 'C:/Users/1/Desktop/work/3.8/2.bmp')
map_image (Image, Map, ImageMapped)

2.采集标定图像

在这里插入图片描述
此次使用激光雕刻的棋盘格,单个格子长宽2mm,图像采集像素值为单格43像素。
标定前,可以根据所需要的视野大小进行标定,当然最佳的方式是标定板应该大于视野范围,以确定边缘畸变的量,同时标定板应该摆放正,如果没有摆放正的情况会出现矫正图像有倾斜的现象。

3.裁剪标定板区域

*实际棋盘格宽度
WidthOfGrid := 0.3
*棋盘格单向数量
NumSquares := 110
*创建标定板
create_rectification_grid (WidthOfGrid, NumSquares, 'rectification_grid.ps')
*最小二值化的值
MinContrast := 25
Radius := 10
find_rectification_grid (Image, GridRegion, MinContrast, Radius)
reduce_domain (Image, GridRegion, ImageReduced)

4.提取网格

*提取每个网格的交点
*预设参数一般不需要修改。但是需要保证每个格子与格子间的角都要找到,哪里没找到,哪里就会矫正缺损
SigmaSaddlePoints := 2
Threshold := 3
saddle_points_sub_pix (ImageReduced, 'facet', SigmaSaddlePoints, Threshold, Row, Col)
gen_cross_contour_xld (SaddlePoints, Row, Col, 20, 1)
dev_display (Image)
dev_display (SaddlePoints)
*生产网格线
SigmaConnectGridPoints := 0.9
MaxDist :=5
*设置矫正后的单个像素值
GridSpacing := 43
dev_set_color ('red')
connect_grid_points (ImageReduced, ConnectingLines, Row, Col, SigmaConnectGridPoints, MaxDist)
gen_grid_rectification_map (ImageReduced, ConnectingLines, Map, Meshes, GridSpacing,0, Row, Col, 'bilinear')
*矫正图像
map_image (ImageReduced, Map, ImageMapped)

注意:当棋盘格上有细小的污点时,会严重影响实际的畸变矫正的效果,所以采集到图像时,需要使用PS或者画图软件将污点去除,在进行运算

5.保存矫正数据和验证

5.1保存数据

******************************************存储标定参数*****************
write_image (Map, 'tiff', 0, 'C:/Users/1/Desktop/work/3.8畸变矫正/calib.tiff')
read_image (Map, 'C:/Users/赵伟/Desktop/work/3.8畸变矫正/calib.tiff')

***************************************读取图像测试***********************
read_image (Image, 'C:/Users/1/Desktop/work/3.8畸变矫正/2.bmp')
map_image (Image, Map, ImageMapped)

5.2验证数据

在这里插入图片描述
使用标定板随机重新防止。
然后使用测量助手对中心和边缘的棋盘格的像素进行提取
在这里插入图片描述
在这里插入图片描述
选取矫正后的图像的中心区域的格子,与边缘区域的格子对比实际距离大小,误差小于0.3像素则代表矫正成功

6.注意事项

1:矫正参数仅适用于,当前高度,焦距,相机,采集到的图像。
2:输入的标定棋盘格图像一定不能存在污点,当有污点时,适用PS或者画图工具手动去除
3:标定板需要摆放正确方向,当矫正后,图像将自动矫正为水平方向,如果标定板摆放不水平时,会出现矫正图像倾斜的情况。

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

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

相关文章

微信小程序-可以用区域

简介 movable-view和movable-area是可移动的视图容器,在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码,left view为内容区域,right view为操作按钮&a…

Python学习:因为爱所以学

python的概念 Python是一种通用、高级、解释性的编程语言,最初由Guido van Rossum于1991年设计并开发。Python具有简单直观的语法结构,易于学习和阅读,被广泛应用于多个领域,包括软件开发、数据科学、人工智能等。 以下是Python的…

2024蓝桥杯每日一题(归并排序)

一、第一题:火柴排队 解题思路:归并排序 重点在于想清楚是对哪个数组进行归并排序求逆序对 【Python程序代码】 from math import * n int(input()) a list(map(int,input().split())) b list(map(int,input().split())) na,nb [],[] for …

java常用排序算法——二分查找(折半查找)概述

前言: 普通查找指的是把需要查找的数和数组中的数依次对应,直到找到该数字。但如果数据庞大,则会非常耗时间,降低性能,所以二分查找是一个好方法,记录下二分查找的使用心得。打好基础,daydayup!…

LCR 179. 查找总价格为目标值的两个商品 - 力扣

1. 题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 2. 示例 3. 分析 我们首先想到暴力解法,这道题目的暴力还是比较简单的,列举每个数的情况即可…

【嵌入式】字体极限瘦身术:Fontmin在嵌入式UI中的魔法应用(附3500常用汉字)

1. 概述 在嵌入式系统的用户界面(UI)设计中,字体的选择和优化至关重要。一个恰当的字体不仅能够提升用户体验,还能彰显产品特色。然而,由于嵌入式设备常常受限于存储空间和处理能力,大型字体文件可能成为性…

HTML 学习笔记(四)图片

<!--通过图片标签"<img src "图片路径">"来调用图片在网页中进行显示--> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthd…

基于Leatlet标注Geojson下载器实现

在上一篇文章中&#xff0c;我们学习了Leaflet的基础知识&#xff0c;包括如何创建地图、添加图层等。在本文中&#xff0c;我们将深入学习Leaflet中标注的创建和管理&#xff0c;包括如何添加标注、自定义标注图标、创建图层组、批量添加和删除标注、为标注添加属性和弹出框等…

Spring Boot工作原理

Spring Boot Spring Boot 基于 Spring 开发&#xff0c;Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说&#xff0c;它并不是用来替代 Spring 的解决方案&#xff0c;而是和 Spr…

HTML5基础2

drag 可以把拖放事件拆分成4个步骤 设置元素为可拖放。为了使元素可拖动&#xff0c;把 draggable 属性设置为 true 。 <img draggable"true"> 拖动什么。ondragstart 和 setData() const dragestart (ev)>{ev.dataTransfer.setData(play,ev.target.id)} …

码垛【FB块】

转载&#xff1a; FUNCTION BLOCK 码垛 VAR INPUT 当前数:INT; 点l:Point; 点2:Point; X行数:REAL; Y列数:REAL; 2层数:REAL; END VAR VAR OUTPUT 目标点:Point; 点数量:INT; END VAR VAR // X差值:点2.x-点1.x; IF X行数>1 AND X差值<>0 THEN X间隔:X差值/(X行数-1)…

vue结合vue-electron创建应用程序

这里写自定义目录标题 安装electron第一种方式&#xff1a;vue init electron-vue第二种方式&#xff1a;vue add electron-builder 启动electron调试功能&#xff1a;background操作和使用1、覆盖窗口的菜单上下文、右键菜单2、监听关闭事件、阻止默认行为3、创建悬浮窗口4、窗…

2024想要赚点小钱真的很容易!帮你们找的10个搞钱第二职业

我们都希望在空闲时间里增加一些额外收入&#xff0c;并有机会找到自己热爱的事业&#xff0c;每天贝兼几十上百元是一个不错的开始&#xff0c;小钱也是钱&#xff0c; 搞钱的经验会积少成多。今天分享10个搞钱第二职业&#xff0c;2024想要赚点小钱真的很容易。 一.摆摊卖花 …

计算机找不到msvcr120.dll的五种修复方法,轻松搞定msvcr120.dll丢失问题

当计算机系统中msvcr120.dll文件丢失时&#xff0c;可能会引发一系列运行问题和故障现象。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多Windows应用程序的正常运行至关重要。由于msvcr120.dll是许多软件在运行过程中依赖的重要动态链…

blender怎么导入stl格式文件?

stl格式&#xff0c;一般是用来3D打印用的文件&#xff0c;这种模型一般很小&#xff0c;经常做来做一些DIY的配件&#xff0c;如下图&#xff0c;一共有七八个模型&#xff0c;3D打印机把每个模型实体打出来后&#xff0c;就可以给小朋友组装当智益玩具玩了&#xff0c;我们把…

前端面试练习24.3.8

防抖和节流 防抖&#xff08;Debouncing&#xff09;&#xff1a; 防抖是指在短时间内连续触发同一事件时&#xff0c;只执行最后一次触发的事件处理函数。 在实际应用中&#xff0c;常常用于处理用户输入的搜索框或者滚动事件。例如&#xff0c;当用户连续输入搜索关键词时&am…

基于SpringBoot校园失物招领系统的设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

python基础9_序列类型

回顾: 什么是变量?,有什么用? 可以变化的量, 就是个容器,多次变化,方便后续使用, 前面介绍了哪些数据类型? bool, str, int, float 用什么函数查看数据的类型? a "hello" print(type(a)) 到了这一步,,我们认识了哪些数据类型呢? int 整型(整数), float…

Python快速入门系列-1

Python快速入门系列 第一章: Python简介1.1 Python的历史与发展1.2 Python的优势与特点1.2.1 易学易用1.2.2 动态类型1.2.3 丰富的标准库与第三方库1.2.4 面向对象与函数式编程1.2.5 广泛应用领域 1.3 Python的应用领域 第一章: Python简介 1.1 Python的历史与发展 Python是一…

IRLINK(红外遥控器)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 红外遥控&#xff1a;是利用红外线进行通信的设备&#xff0c;由红外LED调制后的信号发出&#xff0c;由专用的红外接头进行解调&#xff1b; 通信方式&#xff1a;单工、异步&#xff1b; 红外LED波长&#x…