2、halcon+利用光流场检测运动的物体
*这个事例是应用optical_flow_mg这个算子来在一个图像序列中计算其光溜,并且分割其运动物体
dev_update_off ()//把程序窗口、变量窗口、显示窗体变为off状态
dev_close_window ()//*关闭显示窗口
read_image (Image1, 'xing/xing000')//读入图像
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)//打开一个新的带有所给图像纵横比图像窗口
*参数1.被给的图像2&3是以左上角为原点的所给窗口新的位置3&4是窗口的最小和最大限制值5.新的窗口句柄。
个人理解:这个算子就是按照所给图像的尺寸自己在基础上可以缩放大小。注意:设置之后在以后的新的窗体上都会默认应用。
*l 设置显示的矢量场参数
dev_set_paint (['vector_field',6,1,2])
*定义灰度值输出模型,,灰度值得输出模型具体要参见set_paint帮助文档上的,更具体详细。注意:在使用这个算子是输出为其他编程工具的时候会有不同的这个具体要仔细参见文档。
dev_set_draw ('margin')
for I := 1 to 587 by 1
read_image (Image2, 'xing/xing'+I$'03')//读出连续的图像序列
*计算光流
optical_flow_mg (Image1, Image2, VectorField, 'fdrig', 0.8, 1, 8, 5,'default_parameters', 'accurate')
*计算两幅图片的光流场。
参数:1&2是输入的两个单色图片序列的连续图片,
3为输出的光流结果
4是求取光流三种算法的选取其中的应用
5高斯平滑初始偏差初始值
6积分滤波偏差初始值
7平滑项在数据项中的权重
8梯度恒定性相对于灰度值恒定性的权重9多栅算法的名字10多栅算法的变量
*分割光流矢量场
threshold (VectorField, Region, 1, 10000)
*分割矢量场
*显示图像序列,标注在图像数据中光流场中移动的物体会被显示
dev_display (Image2)//显示光流图像
dev_set_color ('yellow')
dev_set_line_width (1)
dev_display (VectorField)
*//显示分割后的光流
dev_set_color ('green')
dev_set_line_width (3)
dev_display (Region)
*把先前的图像序列复制到现在的图像序列中
*完成的功能就是序列图像的更新.
copy_obj (Image2, Image1, 1, 1)
endfor
图片: