Halcon 使用光流算子检测运动物体

文章目录

  • 算子
    • optical_flow_mg 计算两个图像之间的光流
    • vector_field_length 计算向量场的向量长度
    • select_shape_std 选择给定形状的区域
    • vector_field_to_real 将矢量场图像转换为两个实值图像
    • intensity 计算灰度值的均值和偏差
    • local_max_sub_pix 以亚像素精度检测局部极大值
  • Halcon 光流算子示例
  • Halcon 获取移动物体的移动方向
  • Halcon 卫星图获取移动物体的移动方向

算子

optical_flow_mg 计算两个图像之间的光流

optical_flow_mg(ImageT1, ImageT2 : VectorField : Algorithm, SmoothingSigma, IntegrationSigma, FlowSmoothness, GradientConstancy, MGParamName, MGParamValue : )
当使用光流计算函数时,以下是参数的解释:ImageT1:输入的第一幅图像。ImageT2:输入的第二幅图像。VectorField:计算得到的光流结果,会存储在这个变量中。Algorithm:用于计算光流的算法,可以选择 'clg', 'ddraw', 'fdrig' 中的一个。SmoothingSigma:初始高斯平滑的标准差。这个参数用于控制光流计算过程中的图像平滑程度。IntegrationSigma:积分滤波器的标准差。这个参数影响了光流场的积分过程。FlowSmoothness:平滑项相对于数据项的权重。它影响了光流场的平滑程度。GradientConstancy:梯度稳定性相对于灰度稳定性的权重。这个参数用于平衡梯度稳定性和灰度稳定性在光流计算中的影响。MGParamName:多网格算法的参数名称,可以指定不同的参数名来调整多网格算法的行为。MGParamValue:多网格算法的参数值,根据实际需求进行设置。

vector_field_length 计算向量场的向量长度

vector_field_length(VectorField : Length : Mode : )
以下是各个参数的解释:VectorField:输入的矢量场,包含了需要计算长度的向量。Length:计算得到的向量长度结果将会存储在这个变量中。Mode:用于计算向量长度的模式选择参数。'length':计算向量的长度。'squared_length':计算向量的平方长度。

select_shape_std 选择给定形状的区域

select_shape_std(Regions : SelectedRegions : Shape, Percent : )
以下是各个参数的解释:Regions:输入的区域,包含需要进行选择的区域。SelectedRegions:经过选择后具有所需形状的区域将会存储在这个变量中。Shape:要检查的形状特征参数。'max_area':检查最大面积。'rectangle1':检查矩形1'rectangle2':检查矩形2。Percent:相似性度量参数,用于确定区域形状的相似度。默认值:70.0推荐值范围:10.0, 30.0, 50.0, 60.0, 70.0, 80.0, 90.0, 95.0, 100.0典型取值范围:0.0 ≤ Percent ≤ 100.0最小增量:0.1推荐增量:10.0

vector_field_to_real 将矢量场图像转换为两个实值图像

vector_field_to_real(VectorField : Row, Col : : )VectorField (输入对象): 这个参数代表一个矢量场,通常描述图像中每个点处矢量的方向和大小。Row (输出对象): 表示沿着行方向的矢量分量,指示图像中沿着行的矢量场分量。Col (输出对象): 表示沿着列方向的矢量分量,指示图像中沿着列的矢量场分量。

intensity 计算灰度值的均值和偏差

intensity(Regions, Image : : : Mean, Deviation)
参数如下:Regions (输入对象): 计算特征的区域。Image (输入对象): 灰度值图像,用于计算特征。Mean (输出控制): 区域的平均灰度值。Deviation (输出控制): 区域内灰度值的偏差

local_max_sub_pix 以亚像素精度检测局部极大值

local_max_sub_pix(Image : : Filter, Sigma, Threshold : Row, Column)
参数说明如下:Image(输入对象):单通道图像,表示输入图像。Filter(输入控制):字符串,用于计算局部导数的方法。默认值:'facet'可选值:'facet''gauss'Sigma(输入控制):实数,高斯核的标准差。如果Filter为'facet',则Sigma可以设为0.0,以避免对输入图像进行平滑处理。建议值:0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0约束:Sigma >= 0.0Threshold(输入控制):实数,Hessian矩阵特征值的绝对值最小值。默认值:5.0建议值:2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0约束:Threshold >= 0.0Row(输出控制):点y数组,检测到的极大值的行坐标。Column(输出控制):点x数组,检测到的极大值的列坐标。

Halcon 光流算子示例

在这里插入图片描述

