热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Halcon学习的一维码识别【二十七】grid_rectification.hdev

本例说明了如何使用运算符进行网格校正。下面的命令创建一个postscript文件,它包含了修正网格。这个网格一定是印刷品。然后必须将其安装在物体表面总代码࿱
本例说明了如何使用运算符进行网格校正。下面的命令创建一个postscript文件,它包含了修正网格。这个网格一定是印刷品。然后必须将其安装在物体表面



总代码:

WidthOfGrid := 0.17
NumSquares := 17
*生成描述校正网格的PostScript文件。
create_rectification_grid (WidthOfGrid, NumSquares, 'rectification_grid.ps')
*
* Read the image of the object wrapped by the rectification grid
* and reopen the window with an appropriate size.
*读取由校正网格包裹的对象的图像,并以适当的大小重新打开窗口。*读取图片
read_image (Image, 'can_with_grid')
get_image_size (Image, ImageWidth, ImageHeight)
dev_close_window ()*打开窗口
dev_open_window (0, 0, ImageWidth * 0.75, ImageHeight * 0.75, 'black', WindowID1)
dev_display (Image)
dev_update_off ()
set_display_font (WindowID1, 14, 'mono', 'true', 'false')
*
*
* Part 1: Determination of the image map
* The surface to be rectified is wrapped by a checkered pattern, which
* is used to determine the mapping between the distorted image and
* the rectified image. Note the orientation of the two circular marks. When
* in gen_grid_rectification_map() the parameter Rotation is 'auto', the rectified
* image is rotated such that the black mark is left of the white mark.*第1部分:图像地图的确定
*要矫正的表面被棋盘格图案包裹,这用于确定扭曲图像和图像之间的映射校正后的图像。
*注意两个圆形标记的方向。什么时候在gen_grid_Convertification_map()中,
*参数旋转为“自动”,校正后的旋转图像,使黑色标记位于白色标记的左侧。* Determine region of interest
*确定感兴趣的区域
MinContrast := 25
Radius := 10
*分割图像中的校正网格区域。
*查找校正网格在图像中搜索包含校正网格的图像部分,并将其返回到区域网格区域
find_rectification_grid (Image, GridRegion, MinContrast, Radius)
*
dev_display (GridRegion)
*显示信息--网格区域
disp_message (WindowID1, 'Grid region', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()
*抠图
reduce_domain (Image, GridRegion, ImageReduced)
*
* Determine grid points
*确定网格点
SigmaSaddlePoints := 1.5
Threshold := 5
*图像中鞍点的亚像素精确检测。
*鞍点_sub_pix以亚像素精度从图像中提取鞍点,
*即沿一个方向图像强度最小,同时沿另一个方向图像强度最大的点。
saddle_points_sub_pix (ImageReduced, 'facet', SigmaSaddlePoints, Threshold, Row, Col)
*
dev_set_color ('blue')
*为每个输入点生成一个十字形状的xld轮廓。
gen_cross_contour_xld (SaddlePoints, Row, Col, 6, 0.785398)
dev_display (Image)
dev_display (SaddlePoints)
disp_message (WindowID1, 'Grid points', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()
*
* Connect points to grid
*将点连接到网格
SigmaConnectGridPoints := 0.9MaxDist := 5.0GridSpacing := 20
dev_set_color ('red')
*在整流网格的网格点之间建立连接。
connect_grid_points (ImageReduced, ConnectingLines, Row, Col, SigmaConnectGridPoints, MaxDist)
*
dev_display (ConnectingLines)
*显示信息--连通网格点
disp_message (WindowID1, 'Connected grid points', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()
*
* Determine image map
*确定图像映射
*根据规则网格的点计算畸变图像和校正图像之间的映射。
gen_grid_rectification_map (ImageReduced, ConnectingLines, Map, Meshes, GridSpacing, 0, Row, Col, 'bilinear')
*对图像应用常规变换。
map_image (ImageReduced, Map, ImageMapped)
*
get_image_size (Map, MapWidth, MapHeight)
dev_open_window (0, (ImageWidth * 0.75) + 12, MapWidth, MapHeight, 'black', WindowID2)
set_display_font (WindowID2, 14, 'mono', 'true', 'false')
dev_display (ImageMapped)
*显示信息--整流电网
disp_message (WindowID2, 'Rectified grid', 'window', 12, 12, 'black', 'true')
stop ()
*
*
* Part 2: Application of the image map
* The original surface (without the checkered pattern) is rectified
* using the previously calculated image map.
*第二部分:影像地图的应用
*原始曲面(无棋盘格图案)已被校正
*使用之前计算的图像贴图。* Read in the image to be rectified
*读入要校正的图像
read_image (Image, 'can')
*
* Rectify image using the previously calculated image map
*使用之前计算的图像贴图校正图像
dev_set_window (WindowID2)
*对图像应用常规变换。
map_image (Image, Map, ImageMapped)
*
dev_set_window (WindowID1)
dev_display (Image)
disp_message (WindowID1, 'Original image', 'window', 12, 12, 'black', 'true')
dev_set_window (WindowID2)
dev_display (ImageMapped)
disp_message (WindowID2, 'Rectified image', 'window', 12, 12, 'black', 'true')



逐段分析:

*定义一些变量
WidthOfGrid := 0.17
NumSquares := 17*生成描述校正网格的PostScript文件。
create_rectification_grid (WidthOfGrid, NumSquares, 'rectification_grid.ps')*读取由校正网格包裹的对象的图像,并以适当的大小重新打开窗口。*读取图片
read_image (Image, 'can_with_grid')
get_image_size (Image, ImageWidth, ImageHeight)
dev_close_window ()*打开窗口
dev_open_window (0, 0, ImageWidth * 0.75, ImageHeight * 0.75, 'black', WindowID1)
dev_display (Image)
dev_update_off ()
set_display_font (WindowID1, 14, 'mono', 'true', 'false')

*确定感兴趣的区域
MinContrast := 25
Radius := 10*分割图像中的校正网格区域。
*查找校正网格在图像中搜索包含校正网格的图像部分,并将其返回到区域网格区域
find_rectification_grid (Image, GridRegion, MinContrast, Radius)
dev_display (GridRegion)*显示信息--网格区域
disp_message (WindowID1, 'Grid region', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()

*抠图
reduce_domain (Image, GridRegion, ImageReduced)

*确定网格点
SigmaSaddlePoints := 1.5
Threshold := 5*图像中鞍点的亚像素精确检测。
*鞍点_sub_pix以亚像素精度从图像中提取鞍点,
*即沿一个方向图像强度最小,同时沿另一个方向图像强度最大的点。
saddle_points_sub_pix (ImageReduced, 'facet', SigmaSaddlePoints, Threshold, Row, Col)
dev_set_color ('blue')*为每个输入点生成一个十字形状的xld轮廓。
gen_cross_contour_xld (SaddlePoints, Row, Col, 6, 0.785398)

*显示图像
dev_display (Image)*显示网格点
dev_display (SaddlePoints)*显示信息'Grid points'--网格点
disp_message (WindowID1, 'Grid points', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()

*将点连接到网格
SigmaConnectGridPoints := 0.9
MaxDist := 5.0
GridSpacing := 20*设置颜色为红色
dev_set_color ('red')*在整流网格的网格点之间建立连接。
connect_grid_points (ImageReduced, ConnectingLines, Row, Col, SigmaConnectGridPoints, MaxDist)*显示连接线
dev_display (ConnectingLines)*显示信息--连通网格点
disp_message (WindowID1, 'Connected grid points', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowID1, 'black', 'true')
stop ()

*确定图像映射
*根据规则网格的点计算畸变图像和校正图像之间的映射。
gen_grid_rectification_map (ImageReduced, ConnectingLines, Map, Meshes, GridSpacing, 0, Row, Col, 'bilinear')

*对图像应用常规变换。
map_image (ImageReduced, Map, ImageMapped)

*得到Map的宽高
get_image_size (Map, MapWidth, MapHeight)*打开一个新的窗口
dev_open_window (0, (ImageWidth * 0.75) + 12, MapWidth, MapHeight, 'black', WindowID2)
set_display_font (WindowID2, 14, 'mono', 'true', 'false')
dev_display (ImageMapped)*显示信息--整流电网
disp_message (WindowID2, 'Rectified grid', 'window', 12, 12, 'black', 'true')
stop ()

*读入要校正的图像
read_image (Image, 'can')*使用之前计算的图像贴图校正图像
dev_set_window (WindowID2)

*对图像应用常规变换。
map_image (Image, Map, ImageMapped)

*设置活动窗口
dev_set_window (WindowID1)
dev_display (Image)*显示信息--原始图像
disp_message (WindowID1, 'Original image', 'window', 12, 12, 'black', 'true')*设置活动窗口
dev_set_window (WindowID2)
dev_display (ImageMapped)*显示信息--校正图像
disp_message (WindowID2, 'Rectified image', 'window', 12, 12, 'black', 'true')



 主要算子解释:


create_rectification_grid( : : Width, NumSquares, GridFile : )

功能:生成描述校正网格的PostScript文件

Width:方格图案的宽度,以米为单位(不含两帧)

NumSquares:每行和每列的方块数

GridFile :PostScript文件的文件名


find_rectification_grid(Image : GridRegion : MinContrast, Radius : )

功能:分割图像中的校正网格区域。查找校正网格在图像中搜索包含校正网格的图像部分,并将其返回到区域网格区域。为此提取对比度至少为MinContrast的基本图像区域,并填充这些区域中的孔。

GridRegion:包含校正网格的输出区域

MinContrast:最小对比度

Radius:圆形结构元素的半径


saddle_points_sub_pix(Image : : Filter, Sigma, Threshold : Row, Column)

功能:图像中鞍点的亚像素精确检测。以亚像素精度从图像中提取鞍点,即沿一个方向图像强度最小,同时沿另一个方向图像强度最大的点

Filter:过滤器,偏导数的计算方法

Sigma:高斯函数的西格玛。如果过滤器为“面”,则Sigma可能为0.0,以避免输入图像的平滑

Threshold:Hessian矩阵特征值的最小绝对值

Row:检测到的鞍点的行坐标

Column:检测到的鞍点的列坐标


gen_cross_contour_xld( : Cross : Row, Col, Size, Angle : ) 

功能:为每个输入点生成一个十字形状的xld轮廓。轮廓由两条长度大小的线组成,它们在输入点上正好相交。它们的方位是由角度决定的。十字架以十字架的形式返回。如果有多个点需要处理,它们的坐标必须作为元组传递。

Cross:生成XLD轮廓

Row:输入点的行坐标

Col:输入点的列坐标

Size:横杆的长度

Angle:十字架的方向


connect_grid_points(Image : ConnectingLines : Row, Column, Sigma, MaxDist : ) 

功能:在整流电网的电网点之间建立连接。连接网格点搜索网格点(行、列)之间的连接线。连接线是通过边缘检测器、平滑滤波器和线检测器的组合从输入图像中提取的,每种检测器的大小不同。

ConnectingLines:输出轮廓。

Row:网格点的行坐标。

Column:网格点的列坐标。

Sigma:应用高斯的大小。

MaxDist :连接线与网格点的最大距离。


gen_grid_rectification_map(Image, ConnectingLines : Map, Meshes : GridSpacing, Rotation, Row, Column, MapType : )

功能:根据规则网格的点计算畸变图像和校正图像之间的映射。计算扭曲图像中实际检测到的网格点(行、列)与理想规则点网格的对应网格点之间的映射

ConnectingLines:输入轮廓

Map:包含映射数据的图像

Meshes:输出轮廓

GridSpacing:校正图像中网格点的距离

Rotation:要应用于点栅格的旋转

Row:网格点的行坐标

Column:网格点的列坐标

MapType:映射类型


map_image(Image, Map : ImageMapped : : )

功能:对图像应用常规变换。使用任意变换贴图变换图像

Image:要映射的图像

Map:包含映射数据的图像

ImageMapped:映射图像


推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • Android获取app应用程序大小的方法
    Android获取app应用程序大小的方法-Android对这种方法进行了封装,我们没有权限去调用这个方法,所以我们只能通过AIDL,然后利用Java的反射机制去调用系统级的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
author-avatar
疯疯癫癫丶是一种掩饰_954
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有