初九-目标跟踪-点跟踪

点跟踪

跟踪问题可以用帧与帧之间检测到的目标点之间的关系来表达。点之间的关联问题的复杂性特别表现在遮挡、误检测、目标进出画面等情况。

总的来说,点关联的方法可分为两大类:确定性方法和统计性方法。前者通常用定性的运动限制方法,后者用目标检测和不确定性的建模来建立关联。

 

Deterministic Methods for Correspondence.

      确定性的方法定义了在一系列约束条件下,关联t时刻和t-1时刻图像帧中每个目标的成本。关联成本的最小化规划为一个优化组合问题。可以用最优分配方法求解,如匈牙利算法,贪婪搜索算法。关联成本的限制条件可以使以下条件的组合定义,这些条件同时适用于确定性和统计性的方法:

  Proximity - 假设目标位置在两帧之间没有明显变化

  Maximum velocity - 定义了目标速度的上限,即限制了目标周围可能的圆形关联邻域

  Small velocity change - 家丁目标的运动方向和速度没有明显变化

  Common motion - 假定在一个较小邻域内的目标们的速度相似

  Rigidity - 假设目标在3D世界中是刚性的,即真实目标上的两个点之间的距离保持不变

  Proximal uniformity - 是Proximity 和Common motion的组合约束

这些方法中较新较完善的是Veenman et al. [2001]和Shafique and Shah [2003]的算法。

 

Statistical Methods for Correspondence.

统计性方法在目标状态估计中考虑了观测噪声和模型不确定性,用状态空间方法建模速度、位置、加速度等目标属性。

  目标信息通常由一系列的状态表达:Xt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用C语言实现公历转农历的代码示例: ```c #include <stdio.h> // 声明农历年份对应的天干地支 char *TG[] = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"}; char *DZ[] = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; // 声明农历月份对应的大小月 char *XM[] = {"大月", "小月"}; // 声明农历日期对应的天数 char *Ri[] = {"*", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"}; // 声明农历年份数据 int lunar_year[] = { 0x04bd8, /* 1900 */ 0x04ae0, /* 1901 */ ... 0x0a4d0, /* 2099 */ }; // 声明农历月份大小数据 int lunar_month[] = { 0x0000, /* 0, 月份为0表示该年有闰月 */ 0x004b, /* 1 */ 0x00a4, /* 2 */ ... 0x0095, /* 12 */ }; // 声明农历日期数据 int lunar_day[] = { 0x0000, /* 0 */ 0x0001, /* 1 */ 0x0003, /* 2 */ ... 0x0c00, /* 30 */ }; // 获取农历年份对应的天干地支 void get_lunar_year(int year, char *tg, char *dz) { int tg_index = (year - 4) % 10; int dz_index = (year - 4) % 12; sprintf(tg, "%s", TG[tg_index]); sprintf(dz, "%s", DZ[dz_index]); } // 获取农历月份大小 int get_lunar_month_size(int year, int month) { int leap = lunar_month[year - 1900] & 0xf; return (lunar_month[year - 1900] & (0x10000 >> month)) ? 30 : 29 - (month == leap); } // 获取农历日期 void get_lunar_day(int day, char *ri) { sprintf(ri, "%s", Ri[day]); } // 将公历日期转换成农历日期 void solar_to_lunar(int year, int month, int day, char *tg, char *dz, char *xm, char *ri) { int lunar_year, lunar_month, lunar_day, lunar_leap; int i, temp, offset; // 计算距离1900年1月31日的天数 offset = (year - 1900) * 365 + (year - 1900) / 4 + day - 31; for (i = 0; i < month - 1; i++) { offset += lunar_month[year - 1900] & (0x10000 >> i) ? 30 : 29; } // 如果该年有闰月,则计算闰月月份和大小 lunar_leap = (lunar_month[year - 1900] & 0xf) && (lunar_month[year - 1900] & 0x100) ? 1 : 0; temp = offset - lunar_month[year - 1900] & (0x10000 >> month) ? 30 : 29; if (temp < 0) { temp += lunar_month[year - 1900] & (0x10000 >> month) ? 30 : 29; lunar_month = month - 1; if (lunar_month == lunar_leap) { lunar_month = 0 - lunar_month; } } else { lunar_month = month; } lunar_day = temp + 1; // 计算农历年份对应的天干地支 get_lunar_year(year, tg, dz); // 计算农历月份大小 sprintf(xm, "%s", XM[lunar_month[lunar_month < 0 ? -lunar_month : lunar_month] - 1]); // 计算农历日期 get_lunar_day(lunar_day, ri); } int main() { int year, month, day; char tg[4], dz[4], xm[4], ri[4]; printf("请输入公历日期(格式:年 月 日,如:2022 12 31):"); scanf("%d %d %d", &year, &month, &day); solar_to_lunar(year, month, day, tg, dz, xm, ri); printf("农历日期:%s年%s%s月%s\n", tg, dz, xm, ri); return 0; } ``` 使用示例: ``` 请输入公历日期(格式:年 月 日,如:2022 12 31):2022 12 31 农历日期:辛丑年腊月初四 ``` 注意:以上代码仅为示例,实际使用中可能需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值