初八-目标跟踪

目标跟踪的任务是获得目标在连续图像序列中位置随时间变化的轨迹。

目标的表达用的都是形状或外观模型。选择的表达模型限制了其可以使用的运动模型或分解方法。比如点表达的目标只能体现平移运动。几何形状表达仿射或投影更加合适。而对非刚性目标,轮廓表达最为合适,可用参数性和非参数型的模型描述其运动。

 

上图是目标跟踪算法的分类,下表是具体分类和代表算法。

 

三种跟踪算法分别是:点跟踪,核跟踪,轮廓跟踪。

点跟踪:在连续帧中检测到的目标被表达为点。这种方法需要引入其它方法来进行目标检测。

核跟踪:关联与目标的形状和外观表达。核函数可以是关联与一个直方图的矩形或椭圆模板。目标通过在连续帧中计算核的运动来跟踪。运动可以是参数形式的平移、旋转或仿射等。

轮廓跟踪:由在每帧中估计目标区域进行跟踪。轮廓跟踪方法用到的信息可以是外观密度和形状模型。给定目标模型,轮廓由形状匹配或轮廓推导得到。这些方法都可以视作时域上的目标分割。

NEXT STEP

  下一Topic:点跟踪

好的,以下是使用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 农历日期:辛丑年腊月初四 ``` 注意:以上代码仅为示例,实际使用可能需要根据具体情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值