dev_update_off ()
dev_close_window ()
* Initialize the image sequence.
read_image (Image1, 'xing/xing000')
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
* Set the display parameters for the vector field.
dev_set_paint (['vector_field',6,1,2])
dev_set_draw ('margin')
for I := 1 to 587 by 1* Read the current image of the image sequence.read_image (Image2, 'xing/xing' + I$'03')* Compute the optical flow.* 计算光流optical_flow_mg (Image1, Image2, VectorField, 'fdrig', 0.8, 1, 8, 5, 'default_parameters', 'accurate')* Segment the optical flow vector field.* 阈值处理threshold (VectorField, Region, 1, 10000)* Display the current image of the sequence.  Note that this means that* the optical flow vectors will also be displayed at the "end" of the movement* of the objects in the image.* 显示dev_display (Image2)* Display the optical flow.dev_set_color ('yellow')dev_set_line_width (1)dev_display (VectorField)* Display the segmented optical flow.dev_set_color ('green')dev_set_line_width (3)dev_display (Region)* Copy the current image to the previous image of the sequence.* 将当前图像复制到序列的前一个图像copy_obj (Image2, Image1, 1, 1)
endfor

在这里插入图片描述

Halcon 获取移动物体的移动方向

* This example demonstrates the use of the optical flow for
* the detection of moving objects in an image sequence.
* The region of interest is analyzed to detect moving objects.
* If a moving object is detected, the exit gate is opened automatically.
* 
* Initialize output window
dev_update_off ()
read_image (Image1, 'bicycle/bicycle_01')
ZoomFactor := 0.5
* 按照指定倍数放大图像
zoom_image_factor (Image1, Image1, ZoomFactor, ZoomFactor, 'constant')
dev_close_window ()
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
dev_set_draw ('margin')
* 
* Generate ROI
* 产生一个xld多边形区域
gen_contour_polygon_xld (ROI, [0,0,283,348,479,479] * ZoomFactor, [0,379,379,434,639,0] * ZoomFactor)
* 产生轮廓
gen_region_contour_xld (ROI, RegionROI, 'filled')
* 裁剪
reduce_domain (Image1, RegionROI, Image1ROI)
* 
* Main loop: Calculate optical flow and display moving area
* 
for I := 2 to 27 by 1read_image (Image2, 'bicycle/bicycle_' + I$'.2')* * Zoom images to speed-up calculation of optical flow* 图片放大zoom_image_factor (Image2, Image2, ZoomFactor, ZoomFactor, 'constant')* 按照xld轮廓裁剪reduce_domain (Image2, RegionROI, Image2ROI)* 光流计算optical_flow_mg (Image1ROI, Image2ROI, VectorField, 'fdrig', 0.8, 1, 10, 5, ['default_parameters','warp_zoom_factor'], ['fast',0.8])* 计算向量场的平方长度vector_field_length (VectorField, LengthImage, 'squared_length')* * Segment regions with moving objects in the defined ROI* 计算最小灰度值min_max_gray (RegionROI, LengthImage, 0.1, Min, Max, Range)dev_display (Image2)if (Max > 2)* 阈值处理向量场threshold (LengthImage, RegionMovement, 2, Max)* 形成单独的连通域connection (RegionMovement, ConnectedRegions)* Select largest moving region* 筛选出移动的区域select_shape_std (ConnectedRegions, RegionMovement, 'max_area', 70)area_center (RegionMovement, Area, RCenterNew, CCenterNew)* 移动区域大于0if (Area > 0)* 形成一个外轮廓shape_trans (RegionMovement, ConvexHullregion, 'convex')* 外轮廓和ROI区域求交集intersection (RegionROI, ConvexHullregion, RegionMovementInROI)* 将光流图片和外轮廓裁剪reduce_domain (VectorField, ConvexHullregion, VectorReduced)* 矢量图转换为实际图vector_field_to_real (VectorReduced, Row, Column)* * Estimate the movement direction and the speed* 计算方向和速度intensity (RegionMovementInROI, Row, MeanRow, Deviation)intensity (RegionMovementInROI, Column, MeanColumn, Deviation1)* * Display resultsdev_set_line_width (1)dev_set_color ('yellow')dev_display (VectorReduced)* Display region of interestdev_set_line_width (3)dev_set_color ('magenta')dev_display (RegionROI)* Display region of moving object in the region of interestdev_set_color ('green')dev_display (RegionMovementInROI)* 产生右箭头的轮廓gen_arrow_contour_xld (Arrow, RCenterNew, CCenterNew, RCenterNew + MeanRow, CCenterNew + MeanColumn, 10, 10)dev_display (Arrow)endifendif* copy_obj (Image2ROI, Image1ROI, 1, 1)
endfor

在这里插入图片描述

Halcon 卫星图获取移动物体的移动方向

