* xing_simple.hdev: Traffic monitoring (by Kalman filtering)
*
dev_update_off ()
dev_close_window ()
read_image (Image, 'xing/init')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
read_region (XingRegion, 'xing/xing')
dev_set_draw ('margin')
dev_set_colored (12)
dev_set_line_width (3)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
create_bg_esti (Image, 0.7, 0.7, 'fixed', 0.001, 0.03, 'on', 8.0, 10, 3.25, 15, BgEstiHandle)
为背景评估创建和初始化一个数据集
参数2和参数3是Kalman系统矩阵的参数。系统矩阵描述了基于卡尔曼滤波理论的灰度值变化系统。背景估计器为每个像素实现不同的系统。
参数4GainMode是否应该使用固定的卡尔曼滤波增益进行估计,或者增益是否应该根据估计和实际值之间的差别自适应。如果GainMode被设置为“固定”,那么参数5GAI1被用作预测前景的像素的卡尔曼增益,并且参数6GAI2作为预测为背景的像素的增益。GAIN1应该小于GAAI2,因为前景的适应应该比背景的适应慢。GaAI1和GaAI2均小于1。
如果GainMode被设置为“帧”,则计算前景和背景估计的表,其中包含所有256种可能灰度值变化的卡尔曼增益。GAAI1和GAAI2表示适应估计值与实际值之间的差异所需的帧数。因此,随着固定时间(即帧数),所需的卡尔曼增益随着灰度值差异而增长。因此GAAI1应该大于GAAI2。如果背景估计器用于生成假定在观察区域中总是存在移动对象的“空”场景,则针对不同灰度值差异的不同增益是有用的。在这种情况下,前景适配器(GAAI1)的适应时间不能太大。GAIN1和GAI2应大于1。
参数7Adapt Mode表示应用于估计值与实际值之间的灰度值差的前景/背景决策阈值是固定的还是根据背景像素的灰度偏差自适应的。
如果AdaptMode设置为“off”,则参数MimDIFF表示固定阈值。在这种情况下,参数STATNUM、RealCeNEC和TIMEC是没有意义的。
如果AdaptMode被设置为“on”,则MinDiff被解释为基本阈值。对于每个像素,根据像素值随时间的统计评价,将偏移添加到该阈值。STATNUM保存用于计算灰度值方差(FIR滤波器)的数据集(过去帧)的数目。置信区间用于确定置信区间。
for i := 0 to 587 by 1
read_image (ActualImage, 'xing/xing'+(i$'03'))
run_bg_esti (ActualImage, ForegroundRegion, BgEstiHandle)
评估背景并返回前景区域
connection (ForegroundRegion, ConnectedRegions)
intersection (ConnectedRegions, XingRegion, RegionIntersection)
select_shape (RegionIntersection, SelectedRegions, 'area', 'and', 20, 99999)
shape_trans (SelectedRegions, RegionTrans, 'rectangle1')
dev_display (ActualImage)
dev_display (RegionTrans)
endfor
give_bg_esti (BackgroundImage, BgEstiHandle)
返回评估背景图像
dev_display (BackgroundImage)
close_bg_esti (BgEstiHandle)
清空背景评估数据集
dev_set_draw ('fill')
dev_update_on ()