Halcon 路标牌识别

文章目录

  • gray_closing_shape 使用选定的掩码执行灰度值关闭
  • create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型
  • get_deformable_model_params 返回可变形模型的参数
  • find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳匹配
  • get_deformable_model_contours 返回可变形模型的轮廓表示形式。
  • projective_trans_contour_xld 对XLD轮廓应用投影变换
  • clear_deformable_model 清除模板
  • get_region_runs 访问区域的运行长度编码
  • 示例

gray_closing_shape 使用选定的掩码执行灰度值关闭

gray_closing_shape(Image : ImageClosing : MaskHeight, MaskWidth, MaskShape : )Image (input_object): 需要计算最小灰度值的图像。ImageClosing (output_object): 包含最小灰度值的图像。MaskHeight (input_control): 滤波器掩模的高度。默认值: 11建议值: 3, 5, 7, 9, 11, 13, 15典型取值范围: 1.0 ≤ MaskHeight ≤ 511.0MaskWidth (input_control): 滤波器掩模的宽度。默认值: 11建议值: 3, 5, 7, 9, 11, 13, 15典型取值范围: 1.0 ≤ MaskWidth ≤ 511.0MaskShape (input_control): 控制滤波器掩模形状的参数。默认值: 'octagon'可选值: 'octagon', 'rectangle', 'rhombus'

create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型

create_planar_uncalib_deformable_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast, GenParamName, GenParamValue : ModelID)
Image (input_object): 输入图像,模型应在其中查找目标。
ModelID (input_control): 模型的标识符。
AngleStart (input_control): 模型的最小旋转角度。
AngleExtent (input_control): 旋转角度的范围。
ScaleRMin/ScaleRMax/ScaleCMin/ScaleCMax (input_control): 模型在行和列方向上的最小和最大比例。
MinScore (input_control): 实例的最低得分阈值。
NumMatches (input_control): 要找到的模型实例数量。
MaxOverlap (input_control): 实例之间的最大重叠度量。
NumLevels (input_control): 在匹配中使用的金字塔级别数。
Greediness (input_control): 搜索启发式算法的“贪婪度”。GenParamName/GenParamValue (input_control): 一般参数名称和值。
HomMat2D (output_control): 模型实例与找到的实例之间的变换矩阵。
Score (output_control): 找到的模型实例的得分。

get_deformable_model_params 返回可变形模型的参数

get_deformable_model_params( : : ModelID, GenParamName : GenParamValue)
这段参数描述了一个可变形模型(deformable model)的相关控制参数:ModelID (input_control): 模型的标识符。GenParamName (input_control): 要查询可变形模型的通用参数的名称列表。默认值: 'angle_start'可选值: 'angle_extent', 'angle_start', 'angle_step', 'cam_param', 'cam_param_rect', 'created_from_xld', 'get_deformable_model_contours_coord_system', 'metric', 'min_contrast', 'min_size', 'model_col', 'model_pose', 'model_row', 'model_type', 'num_levels', 'optimization', 'reference_pose', 'scale_c_max', 'scale_c_min', 'scale_c_step', 'scale_r_max', 'scale_r_min', 'scale_r_step'GenParamValue (output_control): 通用参数的值。

find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳匹配

find_planar_uncalib_deformable_model(Image : : ModelID, AngleStart, AngleExtent, ScaleRMin, ScaleRMax, ScaleCMin, ScaleCMax, MinScore, NumMatches, MaxOverlap, NumLevels, Greediness, GenParamName, GenParamValue : HomMat2D, Score)Image:输入图像,模型应该在其中被找到。ModelID:模型的标识符。AngleStart:模型的最小旋转角度。AngleExtent:旋转角度的范围。ScaleRMin:模型在行方向上的最小比例。ScaleRMax:模型在行方向上的最大比例。ScaleCMin:模型在列方向上的最小比例。ScaleCMax:模型在列方向上的最大比例。MinScore:要找到的模型实例的最小分数。NumMatches:要找到的模型实例的数量(或者为所有匹配项设置为0)。MaxOverlap:要找到的模型实例的最大重叠。NumLevels:在匹配中使用的金字塔级别数。Greediness:搜索启发式算法的“贪婪度”。GenParamName:通用参数名称。GenParamValue:通用参数值。HomMat2D:模型和找到的实例之间的Homographies。Score:找到的模型实例的分数。

get_deformable_model_contours 返回可变形模型的轮廓表示形式。

get_deformable_model_contours( : ModelContours : ModelID, Level : )
ModelContours:可变形模型的轮廓表示。
ModelID:模型的标识符。
Level:应返回轮廓表示的金字塔级别。默认为1,建议值为110之间的整数,且必须大于等于1

projective_trans_contour_xld 对XLD轮廓应用投影变换

projective_trans_contour_xld(Contours : ContoursProjTrans : HomMat2D : )
Contours:输入的轮廓。
ContoursProjTrans:输出的轮廓。
HomMat2D:齐次投影变换矩阵。

clear_deformable_model 清除模板

clear_deformable_model( : : ModelID : )
ModelID :模板句柄

get_region_runs 访问区域的运行长度编码

get_region_runs(Region : : : Row, ColumnBegin, ColumnEnd)
Region:输入的区域。
Row:弦线的行号。
ColumnBegin:弦线起点的列号。
ColumnEnd:弦线终点的列号

示例

determine_area_of_interest (Image, Rectangle, AreaOfInterest) 函数

* 裁剪不重要的部分
reduce_domain (Image, Rectangle, ImageReduced)
*分成RGB三个图片
decompose3 (ImageReduced, ImageR, ImageG, ImageB)
*将图片转换为HSV
trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')
* 阈值处理
threshold (ImageS, HighSat, 130, 255)
* 膨胀
dilation_circle (HighSat, HighSatD, 2.0)
* 将图片填充
fill_up (HighSatD, HighSatD)
*填充后的图片裁剪
reduce_domain (ImageH, HighSatD, HighHue)
* 阈值处理
threshold (HighHue, ColoredAreaOfInterest, [230,145], [255,162])
* 填充图片
fill_up (ColoredAreaOfInterest, ImageFilled)
* 膨胀
dilation_circle (ImageFilled, ImageDilated, 3.0)
* 将图片联合
union1 (ImageDilated, AreaOfInterest)
return ()
* This example shows an application case from the automobile
* industry. A monitoring system in a car  checks the sidewalk
* for roadsigns to support the driver in case of any inattention.
* To show the imaging process we focus on two road signs,
* the attention and the dead end road sign. First the models
* of both signs are generated and then detected in a street
* sequence.
* 
* 读取图片
dev_close_window ()
* Read in model images.
* While the attention sign is from a synthetic source,
* the model for the dead end sign is from another sequence.
* 读取路标图片
read_image (ImageAttentionSign, 'road_signs/attention_road_sign')
* 读取街道图片
read_image (ImageInit, 'road_signs/street_01')
dev_open_window_fit_image (ImageInit, 0, 0, -1, -1, WindowHandle)
dev_update_off ()
dev_set_line_width (2)
dev_set_color ('green')
dev_set_draw ('margin')
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
* 
* Some values for the later matching process are initialized
* The Attention sign has a significant red part, the
* dead end sign a blue one. Hence, we can extract the respective
* channels from the color images.
Channel := [3,1]
* In this example, we have significant scalings of the road signs.
ScaleRMin := [0.5,0.4]
ScaleRMax := [0.8,2.0]
* One could add an anisotropic scaling for the exhaustive search.
* However, this makes the detection slower and is not required here.
ScaleCMin := [1.0,1.0]
ScaleCMax := [1.0,1.0]
* Add names to the signs.
RoadSign := ['Attention','Dead end']
HFac := [47.0,50.0]
* 
* Prepare the attention sign picture for the model
* creation process.
* 创建通道
access_channel (ImageAttentionSign, Image, Channel[0])
* 放大图片
zoom_image_factor (Image, ImageZoomed, 0.1, 0.1, 'weighted')
* 将放大后的图片插入到轮廓识别算法中
inspect_shape_model (ImageZoomed, ModelImages, ModelRegions, 3, 20)
* 创建一个可变形的模板
create_planar_uncalib_deformable_model (ImageZoomed, 3, [], [], 0.1, ScaleRMin[0], [], 0.05, ScaleCMin[0], [], 0.5, 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
Models := ModelID
* 
* 
* 
*读取路标图片
read_image (ImageDeadEnd, 'road_signs/dead_end_road_sign')
* 获取通道1
access_channel (ImageDeadEnd, Image, Channel[1])
* 使用选定的掩码执行灰度值关闭
gray_closing_shape (Image, ImageClosing, 5, 5, 'octagon')
* 图片放大
zoom_image_factor (ImageClosing, ImageZoomed, 0.4, 0.4, 'weighted')
gen_rectangle1 (Rectangle1, 28, 71, 69, 97)
* 裁剪
reduce_domain (ImageZoomed, Rectangle1, ImageReduced)
* 将裁剪的标识创建一个可变形的模板
create_planar_uncalib_deformable_model (ImageReduced, 3, [], [], 0.1, ScaleRMin[1], [], 0.05, ScaleRMin[1], [], 0.1, 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
* 
* The following three lines theoretically show how to
* query specific parameters of a model.
* Practically, the derived information is not needed
* within the program.
* 获取模板参数
get_deformable_model_params (ModelID, 'angle_step', AngleStep)
get_deformable_model_params (ModelID, 'scale_r_step', ScaleRStep)
Models := [Models,ModelID]
* 
* Generate ROI in which the road signs are expected.
* We can discard not significant parts of the image, in which
* no road sign can be located.
*丢弃图像中不重要的部分
gen_rectangle1 (Rectangle, 115, 0, 360, 640)
* 
* Search in image sequence
for Index := 1 to 16 by 1OutputString := []TotalTime := 0* 读取街道图片read_image (Image, 'road_signs/street_' + Index$'.02')* We are using color images, hence the ROI of the search image* can significantly be reduced based on the color.determine_area_of_interest (Image, Rectangle, AreaOfInterest)reduce_domain (Image, AreaOfInterest, ImageReduced)dev_display (Image)* for Index2 := 0 to |Models| - 1 by 1* * Depending on the street sign to be found, we use different color* channels of the image and the operator find_planar_uncalib_deformable_model* with different parameters because of the varying dimensions of the models.access_channel (ImageReduced, ImageChannel, Channel[Index2])count_seconds (Time1)* 查找匹配模板find_planar_uncalib_deformable_model (ImageChannel, Models[Index2], 0, 0, ScaleRMin[Index2], ScaleRMax[Index2], ScaleCMin[Index2], ScaleCMax[Index2], 0.85, 1, 0, 2, 0.4, [], [], HomMat2D, Score)count_seconds (Time2)Time := Time2 - Time1TotalTime := TotalTime + Time* * Display found models.if (|HomMat2D|)*发现轮廓get_deformable_model_contours (ModelContours, Models[Index2], 1)*将轮廓进行投影projective_trans_contour_xld (ModelContours, ContoursProjTrans, HomMat2D)* 产生亚像素轮廓gen_region_contour_xld (ContoursProjTrans, Region, 'filled')* 合并union1 (Region, RegionU)*获取中心点面积area_center (RegionU, Area, R, C)* 访问区域的长度get_region_runs (RegionU, Row, ColumnBegin, ColumnEnd)H := max(Row) - min(Row)Fac := H / HFac[Index2]gen_circle (Circle, R, C, 45 * Fac)dev_display (Circle)gen_circle (Circle, R, C, 50 * Fac)dev_display (Circle)dev_display (ContoursProjTrans)if (Index2 == 0)OutputString := 'Attention sign found in : ' + (Time * 1000)$'.2f' + ' ms \n'elseOutputString := 'Dead end sign found in  : ' + (Time * 1000)$'.2f' + ' ms \n'endifendifendforif (|OutputString| == 0)OutputString := 'No sign found in        : ' + (Time * 1000)$'.2f' + ' ms \n'endifOutputString := ['Search for all models in: ' + (TotalTime * 1000)$'.2f' + ' ms',OutputString]disp_message (WindowHandle, OutputString, 'window', 10, 10, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()
endfor
dev_display (Image)
disp_message (WindowHandle, 'Program finished.\nPress \'Run\' to clear all deformable models.', 'window', 10, 10, 'black', 'true')
stop ()
* Clean the memory of the models.
for Index1 := 0 to 1 by 1clear_deformable_model (Models[Index1])
endfor

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试常问:为什么 Vite 速度比 Webpack 快?

前言 最近作者在学习 webpack 相关的知识,之前一直对这个问题不是特别了解,甚至讲不出个123....,这个问题在面试中也是常见的,作者在学习的过程当中总结了以下几点,在这里分享给大家看一下,当然最重要的是…

asp.net在线租车平台

说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net在线租车平台 用户功能有首页 行业新闻用户注册车辆查询租车介绍访问后台 后台管理员可以进行用户管理 管…

Python 解析CSV文件 使用Matplotlib绘图

数据存储在CSV文件中,使用Matplotlib实现数据可视化。 CSV文件:comma-separated values,是在文件中存储一系列以‘,’分隔的值。 例如:"0.0","2016-01-03","1","3","20…

Linux:网络的初步认知

文章目录 网络的认知如何理解协议网络分层OSI模型TCP/IP五层(或四层)模型网络传输的基本流程协议的参与局域网通信原理 本篇将会引入到网络的话题 网络的认知 第一个问题是,网卡是文件吗?答案是显然的,在Linux下一切皆文件,基于…

【Linux】进程控制 -- 详解

一、进程创建 目前学习到的进程创建的两种方式: 命令行启动命令(程序、指令等) 。通过程序自身,调用 fork 函数创建出子进程。 1、fork 函数初识 在 Linux 中的系统接口 fork 函数是非常重要的函数,它从已存在进程中…

【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 前言 在多用户环境下管理磁盘空间是服务器管理中的一项重要任务。Linux提供了强大的磁盘配额功能,可以帮助管理员限制用户或组对文件系统…

一分钟了解自动化测试【建议收藏】

引子 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够明白自动化测试并很好落地实施的团队还不是非常多,我们接来下用通俗的方式来介绍自动化测试…… 本文共有2410…

Zookeeper的ZAB协议原理详解

Zookeeper的ZAB协议原理详解 如何保证数据一致性。 Paxos, 吸收了主从。 zk 数据模型Watch机制 zab zookeeper原子广播协议。 ZAB概念 ZooKeeper是通过Zab协议来保证分布式事务的最终一致性。 Zab(ZooKeeper Atomic Broadcast,.ZooKeeper原子广播协议)支持…

企业员工上班摸鱼行为老板怎么管?

在数字化时代,员工摸鱼现象成为企业普遍面临的挑战。摸鱼不仅会降低工作效率,影响企业的正常运营,还可能引发数据泄露等安全问题。因此,企业需要采取有效的措施来防止员工上班摸鱼。 来百度APP畅享高清图片 一、制定明确的规章制…

NBlog Java定时任务-备份MySQL数据

NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 为了避免服务器被攻击,给博客添加了一个MySQL数据备份功能。 此功能是配合博客写的,有些方法直接用的已有的&#xf…

【LAMMPS学习】三、构建LAMMPS(7)具有额外构建选项的软件包

3. 构建 LAMMPS 3.7.具有额外构建选项的软件包 当使用某些包进行构建时,除了Build_package页面上描述的步骤之外,可能还需要额外的步骤。 ​ 对于CMake构建,可能有额外的可选或必需的变量要设置。对于使用make进行构建,可能需…

Linux课程____进程管理

记录工作日志 script 240319.log CTRLd 退出 cat 240319.log //查看 一、查看进程 1.静态 ps -aux 显示所有包含其他使用者的行程 ps -elf 2.动态 top 3.pgrep 查看特定条件的进程 pgrep -l “log” 搜索特定的程序 pgrep -l "ssh" pgrep -l -U…

docker的常用命令

文章目录 Docker安装镜像管理列出镜像命令解析功能输出信息示例用途 拉取镜像构建镜像查找镜像删除镜像清理无用镜像 容器管理运行容器命令解析运行容器可选参数示例 列出容器列出所有容器(包括停止的)停止容器启动容器进入容器删除容器清理无用容器 容器…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤: 材料准备:选择合适的铸铁材料,并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造:根据平台的设计要求,制造适用的模具。模具一般由砂型、金属模具…

递归算法总结

递归算法总结 1、粗解递归算法2、递归算法例题(不包含其他算法,纯递归)eg1:LC509 fibonacci数列(简单)(0)题目描述(1)思路分析(2)pyth…

图论中的最小生成树:Kruskal与Prim算法深入解析

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

Prometheus+Grafana 监控Tongweb7(by lqw)

文章目录 1.准备工作2.Tongweb7部署3.Prometheus部署4.上传jar包并配置Tongweb75.Prometheus配置6.安装和配置Grafana 1.准备工作 本次参考:Prometheus监控Tongweb容器 1.使用虚拟机ip:192.168.10.51(tongweb),192.1…

vue iframe实现父页面实时调用子页面方法和内容

父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只…

[C语言]——操作符详解

目录 一.操作符的分类 二.二进制和进制转换 1.二进制转十进制 2.二进制转八进制和十六进制 2.1二进制转八进制 2.2二进制转十六进制 三.原码、反码、补码 四.移位操作符 1.左移操作符 2.右移操作符 五.位操作符:&、|、^、~ 练习1:编写代码实…