* This example demonstrates the use of the optical flow operators.
* By calculating the optical flow between two images, the
* position, speed, and movement direction of particles are calculated.
* 1. 读取图片
dev_update_off ()
dev_close_window ()
* 
read_image (Image1, 'hydraulic_engineering/hydraulic_engineering_01')
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
* 
dev_set_draw ('margin')
RCenter := -1
CCenter := -1
MeanR := 0
MeanC := 0
tanDir := 0
ArrowLength := 15
MinLength := 0.375
* 
for Index := 2 to 50 by 1read_image (Image2, 'hydraulic_engineering/hydraulic_engineering_' + Index$'02')* 2.估计移动粒子的区域* Calculate the optical flow between two images* 计算光流optical_flow_mg (Image1, Image2, VectorField, 'clg', 1, 1, 1000, 5, 'default_parameters', 'fast')* 计算向量场vector_field_length (VectorField, LengthImage, 'squared_length')* * Estimate the region with moving particles using the length* of the vectors of the calculated vector field** 计算灰度值min_max_gray (LengthImage, LengthImage, 0, Min, MaxLength, Range)if (MaxLength > MinLength)threshold (LengthImage, ROI, MinLength, MaxLength)* * Find the position of particles in the original image using* an estimated ROIdilation_circle (ROI, RegionDilation, 3.5)reduce_domain (Image2, RegionDilation, ImageReduced)* 获取裁剪后图片的亚像素极大值点的行列坐标local_max_sub_pix (ImageReduced, 'facet', 1.0, 4, Row, Column)* dev_set_color ('cyan')dev_set_line_width (2)if (|Row| > 0)* 产生区域点gen_region_points (Points, Row, Column)* 将点形成单独的连通域connection (Points, ConnectedRegions)* 将点膨胀dilation_circle (ConnectedRegions, PointsDilated, 2.5)* * Display found particles and their movement directions* 3.获取移动方向count_obj (PointsDilated, NumberReg)dev_display (Image2)dev_display (PointsDilated)for J := 1 to NumberReg by 1select_obj (PointsDilated, SelectedRegions, J)* * Estimate the speed of the particlesreduce_domain (VectorField, SelectedRegions, ImageReducedVF)* 将矢量图转换为两个有方向的实值图像vector_field_to_real (ImageReducedVF, RowImage, ColumnImage)* 计算 行列坐标的平均灰度值和偏差intensity (ColumnImage, ColumnImage, MeanC, Deviation)intensity (RowImage, RowImage, MeanR, Deviation)Length := sqrt(MeanR * MeanR + MeanC * MeanC)* 绘制箭头gen_arrow_contour_xld (Arrow, Row[J - 1], Column[J - 1], Row[J - 1] + MeanR / Length * ArrowLength, Column[J - 1] + MeanC / Length * ArrowLength, 5, 10)dev_display (Arrow)endforendifendifcopy_obj (Image2, Image1, 1, 1)
endfor

在这里插入图片描述

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

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

相关文章

LVS负载均衡群集之NAT与DR模式

一 集群和分布式 企业群集应用概述 群集的含义 Cluster,集群、群集 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。 问题? 互联网应用中,随着站点对…

JVM优化

Java编码执行流程图 a.java ->javac(前端编译器,javac属于其中一种) ->a.class 和java类库 ->classloader-> Java解释器(一行行解释并运行) 或即时编译器JIT(Just In Time,属于后端编译器)JIT可以将一个方法&#xff…

SpringBoot多数据源切换 多数据源事务解决方案 二

https://zhuanlan.zhihu.com/p/612825647?utm_id0 https://blog.csdn.net/guzhangyu12345/article/details/108559810 SpringBoot多数据源事务解决方案 https://blog.csdn.net/u013407099/article/details/124526396多数据源切换下保证事务解决方案 https://blog.csdn.net/re…

郑州大学2024年3月acm实验室招新赛题解(A-L)

这里感谢一下计算机学术交流协会会长,acm实验室的中坚成员,以及本次比赛的出题人之一孙昱涵将他的账号借给了我。 回顾一下的话,这场的难度其实不是很大,不过对招新的新手来说难度还是挺大的。去掉签到都没签出来的选手的话&…

【C++ Primer Plus学习记录】第6章复习题

1.请看下面两个计算空格和换行符数目的代码片段: //Version 1 while(cin.get(ch)) //quit on eof,EOF(检测文件尾) { if(ch )spaces;if(ch \n)newlines; }//Version 2 while(cin.get(ch)) //quit on eof { if(ch )spaces;else if(ch \n)newlines; } 第…

C++_异常

目录 1、异常的关键字 2、异常的写法 3、异常的使用规则 3.1 规则1 3.2 规则2 3.3 规则3 3.4 规则4 3.5 规则5 4、异常的重新抛出 5、异常的规范 5.1 C98的异常规范 5.2 C11的异常规范 6、C标准库的异常体系 7、异常的优缺点 结语 前言: C的异常…

学习数据节构和算法的第15天

单链表的实现 链表的基本结构 #pragma once #include<stdio.h> typedf int SLTDataType; typedy struct SListNode {SLTDataType data;struct SListNode*next; }SLTNode;void Slisprint(SLTNode*phead);打印链表 #include<stdio.h> void SListPrint(SLTNode*phe…

详解DSLS达索许可管理器的安装与配置

DSLS的安装与配置 一、DSLS下载二、安装DLS三、使用DSLS四、更改计算机ID五、部分常见DSLS相关问题 一、DSLS下载 下载地址&#xff1a;https://software.3ds.com/?ticketST-5190987-dUM0dflc6zfjf04F5EXx-cas 注意&#xff1a;需要一个注册了的达索账号才能登录进去下载 一…

飞塔防火墙开局百篇——002.FortiGate上网配置——透明模式配置(Transparent)

透明模式配置 开启透明模式创建策略 在不改变现有网络拓扑前提下&#xff0c;将防火墙NGFW以透明模式部署到网络中&#xff0c;放在路由器和交换机之间&#xff0c;防火墙为透明模式&#xff0c;对内网网段192.168.1.0/24的上网进行4~7层的安全防护。 登陆FortiGate防火墙界面&…

24.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-根据配置文件自动生成C语言头文件

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;23.实现配置工具…

【infiniband监控】grafana变量使用细化优化监控指标

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

Bitmap实现原理应用场景

Bitmap是什么&#xff1f; 用内存中连续的二进制位&#xff08;bit&#xff09;&#xff0c;用0或1标识数据是否存在。 长度为10的bitmap&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4 在bitmap中存在。 Bitmap实现 1、字符串 数值对应字符串的下标、二进制位0&…

Centos7安装postgresql14步骤

1、进入网址 https://www.postgresql.org/download/ 2、按步骤执行 # Install the repository RPM: sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm# Install PostgreSQL: sudo yum install -y…

ST MotorControl Workbench 6.2.1 使用总结

目录 前言 软件安装 根据自己硬件配置参数 生成代码 开发板运行 ​ 总结 前言 好久没有玩ST的电机库了&#xff0c;已经更新到了MotorControl Workbench 6.2.1&#xff0c;6以上的版本比5的版本界面操作有很大的不同&#xff0c;核心算法有些增加。最近体验了一把使用自…

linux设置systemctl启动

linux设置nginx systemctl启动 生成nginx.pid文件 #验证nginx的配置&#xff0c;并生成nginx.pid文件 /usr/local/nginx/sbin/nginx -t #pid文件目录在 /usr/local/nginx/run/nginx.pid 设置systemctl启动nginx #添加之前需要先关闭启动状态的nginx&#xff0c;让nginx是未…

一款好用的AI工具——边界AICHAT(三)

目录 3.23、文档生成PPT演示3.24、AI文档翻译3.25、AI翻译3.26、论文模式3.27、文章批改3.28、文章纠正3.29、写作助手3.30、文言文翻译3.31、日报周报月报生成器3.32、OCR-DOC办公文档识别3.33、AI真人语音合成3.34、录音音频总结3.35、域方模型市场3.36、模型创建3.37、社区交…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-4、线条平滑曲面(修改颜色)去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

I2C驱动AT24C02

文章目录 一、硬件电路设备地址 二、使用步骤字节写:页写入:任意写:任意读: 一、硬件电路 设备地址 设备需要一个8位的设备地址字&#xff0c;后面跟着一个启动条件&#xff0c;以使芯片能够进行读或写操作 设备地址字由一个强制的1,0序列的前四个最有效的位&#xff0c;如所示…

(二)运行自己的stable-diffusion

前面的步骤如https://datawhaler.feishu.cn/docx/BwjzdQPJRonFh8xeiSOcRUI3n8b所示 拷贝、解压文件后&#xff0c;进入到stable-diffusion-webui的文件夹中&#xff0c;文件如下&#xff1a; 启动&#xff1a; 运行效果&#xff1a; 由于生成了好几个图&#xff0c;所以…

springboot的Converter和HttpMessageConveter

Converter和HttpMessageConveter是springboot和springmvc在处理请求的时候需要用到的。但是这两者的完全是不一样的&#xff0c;作用的地方也不一样。 1&#xff0c;springboot和springmvc处理请求的流程 先来回顾一下处理请求的流程&#xff1a; 用户向服务器发送请求&#…