[{"data":1,"prerenderedAt":21533},["ShallowReactive",2],{"navigation":3,"api-navigation":126,"\u002Fnotebooks\u002Fkalman":328,"docyard:crossref-index":21532},[4,8,38,44,48,122],{"title":5,"path":6,"stem":7},"Getting Started","\u002Fgetting-started","1.getting-started",{"title":9,"path":10,"stem":11,"children":12,"page":37},"Recipes","\u002Frecipes","2.recipes",[13,17,21,25,29,33],{"title":14,"path":15,"stem":16},"Recipe: two-stage cascade tracker","\u002Frecipes\u002Fcascade_tracker","2.recipes\u002Fcascade_tracker",{"title":18,"path":19,"stem":20},"Recipe: cosine appearance tracker","\u002Frecipes\u002Fcosine_tracker","2.recipes\u002Fcosine_tracker",{"title":22,"path":23,"stem":24},"Recipe: Kalman motion tracker","\u002Frecipes\u002Fkalman_motion_tracker","2.recipes\u002Fkalman_motion_tracker",{"title":26,"path":27,"stem":28},"Recipe: learned MOTR-style appearance tracker","\u002Frecipes\u002Flearned_motr_tracker","2.recipes\u002Flearned_motr_tracker",{"title":30,"path":31,"stem":32},"Recipe: overlap-IoU tracker (port of 1.x models.overlap)","\u002Frecipes\u002Foverlap_tracker","2.recipes\u002Foverlap_tracker",{"title":34,"path":35,"stem":36},"Recipe: SORT-style tracker on unitrack 2.0","\u002Frecipes\u002Fsort","2.recipes\u002Fsort",false,{"title":39,"path":40,"stem":41,"children":42},"API reference","\u002Fapi","3.api\u002Findex",[43],{"title":39,"path":40,"stem":41},{"title":45,"path":46,"stem":47},"Migrating from 1.x to 2.0","\u002Fmigration","4.migration",{"title":49,"path":50,"stem":51,"children":52,"page":37},"Notebooks","\u002Fnotebooks","5.notebooks",[53,84,88],{"title":54,"path":55,"stem":56,"children":57},"Embedding \u002F appearance filters","\u002Fnotebooks\u002Fembedding_filters","5.notebooks\u002Fembedding_filters\u002Findex",[58,59,64,68,72,76,80],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"icon":63},"Embedding filters 1 — Exponential moving average (EMA)","\u002Fnotebooks\u002Fembedding_filters\u002Fema","5.notebooks\u002Fembedding_filters\u002F1.ema","i-lucide-notebook",{"title":65,"path":66,"stem":67,"icon":63},"Embedding filters 2 — Diagonal Kalman","\u002Fnotebooks\u002Fembedding_filters\u002Fkalman_diagonal","5.notebooks\u002Fembedding_filters\u002F2.kalman_diagonal",{"title":69,"path":70,"stem":71,"icon":63},"Embedding filters 3 — von Mises-Fisher (directional)","\u002Fnotebooks\u002Fembedding_filters\u002Fvmf_directional","5.notebooks\u002Fembedding_filters\u002F3.vmf_directional",{"title":73,"path":74,"stem":75,"icon":63},"Embedding filters 4 — Ensemble Kalman & information filters","\u002Fnotebooks\u002Fembedding_filters\u002Fenkf_information","5.notebooks\u002Fembedding_filters\u002F4.enkf_information",{"title":77,"path":78,"stem":79,"icon":63},"Embedding filters 5 — Memory bank & learned propagation","\u002Fnotebooks\u002Fembedding_filters\u002Fgallery_and_learned","5.notebooks\u002Fembedding_filters\u002F5.gallery_and_learned",{"title":81,"path":82,"stem":83,"icon":63},"Embedding filters 6 — summary & benchmark","\u002Fnotebooks\u002Fembedding_filters\u002Fsummary_benchmark","5.notebooks\u002Fembedding_filters\u002F6.summary_benchmark",{"title":85,"path":86,"stem":87,"icon":63},"Kalman filters for motion prediction in tracking","\u002Fnotebooks\u002Fkalman","5.notebooks\u002Fkalman",{"title":89,"path":90,"stem":91,"children":92},"Tutorial notebooks","\u002Fnotebooks\u002Ftutorials","5.notebooks\u002Ftutorials\u002Findex",[93,94,98,102,106,110,114,118],{"title":89,"path":90,"stem":91},{"title":95,"path":96,"stem":97,"icon":63},"1. Quickstart — your first tracker","\u002Fnotebooks\u002Ftutorials\u002Fquickstart","5.notebooks\u002Ftutorials\u002F1.quickstart",{"title":99,"path":100,"stem":101,"icon":63},"2. The data model — typed records that flow through a tracker","\u002Fnotebooks\u002Ftutorials\u002Fdata_model","5.notebooks\u002Ftutorials\u002F2.data_model",{"title":103,"path":104,"stem":105,"icon":63},"3. The cost & gate zoos","\u002Fnotebooks\u002Ftutorials\u002Fcosts_and_gates","5.notebooks\u002Ftutorials\u002F3.costs_and_gates",{"title":107,"path":108,"stem":109,"icon":63},"4. The composable pipeline tree","\u002Fnotebooks\u002Ftutorials\u002Fpipeline_tree","5.notebooks\u002Ftutorials\u002F4.pipeline_tree",{"title":111,"path":112,"stem":113,"icon":63},"5. State evolution and lifecycle","\u002Fnotebooks\u002Ftutorials\u002Fstates_and_lifecycle","5.notebooks\u002Ftutorials\u002F5.states_and_lifecycle",{"title":115,"path":116,"stem":117,"icon":63},"6. End-to-end: K=2 cascaded and parallel fusion","\u002Fnotebooks\u002Ftutorials\u002Fcascaded_and_parallel","5.notebooks\u002Ftutorials\u002F6.cascaded_and_parallel",{"title":119,"path":120,"stem":121,"icon":63},"7. Migration & new possibilities — driven by a real detector","\u002Fnotebooks\u002Ftutorials\u002Fmigration","5.notebooks\u002Ftutorials\u002F7.migration",{"title":123,"path":124,"stem":125},"Unitrack","\u002F","index",[127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,249,252,255,258,261,263,266,269,272,274,277,280,282,285,288,290,293,296,299,302,305,308,311,313,315,318,320,323,326],{"title":128,"path":129},"assignment","\u002Fapi\u002Fassignment",{"title":131,"path":132},"associate","\u002Fapi\u002Fassignment\u002Fassociate",{"title":134,"path":135},"clip_associate","\u002Fapi\u002Fassignment\u002Fclip_associate",{"title":137,"path":138},"lap","\u002Fapi\u002Fassignment\u002Flap",{"title":140,"path":141},"lapjv","\u002Fapi\u002Fassignment\u002Flapjv",{"title":143,"path":144},"benchmarks","\u002Fapi\u002Fbenchmarks",{"title":146,"path":147},"hota","\u002Fapi\u002Fbenchmarks\u002Fhota",{"title":149,"path":150},"datasets","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fdatasets",{"title":152,"path":153},"learned_modules","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Flearned_modules",{"title":155,"path":156},"metric","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmetric",{"title":158,"path":159},"models","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fmodels",{"title":161,"path":162},"protocols","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Fprotocols",{"title":164,"path":165},"render","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frender",{"title":167,"path":168},"report","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Freport",{"title":170,"path":171},"runner","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Frunner",{"title":173,"path":174},"tracker","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftracker",{"title":176,"path":177},"train_learned","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftrain_learned",{"title":179,"path":180},"types","\u002Fapi\u002Fbenchmarks\u002Fhota\u002Ftypes",{"title":182,"path":183},"costs","\u002Fapi\u002Fcosts",{"title":185,"path":186},"combinators","\u002Fapi\u002Fcosts\u002Fcombinators",{"title":188,"path":189},"distance","\u002Fapi\u002Fcosts\u002Fdistance",{"title":191,"path":192},"gallery","\u002Fapi\u002Fcosts\u002Fgallery",{"title":194,"path":195},"overlap","\u002Fapi\u002Fcosts\u002Foverlap",{"title":197,"path":198},"data","\u002Fapi\u002Fdata",{"title":200,"path":201},"clip","\u002Fapi\u002Fdata\u002Fclip",{"title":203,"path":204},"cost","\u002Fapi\u002Fdata\u002Fcost",{"title":206,"path":207},"detections","\u002Fapi\u002Fdata\u002Fdetections",{"title":209,"path":210},"frame","\u002Fapi\u002Fdata\u002Fframe",{"title":212,"path":213},"gate","\u002Fapi\u002Fdata\u002Fgate",{"title":215,"path":216},"match","\u002Fapi\u002Fdata\u002Fmatch",{"title":218,"path":219},"tensor_spec","\u002Fapi\u002Fdata\u002Ftensor_spec",{"title":221,"path":222},"tracklets","\u002Fapi\u002Fdata\u002Ftracklets",{"title":224,"path":225},"gates","\u002Fapi\u002Fgates",{"title":227,"path":228},"motion","\u002Fapi\u002Fgates\u002Fmotion",{"title":230,"path":231},"simple","\u002Fapi\u002Fgates\u002Fsimple",{"title":233,"path":234},"soft","\u002Fapi\u002Fgates\u002Fsoft",{"title":236,"path":237},"spatial","\u002Fapi\u002Fgates\u002Fspatial",{"title":239,"path":240},"lifecycle","\u002Fapi\u002Flifecycle",{"title":242,"path":243},"filters","\u002Fapi\u002Flifecycle\u002Ffilters",{"title":245,"path":246},"policies","\u002Fapi\u002Flifecycle\u002Fpolicies",{"title":233,"path":248},"\u002Fapi\u002Flifecycle\u002Fsoft",{"title":250,"path":251},"status","\u002Fapi\u002Flifecycle\u002Fstatus",{"title":253,"path":254},"visibility","\u002Fapi\u002Flifecycle\u002Fvisibility",{"title":256,"path":257},"pipeline","\u002Fapi\u002Fpipeline",{"title":259,"path":260},"base","\u002Fapi\u002Fpipeline\u002Fbase",{"title":185,"path":262},"\u002Fapi\u002Fpipeline\u002Fcombinators",{"title":264,"path":265},"diff","\u002Fapi\u002Fpipeline\u002Fdiff",{"title":267,"path":268},"merge","\u002Fapi\u002Fpipeline\u002Fmerge",{"title":270,"path":271},"states","\u002Fapi\u002Fstates",{"title":259,"path":273},"\u002Fapi\u002Fstates\u002Fbase",{"title":275,"path":276},"directional","\u002Fapi\u002Fstates\u002Fdirectional",{"title":278,"path":279},"ema","\u002Fapi\u002Fstates\u002Fema",{"title":191,"path":281},"\u002Fapi\u002Fstates\u002Fgallery",{"title":283,"path":284},"identity","\u002Fapi\u002Fstates\u002Fidentity",{"title":286,"path":287},"kalman","\u002Fapi\u002Fstates\u002Fkalman",{"title":259,"path":289},"\u002Fapi\u002Fstates\u002Fkalman\u002Fbase",{"title":291,"path":292},"bbox","\u002Fapi\u002Fstates\u002Fkalman\u002Fbbox",{"title":294,"path":295},"centroid","\u002Fapi\u002Fstates\u002Fkalman\u002Fcentroid",{"title":297,"path":298},"ensemble","\u002Fapi\u002Fstates\u002Fkalman\u002Fensemble",{"title":300,"path":301},"information","\u002Fapi\u002Fstates\u002Fkalman\u002Finformation",{"title":303,"path":304},"project","\u002Fapi\u002Fstates\u002Fkalman\u002Fproject",{"title":306,"path":307},"update","\u002Fapi\u002Fstates\u002Fkalman\u002Fupdate",{"title":309,"path":310},"learned","\u002Fapi\u002Fstates\u002Flearned",{"title":233,"path":312},"\u002Fapi\u002Fstates\u002Fsoft",{"title":173,"path":314},"\u002Fapi\u002Ftracker",{"title":316,"path":317},"batch","\u002Fapi\u002Ftracker\u002Fbatch",{"title":200,"path":319},"\u002Fapi\u002Ftracker\u002Fclip",{"title":321,"path":322},"memory","\u002Fapi\u002Ftracker\u002Fmemory",{"title":324,"path":325},"multistream","\u002Fapi\u002Ftracker\u002Fmultistream",{"title":173,"path":327},"\u002Fapi\u002Ftracker\u002Ftracker",{"id":329,"title":85,"body":330,"description":21526,"extension":21527,"meta":21528,"navigation":21529,"path":86,"seo":21530,"stem":87,"__hash__":21531},"content\u002F5.notebooks\u002Fkalman.md",{"type":331,"value":332,"toc":21500},"minimark",[333,337,351,665,668,794,809,814,841,1121,1126,1163,2753,3382,3386,3397,3411,3830,4421,4427,4431,4442,5387,5392,5396,5418,5432,6036,6856,6861,7307,7312,7316,7329,7332,7980,9032,9037,9041,9061,9064,9983,10678,10683,10687,10700,10710,11354,11886,11891,11898,11902,11920,11924,11927,12724,12729,12734,12738,12749,13914,13919,13922,13929,13936,13955,14755,14760,14764,14771,15858,15863,15867,15885,16985,16990,16994,17004,18026,18031,18035,18055,19023,19028,19036,19047,20365,20370,20374,20411,21406,21411,21415,21481,21496],[334,335,85],"h1",{"id":336},"kalman-filters-for-motion-prediction-in-tracking",[338,339,340,341,345,346,350],"p",{},"A tracker has to answer one question every frame: ",[342,343,344],"em",{},"given everything\nI have seen so far, where is each object now — and how sure am I?","\nA ",[347,348,349],"strong",{},"Kalman filter"," answers both at once. It carries, per object, a\nGaussian belief over a latent state (position, velocity, size, …)\nand rolls it forward in two steps:",[352,353,354,655],"ul",{},[355,356,357,360,361,490,491,646,647,650,651,654],"li",{},[347,358,359],{},"Predict"," — push the belief through a motion model\n",[362,363,366,406],"span",{"className":364},[365],"katex",[362,367,370],{"className":368},[369],"katex-mathml",[371,372,374],"math",{"xmlns":373},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[375,376,377,401],"semantics",{},[378,379,380,393,396,399],"mrow",{},[381,382,383,387],"msup",{},[384,385,386],"mi",{},"x",[388,389,392],"mo",{"mathvariant":390,"lspace":391,"rspace":391},"normal","0em","′",[388,394,395],{},"=",[384,397,398],{},"F",[384,400,386],{},[402,403,405],"annotation",{"encoding":404},"application\u002Fx-tex","x' = F x",[362,407,411,476],{"className":408,"ariaHidden":410},[409],"katex-html","true",[362,412,414,419,464,469,473],{"className":413},[259],[362,415],{"className":416,"style":418},[417],"strut","height:0.7519em;",[362,420,423,427],{"className":421},[422],"mord",[362,424,386],{"className":425},[422,426],"mathnormal",[362,428,431],{"className":429},[430],"msupsub",[362,432,435],{"className":433},[434],"vlist-t",[362,436,439],{"className":437},[438],"vlist-r",[362,440,443],{"className":441,"style":418},[442],"vlist",[362,444,446,451],{"style":445},"top:-3.063em;margin-right:0.05em;",[362,447],{"className":448,"style":450},[449],"pstrut","height:2.7em;",[362,452,458],{"className":453},[454,455,456,457],"sizing","reset-size6","size3","mtight",[362,459,461],{"className":460},[422,457],[362,462,392],{"className":463},[422,457],[362,465],{"className":466,"style":468},[467],"mspace","margin-right:0.2778em;",[362,470,395],{"className":471},[472],"mrel",[362,474],{"className":475,"style":468},[467],[362,477,479,483,487],{"className":478},[259],[362,480],{"className":481,"style":482},[417],"height:0.6833em;",[362,484,398],{"className":485,"style":486},[422,426],"margin-right:0.1389em;",[362,488,386],{"className":489},[422,426],", and grow its covariance ",[362,492,494,532],{"className":493},[365],[362,495,497],{"className":496},[369],[371,498,499],{"xmlns":373},[375,500,501,529],{},[378,502,503,510,512,514,516,523,526],{},[381,504,505,508],{},[384,506,507],{},"P",[388,509,392],{"mathvariant":390,"lspace":391,"rspace":391},[388,511,395],{},[384,513,398],{},[384,515,507],{},[381,517,518,520],{},[384,519,398],{},[384,521,522],{"mathvariant":390},"⊤",[388,524,525],{},"+",[384,527,528],{},"Q",[402,530,531],{"encoding":404},"P' = F P F^\\top + Q",[362,533,535,582,636],{"className":534,"ariaHidden":410},[409],[362,536,538,541,573,576,579],{"className":537},[259],[362,539],{"className":540,"style":418},[417],[362,542,544,547],{"className":543},[422],[362,545,507],{"className":546,"style":486},[422,426],[362,548,550],{"className":549},[430],[362,551,553],{"className":552},[434],[362,554,556],{"className":555},[438],[362,557,559],{"className":558,"style":418},[442],[362,560,561,564],{"style":445},[362,562],{"className":563,"style":450},[449],[362,565,567],{"className":566},[454,455,456,457],[362,568,570],{"className":569},[422,457],[362,571,392],{"className":572},[422,457],[362,574],{"className":575,"style":468},[467],[362,577,395],{"className":578},[472],[362,580],{"className":581,"style":468},[467],[362,583,585,589,592,595,625,629,633],{"className":584},[259],[362,586],{"className":587,"style":588},[417],"height:0.9324em;vertical-align:-0.0833em;",[362,590,398],{"className":591,"style":486},[422,426],[362,593,507],{"className":594,"style":486},[422,426],[362,596,598,601],{"className":597},[422],[362,599,398],{"className":600,"style":486},[422,426],[362,602,604],{"className":603},[430],[362,605,607],{"className":606},[434],[362,608,610],{"className":609},[438],[362,611,614],{"className":612,"style":613},[442],"height:0.8491em;",[362,615,616,619],{"style":445},[362,617],{"className":618,"style":450},[449],[362,620,622],{"className":621},[454,455,456,457],[362,623,522],{"className":624},[422,457],[362,626],{"className":627,"style":628},[467],"margin-right:0.2222em;",[362,630,525],{"className":631},[632],"mbin",[362,634],{"className":635,"style":628},[467],[362,637,639,643],{"className":638},[259],[362,640],{"className":641,"style":642},[417],"height:0.8778em;vertical-align:-0.1944em;",[362,644,528],{"className":645},[422,426],". This is\nthe filter's guess about the ",[342,648,649],{},"next"," frame, ",[342,652,653],{},"before"," it sees any\ndetection. It is a full distribution, not a point.",[355,656,657,660,661,664],{},[347,658,659],{},"Update"," — when a detection arrives, fuse it (Joseph-form Kalman\ngain), pulling the mean toward the measurement and ",[342,662,663],{},"shrinking"," the\ncovariance by however much the measurement was worth.",[338,666,667],{},"This notebook visualizes that loop for the five state types unitrack\nships a Kalman model for:",[669,670,671,690],"table",{},[672,673,674],"thead",{},[675,676,677,681,684,687],"tr",{},[678,679,680],"th",{},"State",[678,682,683],{},"unitrack class",[678,685,686],{},"latent state",[678,688,689],{},"measurement",[691,692,693,715,736,754,774],"tbody",{},[675,694,695,699,705,710],{},[696,697,698],"td",{},"2-D point",[696,700,701],{},[702,703,704],"code",{},"KalmanCentroid2D",[696,706,707],{},[702,708,709],{},"[x, y, vx, vy]",[696,711,712],{},[702,713,714],{},"[x, y]",[675,716,717,720,726,731],{},[696,718,719],{},"2-D box",[696,721,722,725],{},[702,723,724],{},"KalmanBBox"," (SORT)",[696,727,728],{},[702,729,730],{},"[x, y, a, h, vx, vy, va]",[696,732,733],{},[702,734,735],{},"[x, y, a, h]",[675,737,738,741,746,750],{},[696,739,740],{},"2-D mask",[696,742,743,745],{},[702,744,704],{}," on the mask centroid",[696,747,748],{},[702,749,709],{},[696,751,752],{},[702,753,714],{},[675,755,756,759,764,769],{},[696,757,758],{},"3-D point cloud",[696,760,761],{},[702,762,763],{},"KalmanCentroid3D",[696,765,766],{},[702,767,768],{},"[x,y,z, vx,vy,vz]",[696,770,771],{},[702,772,773],{},"[x, y, z]",[675,775,776,779,785,790],{},[696,777,778],{},"kernel \u002F appearance",[696,780,781,784],{},[702,782,783],{},"KalmanLinear"," (random walk)",[696,786,787],{},[702,788,789],{},"[e₁ … e_d]",[696,791,792],{},[702,793,789],{},[338,795,796,797,800,801,804,805,808],{},"For points, boxes and masks we draw the ",[347,798,799],{},"object's trajectory over\ntime"," ",[342,802,803],{},"and"," the filter's ",[347,806,807],{},"one-step-ahead predictive distribution","\n— the ellipse it would hand an association gate as \"the detection\nshould land about here.\" The last section stress-tests the filter:\nwhere it shines (occlusion, noise) and where it breaks (maneuvers,\nbad tuning, crossing targets).",[810,811,813],"h2",{"id":812},"setup","Setup",[338,815,816,817,820,821,824,825,828,829,832,833,836,837,840],{},"Everything here is pure ",[702,818,819],{},"unitrack"," + ",[702,822,823],{},"matplotlib",". We drive the\nKalman ",[702,826,827],{},"Process"," (predict) and its paired ",[702,830,831],{},"KalmanUpdate","\n(observation) directly, frame by frame, instead of wrapping them in\na full ",[702,834,835],{},"Tracker"," — that keeps the ",[342,838,839],{},"belief itself"," in view, which is\nthe whole point.",[842,843,848],"pre",{"className":844,"code":845,"language":846,"meta":847,"style":847},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import math\n\nimport numpy as np\nimport torch\nimport matplotlib.pyplot as plt\nfrom matplotlib.patches import Ellipse, Rectangle\n\nfrom unitrack.data import Detections, FrameContext, MatchOutcome, Tracklets\nfrom unitrack.lifecycle import TrackletStatus\nfrom unitrack.states.kalman import (\n    KalmanBBox, KalmanCentroid2D, KalmanCentroid3D,\n    KalmanLinear, KalmanUpdate,\n)\n\ntorch.manual_seed(0)\nplt.rcParams[\"figure.figsize\"] = (7, 4)\n\n","python","",[702,849,850,862,869,883,891,913,937,942,975,992,1013,1032,1045,1051,1056,1077],{"__ignoreMap":847},[362,851,854,858],{"class":852,"line":853},"line",1,[362,855,857],{"class":856},"sVHd0","import",[362,859,861],{"class":860},"su5hD"," math\n",[362,863,865],{"class":852,"line":864},2,[362,866,868],{"emptyLinePlaceholder":867},true,"\n",[362,870,872,874,877,880],{"class":852,"line":871},3,[362,873,857],{"class":856},[362,875,876],{"class":860}," numpy ",[362,878,879],{"class":856},"as",[362,881,882],{"class":860}," np\n",[362,884,886,888],{"class":852,"line":885},4,[362,887,857],{"class":856},[362,889,890],{"class":860}," torch\n",[362,892,894,896,899,903,907,910],{"class":852,"line":893},5,[362,895,857],{"class":856},[362,897,898],{"class":860}," matplotlib",[362,900,902],{"class":901},"sP7_E",".",[362,904,906],{"class":905},"skxfh","pyplot",[362,908,909],{"class":856}," as",[362,911,912],{"class":860}," plt\n",[362,914,916,919,921,923,926,928,931,934],{"class":852,"line":915},6,[362,917,918],{"class":856},"from",[362,920,898],{"class":860},[362,922,902],{"class":901},[362,924,925],{"class":860},"patches ",[362,927,857],{"class":856},[362,929,930],{"class":860}," Ellipse",[362,932,933],{"class":901},",",[362,935,936],{"class":860}," Rectangle\n",[362,938,940],{"class":852,"line":939},7,[362,941,868],{"emptyLinePlaceholder":867},[362,943,945,947,950,952,955,957,960,962,965,967,970,972],{"class":852,"line":944},8,[362,946,918],{"class":856},[362,948,949],{"class":860}," unitrack",[362,951,902],{"class":901},[362,953,954],{"class":860},"data ",[362,956,857],{"class":856},[362,958,959],{"class":860}," Detections",[362,961,933],{"class":901},[362,963,964],{"class":860}," FrameContext",[362,966,933],{"class":901},[362,968,969],{"class":860}," MatchOutcome",[362,971,933],{"class":901},[362,973,974],{"class":860}," Tracklets\n",[362,976,978,980,982,984,987,989],{"class":852,"line":977},9,[362,979,918],{"class":856},[362,981,949],{"class":860},[362,983,902],{"class":901},[362,985,986],{"class":860},"lifecycle ",[362,988,857],{"class":856},[362,990,991],{"class":860}," TrackletStatus\n",[362,993,995,997,999,1001,1003,1005,1008,1010],{"class":852,"line":994},10,[362,996,918],{"class":856},[362,998,949],{"class":860},[362,1000,902],{"class":901},[362,1002,270],{"class":860},[362,1004,902],{"class":901},[362,1006,1007],{"class":860},"kalman ",[362,1009,857],{"class":856},[362,1011,1012],{"class":901}," (\n",[362,1014,1016,1019,1021,1024,1026,1029],{"class":852,"line":1015},11,[362,1017,1018],{"class":860},"    KalmanBBox",[362,1020,933],{"class":901},[362,1022,1023],{"class":860}," KalmanCentroid2D",[362,1025,933],{"class":901},[362,1027,1028],{"class":860}," KalmanCentroid3D",[362,1030,1031],{"class":901},",\n",[362,1033,1035,1038,1040,1043],{"class":852,"line":1034},12,[362,1036,1037],{"class":860},"    KalmanLinear",[362,1039,933],{"class":901},[362,1041,1042],{"class":860}," KalmanUpdate",[362,1044,1031],{"class":901},[362,1046,1048],{"class":852,"line":1047},13,[362,1049,1050],{"class":901},")\n",[362,1052,1054],{"class":852,"line":1053},14,[362,1055,868],{"emptyLinePlaceholder":867},[362,1057,1059,1062,1064,1068,1071,1075],{"class":852,"line":1058},15,[362,1060,1061],{"class":860},"torch",[362,1063,902],{"class":901},[362,1065,1067],{"class":1066},"slqww","manual_seed",[362,1069,1070],{"class":901},"(",[362,1072,1074],{"class":1073},"srdBf","0",[362,1076,1050],{"class":901},[362,1078,1080,1083,1085,1088,1091,1095,1099,1101,1104,1108,1111,1114,1116,1119],{"class":852,"line":1079},16,[362,1081,1082],{"class":860},"plt",[362,1084,902],{"class":901},[362,1086,1087],{"class":905},"rcParams",[362,1089,1090],{"class":901},"[",[362,1092,1094],{"class":1093},"sjJ54","\"",[362,1096,1098],{"class":1097},"s_sjI","figure.figsize",[362,1100,1094],{"class":1093},[362,1102,1103],{"class":901},"]",[362,1105,1107],{"class":1106},"smGrS"," =",[362,1109,1110],{"class":901}," (",[362,1112,1113],{"class":1073},"7",[362,1115,933],{"class":901},[362,1117,1118],{"class":1073}," 4",[362,1120,1050],{"class":901},[1122,1123,1125],"h3",{"id":1124},"a-thin-driver-around-the-unitrack-kalman-api","A thin driver around the unitrack Kalman API",[338,1127,1128,1130,1131,1133,1134,1136,1137,1139,1140,1143,1144,1147,1148,1150,1151,1154,1155,1158,1159,1162],{},[702,1129,704],{},", ",[702,1132,763],{}," and ",[702,1135,724],{}," are each a\n",[702,1138,827],{}," (the predict step, ",[702,1141,1142],{},"proc(cs, ctx)",") plus a ",[702,1145,1146],{},"make_update()","\nfactory that returns the matching ",[702,1149,831],{},". Both read the mean\nfrom ",[702,1152,1153],{},"cs.{field}"," and the covariance from ",[702,1156,1157],{},"cs.{field}_cov",". The\nhelpers below wrap a single object into a one-row ",[702,1160,1161],{},"Tracklets","\nsnapshot and run a sequence of measurements through\npredict → (optional) update, recording the belief at every frame.",[842,1164,1166],{"className":844,"code":1165,"language":846,"meta":847,"style":847},"def one_tracklet(field, mean, cov):\n    \"\"\"Wrap a single (mean, cov) pair into a 1-row Tracklets snapshot.\"\"\"\n    return Tracklets(\n        id=torch.tensor([1], dtype=torch.int64),\n        status=torch.tensor([int(TrackletStatus.Active)], dtype=torch.int8),\n        hits=torch.tensor([1], dtype=torch.int32),\n        time_since_update=torch.zeros(1, dtype=torch.int32),\n        age=torch.ones(1, dtype=torch.int32),\n        frame_started=torch.zeros(1, dtype=torch.int32),\n        frame_last_seen=torch.zeros(1, dtype=torch.int32),\n        **{field: mean.unsqueeze(0).float(),\n           f\"{field}_cov\": cov.unsqueeze(0).float()},\n        batch_size=[1],\n    )\n\ndef match_one():\n    \"\"\"A MatchOutcome pairing tracklet 0 with detection 0.\"\"\"\n    return MatchOutcome(\n        matched_pairs=torch.tensor([[0, 0]], dtype=torch.int64),\n        tracklets_residual_index=torch.zeros(0, dtype=torch.int64),\n        detections_residual_index=torch.zeros(0, dtype=torch.int64),\n        per_match_cost=torch.zeros(1),\n        batch_size=[],\n    )\n\ndef run_kalman(proc, init_mean, init_cov, measurements, present, *,\n               dt=1.0, dts=None, gate_chi2=None):\n    \"\"\"\n    Drive a unitrack Kalman process over a sequence.\n\n    Returns one record per frame holding the *prior* (post-predict,\n    pre-update) belief — where the filter expects the object to be\n    *before* the new detection — and the *posterior* after fusion.\n    On a missed frame (``present[k]`` False) no update runs, so the\n    prior carries forward: pure coasting.\n\n    Parameters\n    ----------\n    dt : float\n        Constant time step (used when ``dts`` is None).\n    dts : sequence of float, optional\n        Per-frame time step, for irregular frame rates. Each predict\n        uses ``delta=dts[k]`` so ``F`` and ``Q`` scale with real time.\n    gate_chi2 : float, optional\n        If set, a detection whose squared Mahalanobis distance to the\n        predictive distribution exceeds this threshold is *rejected*\n        (treated as a miss). This is the standard outlier gate; the\n        record's ``\"gated\"`` flag marks rejected frames.\n    \"\"\"\n    field = proc.field\n    upd = proc.make_update()\n    snap = one_tracklet(field, init_mean, init_cov)\n    out = []\n    for k, seen in enumerate(present):\n        delta = float(dts[k]) if dts is not None else dt\n        ctx = FrameContext.make(frame_idx=k, delta=delta)\n        snap = proc(snap, ctx)                              # PREDICT\n        prior_mean = getattr(snap, field)[0].clone()\n        prior_cov = getattr(snap, f\"{field}_cov\")[0].clone()\n        rec = {\"prior_mean\": prior_mean, \"prior_cov\": prior_cov,\n               \"seen\": seen, \"gated\": False}\n        if seen:\n            z = measurements[k].float()\n            m = z.shape[0]\n            if gate_chi2 is not None:\n                S = prior_cov[:m, :m] + torch.eye(m) * proc.r\n                inn = (z - prior_mean[:m]).double()\n                md2 = float(inn @ torch.linalg.inv(S.double()) @ inn)\n                rec[\"gated\"] = md2 > gate_chi2\n            if not rec[\"gated\"]:\n                ds = Detections(index=torch.tensor([0], dtype=torch.int64),\n                                **{field: z.unsqueeze(0)}, batch_size=[1])\n                snap = upd(snap, ds, match_one(), ctx)     # UPDATE\n        rec[\"post_mean\"] = getattr(snap, field)[0].clone()\n        rec[\"post_cov\"] = getattr(snap, f\"{field}_cov\")[0].clone()\n        out.append(rec)\n    return out\n\n",[702,1167,1168,1197,1210,1221,1260,1305,1337,1369,1401,1432,1463,1496,1532,1546,1551,1555,1565,1575,1584,1623,1655,1687,1707,1717,1722,1727,1767,1800,1806,1812,1817,1823,1829,1835,1841,1847,1852,1858,1864,1870,1876,1882,1888,1894,1900,1906,1912,1918,1924,1929,1945,1963,1987,1998,2026,2071,2107,2134,2167,2206,2246,2279,2290,2310,2333,2350,2401,2431,2481,2508,2529,2569,2606,2640,2679,2727,2745],{"__ignoreMap":847},[362,1169,1170,1174,1178,1180,1184,1186,1189,1191,1194],{"class":852,"line":853},[362,1171,1173],{"class":1172},"sbsja","def",[362,1175,1177],{"class":1176},"sGLFI"," one_tracklet",[362,1179,1070],{"class":901},[362,1181,1183],{"class":1182},"sFwrP","field",[362,1185,933],{"class":901},[362,1187,1188],{"class":1182}," mean",[362,1190,933],{"class":901},[362,1192,1193],{"class":1182}," cov",[362,1195,1196],{"class":901},"):\n",[362,1198,1199,1203,1207],{"class":852,"line":864},[362,1200,1202],{"class":1201},"s2W-s","    \"\"\"",[362,1204,1206],{"class":1205},"sithA","Wrap a single (mean, cov) pair into a 1-row Tracklets snapshot.",[362,1208,1209],{"class":1201},"\"\"\"\n",[362,1211,1212,1215,1218],{"class":852,"line":871},[362,1213,1214],{"class":856},"    return",[362,1216,1217],{"class":1066}," Tracklets",[362,1219,1220],{"class":901},"(\n",[362,1222,1223,1227,1229,1231,1233,1236,1239,1242,1245,1248,1250,1252,1254,1257],{"class":852,"line":885},[362,1224,1226],{"class":1225},"s99_P","        id",[362,1228,395],{"class":1106},[362,1230,1061],{"class":1066},[362,1232,902],{"class":901},[362,1234,1235],{"class":1066},"tensor",[362,1237,1238],{"class":901},"([",[362,1240,1241],{"class":1073},"1",[362,1243,1244],{"class":901},"],",[362,1246,1247],{"class":1225}," dtype",[362,1249,395],{"class":1106},[362,1251,1061],{"class":1066},[362,1253,902],{"class":901},[362,1255,1256],{"class":905},"int64",[362,1258,1259],{"class":901},"),\n",[362,1261,1262,1265,1267,1269,1271,1273,1275,1279,1281,1284,1286,1289,1292,1294,1296,1298,1300,1303],{"class":852,"line":893},[362,1263,1264],{"class":1225},"        status",[362,1266,395],{"class":1106},[362,1268,1061],{"class":1066},[362,1270,902],{"class":901},[362,1272,1235],{"class":1066},[362,1274,1238],{"class":901},[362,1276,1278],{"class":1277},"sZMiF","int",[362,1280,1070],{"class":901},[362,1282,1283],{"class":1066},"TrackletStatus",[362,1285,902],{"class":901},[362,1287,1288],{"class":905},"Active",[362,1290,1291],{"class":901},")],",[362,1293,1247],{"class":1225},[362,1295,395],{"class":1106},[362,1297,1061],{"class":1066},[362,1299,902],{"class":901},[362,1301,1302],{"class":905},"int8",[362,1304,1259],{"class":901},[362,1306,1307,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1335],{"class":852,"line":915},[362,1308,1309],{"class":1225},"        hits",[362,1311,395],{"class":1106},[362,1313,1061],{"class":1066},[362,1315,902],{"class":901},[362,1317,1235],{"class":1066},[362,1319,1238],{"class":901},[362,1321,1241],{"class":1073},[362,1323,1244],{"class":901},[362,1325,1247],{"class":1225},[362,1327,395],{"class":1106},[362,1329,1061],{"class":1066},[362,1331,902],{"class":901},[362,1333,1334],{"class":905},"int32",[362,1336,1259],{"class":901},[362,1338,1339,1342,1344,1346,1348,1351,1353,1355,1357,1359,1361,1363,1365,1367],{"class":852,"line":939},[362,1340,1341],{"class":1225},"        time_since_update",[362,1343,395],{"class":1106},[362,1345,1061],{"class":1066},[362,1347,902],{"class":901},[362,1349,1350],{"class":1066},"zeros",[362,1352,1070],{"class":901},[362,1354,1241],{"class":1073},[362,1356,933],{"class":901},[362,1358,1247],{"class":1225},[362,1360,395],{"class":1106},[362,1362,1061],{"class":1066},[362,1364,902],{"class":901},[362,1366,1334],{"class":905},[362,1368,1259],{"class":901},[362,1370,1371,1374,1376,1378,1380,1383,1385,1387,1389,1391,1393,1395,1397,1399],{"class":852,"line":944},[362,1372,1373],{"class":1225},"        age",[362,1375,395],{"class":1106},[362,1377,1061],{"class":1066},[362,1379,902],{"class":901},[362,1381,1382],{"class":1066},"ones",[362,1384,1070],{"class":901},[362,1386,1241],{"class":1073},[362,1388,933],{"class":901},[362,1390,1247],{"class":1225},[362,1392,395],{"class":1106},[362,1394,1061],{"class":1066},[362,1396,902],{"class":901},[362,1398,1334],{"class":905},[362,1400,1259],{"class":901},[362,1402,1403,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430],{"class":852,"line":977},[362,1404,1405],{"class":1225},"        frame_started",[362,1407,395],{"class":1106},[362,1409,1061],{"class":1066},[362,1411,902],{"class":901},[362,1413,1350],{"class":1066},[362,1415,1070],{"class":901},[362,1417,1241],{"class":1073},[362,1419,933],{"class":901},[362,1421,1247],{"class":1225},[362,1423,395],{"class":1106},[362,1425,1061],{"class":1066},[362,1427,902],{"class":901},[362,1429,1334],{"class":905},[362,1431,1259],{"class":901},[362,1433,1434,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461],{"class":852,"line":994},[362,1435,1436],{"class":1225},"        frame_last_seen",[362,1438,395],{"class":1106},[362,1440,1061],{"class":1066},[362,1442,902],{"class":901},[362,1444,1350],{"class":1066},[362,1446,1070],{"class":901},[362,1448,1241],{"class":1073},[362,1450,933],{"class":901},[362,1452,1247],{"class":1225},[362,1454,395],{"class":1106},[362,1456,1061],{"class":1066},[362,1458,902],{"class":901},[362,1460,1334],{"class":905},[362,1462,1259],{"class":901},[362,1464,1465,1468,1471,1473,1476,1478,1480,1483,1485,1487,1490,1493],{"class":852,"line":1015},[362,1466,1467],{"class":1106},"        **",[362,1469,1470],{"class":901},"{",[362,1472,1183],{"class":1066},[362,1474,1475],{"class":901},":",[362,1477,1188],{"class":1066},[362,1479,902],{"class":901},[362,1481,1482],{"class":1066},"unsqueeze",[362,1484,1070],{"class":901},[362,1486,1074],{"class":1073},[362,1488,1489],{"class":901},").",[362,1491,1492],{"class":1066},"float",[362,1494,1495],{"class":901},"(),\n",[362,1497,1498,1501,1503,1505,1507,1510,1513,1515,1517,1519,1521,1523,1525,1527,1529],{"class":852,"line":1034},[362,1499,1500],{"class":1172},"           f",[362,1502,1094],{"class":1097},[362,1504,1470],{"class":1073},[362,1506,1183],{"class":1066},[362,1508,1509],{"class":1073},"}",[362,1511,1512],{"class":1097},"_cov\"",[362,1514,1475],{"class":901},[362,1516,1193],{"class":1066},[362,1518,902],{"class":901},[362,1520,1482],{"class":1066},[362,1522,1070],{"class":901},[362,1524,1074],{"class":1073},[362,1526,1489],{"class":901},[362,1528,1492],{"class":1066},[362,1530,1531],{"class":901},"()},\n",[362,1533,1534,1537,1539,1541,1543],{"class":852,"line":1047},[362,1535,1536],{"class":1225},"        batch_size",[362,1538,395],{"class":1106},[362,1540,1090],{"class":901},[362,1542,1241],{"class":1073},[362,1544,1545],{"class":901},"],\n",[362,1547,1548],{"class":852,"line":1053},[362,1549,1550],{"class":901},"    )\n",[362,1552,1553],{"class":852,"line":1058},[362,1554,868],{"emptyLinePlaceholder":867},[362,1556,1557,1559,1562],{"class":852,"line":1079},[362,1558,1173],{"class":1172},[362,1560,1561],{"class":1176}," match_one",[362,1563,1564],{"class":901},"():\n",[362,1566,1568,1570,1573],{"class":852,"line":1567},17,[362,1569,1202],{"class":1201},[362,1571,1572],{"class":1205},"A MatchOutcome pairing tracklet 0 with detection 0.",[362,1574,1209],{"class":1201},[362,1576,1578,1580,1582],{"class":852,"line":1577},18,[362,1579,1214],{"class":856},[362,1581,969],{"class":1066},[362,1583,1220],{"class":901},[362,1585,1587,1590,1592,1594,1596,1598,1601,1603,1605,1608,1611,1613,1615,1617,1619,1621],{"class":852,"line":1586},19,[362,1588,1589],{"class":1225},"        matched_pairs",[362,1591,395],{"class":1106},[362,1593,1061],{"class":1066},[362,1595,902],{"class":901},[362,1597,1235],{"class":1066},[362,1599,1600],{"class":901},"([[",[362,1602,1074],{"class":1073},[362,1604,933],{"class":901},[362,1606,1607],{"class":1073}," 0",[362,1609,1610],{"class":901},"]],",[362,1612,1247],{"class":1225},[362,1614,395],{"class":1106},[362,1616,1061],{"class":1066},[362,1618,902],{"class":901},[362,1620,1256],{"class":905},[362,1622,1259],{"class":901},[362,1624,1626,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653],{"class":852,"line":1625},20,[362,1627,1628],{"class":1225},"        tracklets_residual_index",[362,1630,395],{"class":1106},[362,1632,1061],{"class":1066},[362,1634,902],{"class":901},[362,1636,1350],{"class":1066},[362,1638,1070],{"class":901},[362,1640,1074],{"class":1073},[362,1642,933],{"class":901},[362,1644,1247],{"class":1225},[362,1646,395],{"class":1106},[362,1648,1061],{"class":1066},[362,1650,902],{"class":901},[362,1652,1256],{"class":905},[362,1654,1259],{"class":901},[362,1656,1658,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685],{"class":852,"line":1657},21,[362,1659,1660],{"class":1225},"        detections_residual_index",[362,1662,395],{"class":1106},[362,1664,1061],{"class":1066},[362,1666,902],{"class":901},[362,1668,1350],{"class":1066},[362,1670,1070],{"class":901},[362,1672,1074],{"class":1073},[362,1674,933],{"class":901},[362,1676,1247],{"class":1225},[362,1678,395],{"class":1106},[362,1680,1061],{"class":1066},[362,1682,902],{"class":901},[362,1684,1256],{"class":905},[362,1686,1259],{"class":901},[362,1688,1690,1693,1695,1697,1699,1701,1703,1705],{"class":852,"line":1689},22,[362,1691,1692],{"class":1225},"        per_match_cost",[362,1694,395],{"class":1106},[362,1696,1061],{"class":1066},[362,1698,902],{"class":901},[362,1700,1350],{"class":1066},[362,1702,1070],{"class":901},[362,1704,1241],{"class":1073},[362,1706,1259],{"class":901},[362,1708,1710,1712,1714],{"class":852,"line":1709},23,[362,1711,1536],{"class":1225},[362,1713,395],{"class":1106},[362,1715,1716],{"class":901},"[],\n",[362,1718,1720],{"class":852,"line":1719},24,[362,1721,1550],{"class":901},[362,1723,1725],{"class":852,"line":1724},25,[362,1726,868],{"emptyLinePlaceholder":867},[362,1728,1730,1732,1735,1737,1740,1742,1745,1747,1750,1752,1755,1757,1760,1762,1765],{"class":852,"line":1729},26,[362,1731,1173],{"class":1172},[362,1733,1734],{"class":1176}," run_kalman",[362,1736,1070],{"class":901},[362,1738,1739],{"class":1182},"proc",[362,1741,933],{"class":901},[362,1743,1744],{"class":1182}," init_mean",[362,1746,933],{"class":901},[362,1748,1749],{"class":1182}," init_cov",[362,1751,933],{"class":901},[362,1753,1754],{"class":1182}," measurements",[362,1756,933],{"class":901},[362,1758,1759],{"class":1182}," present",[362,1761,933],{"class":901},[362,1763,1764],{"class":1106}," *",[362,1766,1031],{"class":860},[362,1768,1770,1773,1775,1778,1780,1783,1785,1789,1791,1794,1796,1798],{"class":852,"line":1769},27,[362,1771,1772],{"class":1182},"               dt",[362,1774,395],{"class":1106},[362,1776,1777],{"class":1073},"1.0",[362,1779,933],{"class":901},[362,1781,1782],{"class":1182}," dts",[362,1784,395],{"class":1106},[362,1786,1788],{"class":1787},"s39Yj","None",[362,1790,933],{"class":901},[362,1792,1793],{"class":1182}," gate_chi2",[362,1795,395],{"class":1106},[362,1797,1788],{"class":1787},[362,1799,1196],{"class":901},[362,1801,1803],{"class":852,"line":1802},28,[362,1804,1805],{"class":1201},"    \"\"\"\n",[362,1807,1809],{"class":852,"line":1808},29,[362,1810,1811],{"class":1205},"    Drive a unitrack Kalman process over a sequence.\n",[362,1813,1815],{"class":852,"line":1814},30,[362,1816,868],{"emptyLinePlaceholder":867},[362,1818,1820],{"class":852,"line":1819},31,[362,1821,1822],{"class":1205},"    Returns one record per frame holding the *prior* (post-predict,\n",[362,1824,1826],{"class":852,"line":1825},32,[362,1827,1828],{"class":1205},"    pre-update) belief — where the filter expects the object to be\n",[362,1830,1832],{"class":852,"line":1831},33,[362,1833,1834],{"class":1205},"    *before* the new detection — and the *posterior* after fusion.\n",[362,1836,1838],{"class":852,"line":1837},34,[362,1839,1840],{"class":1205},"    On a missed frame (``present[k]`` False) no update runs, so the\n",[362,1842,1844],{"class":852,"line":1843},35,[362,1845,1846],{"class":1205},"    prior carries forward: pure coasting.\n",[362,1848,1850],{"class":852,"line":1849},36,[362,1851,868],{"emptyLinePlaceholder":867},[362,1853,1855],{"class":852,"line":1854},37,[362,1856,1857],{"class":1205},"    Parameters\n",[362,1859,1861],{"class":852,"line":1860},38,[362,1862,1863],{"class":1205},"    ----------\n",[362,1865,1867],{"class":852,"line":1866},39,[362,1868,1869],{"class":1205},"    dt : float\n",[362,1871,1873],{"class":852,"line":1872},40,[362,1874,1875],{"class":1205},"        Constant time step (used when ``dts`` is None).\n",[362,1877,1879],{"class":852,"line":1878},41,[362,1880,1881],{"class":1205},"    dts : sequence of float, optional\n",[362,1883,1885],{"class":852,"line":1884},42,[362,1886,1887],{"class":1205},"        Per-frame time step, for irregular frame rates. Each predict\n",[362,1889,1891],{"class":852,"line":1890},43,[362,1892,1893],{"class":1205},"        uses ``delta=dts[k]`` so ``F`` and ``Q`` scale with real time.\n",[362,1895,1897],{"class":852,"line":1896},44,[362,1898,1899],{"class":1205},"    gate_chi2 : float, optional\n",[362,1901,1903],{"class":852,"line":1902},45,[362,1904,1905],{"class":1205},"        If set, a detection whose squared Mahalanobis distance to the\n",[362,1907,1909],{"class":852,"line":1908},46,[362,1910,1911],{"class":1205},"        predictive distribution exceeds this threshold is *rejected*\n",[362,1913,1915],{"class":852,"line":1914},47,[362,1916,1917],{"class":1205},"        (treated as a miss). This is the standard outlier gate; the\n",[362,1919,1921],{"class":852,"line":1920},48,[362,1922,1923],{"class":1205},"        record's ``\"gated\"`` flag marks rejected frames.\n",[362,1925,1927],{"class":852,"line":1926},49,[362,1928,1805],{"class":1201},[362,1930,1932,1935,1937,1940,1942],{"class":852,"line":1931},50,[362,1933,1934],{"class":860},"    field ",[362,1936,395],{"class":1106},[362,1938,1939],{"class":860}," proc",[362,1941,902],{"class":901},[362,1943,1944],{"class":905},"field\n",[362,1946,1948,1951,1953,1955,1957,1960],{"class":852,"line":1947},51,[362,1949,1950],{"class":860},"    upd ",[362,1952,395],{"class":1106},[362,1954,1939],{"class":860},[362,1956,902],{"class":901},[362,1958,1959],{"class":1066},"make_update",[362,1961,1962],{"class":901},"()\n",[362,1964,1966,1969,1971,1973,1975,1977,1979,1981,1983,1985],{"class":852,"line":1965},52,[362,1967,1968],{"class":860},"    snap ",[362,1970,395],{"class":1106},[362,1972,1177],{"class":1066},[362,1974,1070],{"class":901},[362,1976,1183],{"class":1066},[362,1978,933],{"class":901},[362,1980,1744],{"class":1066},[362,1982,933],{"class":901},[362,1984,1749],{"class":1066},[362,1986,1050],{"class":901},[362,1988,1990,1993,1995],{"class":852,"line":1989},53,[362,1991,1992],{"class":860},"    out ",[362,1994,395],{"class":1106},[362,1996,1997],{"class":901}," []\n",[362,1999,2001,2004,2007,2009,2012,2015,2019,2021,2024],{"class":852,"line":2000},54,[362,2002,2003],{"class":856},"    for",[362,2005,2006],{"class":860}," k",[362,2008,933],{"class":901},[362,2010,2011],{"class":860}," seen ",[362,2013,2014],{"class":856},"in",[362,2016,2018],{"class":2017},"sptTA"," enumerate",[362,2020,1070],{"class":901},[362,2022,2023],{"class":1066},"present",[362,2025,1196],{"class":901},[362,2027,2029,2032,2034,2037,2039,2042,2044,2047,2050,2053,2056,2059,2062,2065,2068],{"class":852,"line":2028},55,[362,2030,2031],{"class":860},"        delta ",[362,2033,395],{"class":1106},[362,2035,2036],{"class":1277}," float",[362,2038,1070],{"class":901},[362,2040,2041],{"class":1066},"dts",[362,2043,1090],{"class":901},[362,2045,2046],{"class":1066},"k",[362,2048,2049],{"class":901},"])",[362,2051,2052],{"class":856}," if",[362,2054,2055],{"class":860}," dts ",[362,2057,2058],{"class":1106},"is",[362,2060,2061],{"class":1106}," not",[362,2063,2064],{"class":1787}," None",[362,2066,2067],{"class":856}," else",[362,2069,2070],{"class":860}," dt\n",[362,2072,2074,2077,2079,2081,2083,2086,2088,2091,2093,2095,2097,2100,2102,2105],{"class":852,"line":2073},56,[362,2075,2076],{"class":860},"        ctx ",[362,2078,395],{"class":1106},[362,2080,964],{"class":860},[362,2082,902],{"class":901},[362,2084,2085],{"class":1066},"make",[362,2087,1070],{"class":901},[362,2089,2090],{"class":1225},"frame_idx",[362,2092,395],{"class":1106},[362,2094,2046],{"class":1066},[362,2096,933],{"class":901},[362,2098,2099],{"class":1225}," delta",[362,2101,395],{"class":1106},[362,2103,2104],{"class":1066},"delta",[362,2106,1050],{"class":901},[362,2108,2110,2113,2115,2117,2119,2122,2124,2127,2130],{"class":852,"line":2109},57,[362,2111,2112],{"class":860},"        snap ",[362,2114,395],{"class":1106},[362,2116,1939],{"class":1066},[362,2118,1070],{"class":901},[362,2120,2121],{"class":1066},"snap",[362,2123,933],{"class":901},[362,2125,2126],{"class":1066}," ctx",[362,2128,2129],{"class":901},")",[362,2131,2133],{"class":2132},"sutJx","                              # PREDICT\n",[362,2135,2137,2140,2142,2145,2147,2149,2151,2154,2157,2159,2162,2165],{"class":852,"line":2136},58,[362,2138,2139],{"class":860},"        prior_mean ",[362,2141,395],{"class":1106},[362,2143,2144],{"class":2017}," getattr",[362,2146,1070],{"class":901},[362,2148,2121],{"class":1066},[362,2150,933],{"class":901},[362,2152,2153],{"class":1066}," field",[362,2155,2156],{"class":901},")[",[362,2158,1074],{"class":1073},[362,2160,2161],{"class":901},"].",[362,2163,2164],{"class":1066},"clone",[362,2166,1962],{"class":901},[362,2168,2170,2173,2175,2177,2179,2181,2183,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204],{"class":852,"line":2169},59,[362,2171,2172],{"class":860},"        prior_cov ",[362,2174,395],{"class":1106},[362,2176,2144],{"class":2017},[362,2178,1070],{"class":901},[362,2180,2121],{"class":1066},[362,2182,933],{"class":901},[362,2184,2185],{"class":1172}," f",[362,2187,1094],{"class":1097},[362,2189,1470],{"class":1073},[362,2191,1183],{"class":1066},[362,2193,1509],{"class":1073},[362,2195,1512],{"class":1097},[362,2197,2156],{"class":901},[362,2199,1074],{"class":1073},[362,2201,2161],{"class":901},[362,2203,2164],{"class":1066},[362,2205,1962],{"class":901},[362,2207,2209,2212,2214,2217,2219,2222,2224,2226,2229,2231,2234,2237,2239,2241,2244],{"class":852,"line":2208},60,[362,2210,2211],{"class":860},"        rec ",[362,2213,395],{"class":1106},[362,2215,2216],{"class":901}," {",[362,2218,1094],{"class":1093},[362,2220,2221],{"class":1097},"prior_mean",[362,2223,1094],{"class":1093},[362,2225,1475],{"class":901},[362,2227,2228],{"class":860}," prior_mean",[362,2230,933],{"class":901},[362,2232,2233],{"class":1093}," \"",[362,2235,2236],{"class":1097},"prior_cov",[362,2238,1094],{"class":1093},[362,2240,1475],{"class":901},[362,2242,2243],{"class":860}," prior_cov",[362,2245,1031],{"class":901},[362,2247,2249,2252,2255,2257,2259,2262,2264,2266,2269,2271,2273,2276],{"class":852,"line":2248},61,[362,2250,2251],{"class":1093},"               \"",[362,2253,2254],{"class":1097},"seen",[362,2256,1094],{"class":1093},[362,2258,1475],{"class":901},[362,2260,2261],{"class":860}," seen",[362,2263,933],{"class":901},[362,2265,2233],{"class":1093},[362,2267,2268],{"class":1097},"gated",[362,2270,1094],{"class":1093},[362,2272,1475],{"class":901},[362,2274,2275],{"class":1787}," False",[362,2277,2278],{"class":901},"}\n",[362,2280,2282,2285,2287],{"class":852,"line":2281},62,[362,2283,2284],{"class":856},"        if",[362,2286,2261],{"class":860},[362,2288,2289],{"class":901},":\n",[362,2291,2293,2296,2298,2300,2302,2304,2306,2308],{"class":852,"line":2292},63,[362,2294,2295],{"class":860},"            z ",[362,2297,395],{"class":1106},[362,2299,1754],{"class":860},[362,2301,1090],{"class":901},[362,2303,2046],{"class":860},[362,2305,2161],{"class":901},[362,2307,1492],{"class":1066},[362,2309,1962],{"class":901},[362,2311,2313,2316,2318,2321,2323,2326,2328,2330],{"class":852,"line":2312},64,[362,2314,2315],{"class":860},"            m ",[362,2317,395],{"class":1106},[362,2319,2320],{"class":860}," z",[362,2322,902],{"class":901},[362,2324,2325],{"class":905},"shape",[362,2327,1090],{"class":901},[362,2329,1074],{"class":1073},[362,2331,2332],{"class":901},"]\n",[362,2334,2336,2339,2342,2344,2346,2348],{"class":852,"line":2335},65,[362,2337,2338],{"class":856},"            if",[362,2340,2341],{"class":860}," gate_chi2 ",[362,2343,2058],{"class":1106},[362,2345,2061],{"class":1106},[362,2347,2064],{"class":1787},[362,2349,2289],{"class":901},[362,2351,2353,2356,2358,2360,2363,2366,2368,2371,2373,2375,2378,2381,2383,2386,2388,2390,2392,2394,2396,2398],{"class":852,"line":2352},66,[362,2354,2355],{"class":860},"                S ",[362,2357,395],{"class":1106},[362,2359,2243],{"class":860},[362,2361,2362],{"class":901},"[:",[362,2364,2365],{"class":860},"m",[362,2367,933],{"class":901},[362,2369,2370],{"class":901}," :",[362,2372,2365],{"class":860},[362,2374,1103],{"class":901},[362,2376,2377],{"class":1106}," +",[362,2379,2380],{"class":860}," torch",[362,2382,902],{"class":901},[362,2384,2385],{"class":1066},"eye",[362,2387,1070],{"class":901},[362,2389,2365],{"class":1066},[362,2391,2129],{"class":901},[362,2393,1764],{"class":1106},[362,2395,1939],{"class":860},[362,2397,902],{"class":901},[362,2399,2400],{"class":905},"r\n",[362,2402,2404,2407,2409,2411,2414,2417,2419,2421,2423,2426,2429],{"class":852,"line":2403},67,[362,2405,2406],{"class":860},"                inn ",[362,2408,395],{"class":1106},[362,2410,1110],{"class":901},[362,2412,2413],{"class":860},"z ",[362,2415,2416],{"class":1106},"-",[362,2418,2228],{"class":860},[362,2420,2362],{"class":901},[362,2422,2365],{"class":860},[362,2424,2425],{"class":901},"]).",[362,2427,2428],{"class":1066},"double",[362,2430,1962],{"class":901},[362,2432,2434,2437,2439,2441,2443,2446,2449,2451,2453,2456,2458,2461,2463,2466,2468,2470,2473,2476,2479],{"class":852,"line":2433},68,[362,2435,2436],{"class":860},"                md2 ",[362,2438,395],{"class":1106},[362,2440,2036],{"class":1277},[362,2442,1070],{"class":901},[362,2444,2445],{"class":1066},"inn ",[362,2447,2448],{"class":1106},"@",[362,2450,2380],{"class":1066},[362,2452,902],{"class":901},[362,2454,2455],{"class":905},"linalg",[362,2457,902],{"class":901},[362,2459,2460],{"class":1066},"inv",[362,2462,1070],{"class":901},[362,2464,2465],{"class":1066},"S",[362,2467,902],{"class":901},[362,2469,2428],{"class":1066},[362,2471,2472],{"class":901},"())",[362,2474,2475],{"class":1106}," @",[362,2477,2478],{"class":1066}," inn",[362,2480,1050],{"class":901},[362,2482,2484,2487,2489,2491,2493,2495,2497,2499,2502,2505],{"class":852,"line":2483},69,[362,2485,2486],{"class":860},"                rec",[362,2488,1090],{"class":901},[362,2490,1094],{"class":1093},[362,2492,2268],{"class":1097},[362,2494,1094],{"class":1093},[362,2496,1103],{"class":901},[362,2498,1107],{"class":1106},[362,2500,2501],{"class":860}," md2 ",[362,2503,2504],{"class":1106},">",[362,2506,2507],{"class":860}," gate_chi2\n",[362,2509,2511,2513,2515,2518,2520,2522,2524,2526],{"class":852,"line":2510},70,[362,2512,2338],{"class":856},[362,2514,2061],{"class":1106},[362,2516,2517],{"class":860}," rec",[362,2519,1090],{"class":901},[362,2521,1094],{"class":1093},[362,2523,2268],{"class":1097},[362,2525,1094],{"class":1093},[362,2527,2528],{"class":901},"]:\n",[362,2530,2532,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567],{"class":852,"line":2531},71,[362,2533,2534],{"class":860},"                ds ",[362,2536,395],{"class":1106},[362,2538,959],{"class":1066},[362,2540,1070],{"class":901},[362,2542,125],{"class":1225},[362,2544,395],{"class":1106},[362,2546,1061],{"class":1066},[362,2548,902],{"class":901},[362,2550,1235],{"class":1066},[362,2552,1238],{"class":901},[362,2554,1074],{"class":1073},[362,2556,1244],{"class":901},[362,2558,1247],{"class":1225},[362,2560,395],{"class":1106},[362,2562,1061],{"class":1066},[362,2564,902],{"class":901},[362,2566,1256],{"class":905},[362,2568,1259],{"class":901},[362,2570,2572,2575,2577,2579,2581,2583,2585,2587,2589,2591,2594,2597,2599,2601,2603],{"class":852,"line":2571},72,[362,2573,2574],{"class":1106},"                                **",[362,2576,1470],{"class":901},[362,2578,1183],{"class":1066},[362,2580,1475],{"class":901},[362,2582,2320],{"class":1066},[362,2584,902],{"class":901},[362,2586,1482],{"class":1066},[362,2588,1070],{"class":901},[362,2590,1074],{"class":1073},[362,2592,2593],{"class":901},")},",[362,2595,2596],{"class":1225}," batch_size",[362,2598,395],{"class":1106},[362,2600,1090],{"class":901},[362,2602,1241],{"class":1073},[362,2604,2605],{"class":901},"])\n",[362,2607,2609,2612,2614,2617,2619,2621,2623,2626,2628,2630,2633,2635,2637],{"class":852,"line":2608},73,[362,2610,2611],{"class":860},"                snap ",[362,2613,395],{"class":1106},[362,2615,2616],{"class":1066}," upd",[362,2618,1070],{"class":901},[362,2620,2121],{"class":1066},[362,2622,933],{"class":901},[362,2624,2625],{"class":1066}," ds",[362,2627,933],{"class":901},[362,2629,1561],{"class":1066},[362,2631,2632],{"class":901},"(),",[362,2634,2126],{"class":1066},[362,2636,2129],{"class":901},[362,2638,2639],{"class":2132},"     # UPDATE\n",[362,2641,2643,2646,2648,2650,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677],{"class":852,"line":2642},74,[362,2644,2645],{"class":860},"        rec",[362,2647,1090],{"class":901},[362,2649,1094],{"class":1093},[362,2651,2652],{"class":1097},"post_mean",[362,2654,1094],{"class":1093},[362,2656,1103],{"class":901},[362,2658,1107],{"class":1106},[362,2660,2144],{"class":2017},[362,2662,1070],{"class":901},[362,2664,2121],{"class":1066},[362,2666,933],{"class":901},[362,2668,2153],{"class":1066},[362,2670,2156],{"class":901},[362,2672,1074],{"class":1073},[362,2674,2161],{"class":901},[362,2676,2164],{"class":1066},[362,2678,1962],{"class":901},[362,2680,2682,2684,2686,2688,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725],{"class":852,"line":2681},75,[362,2683,2645],{"class":860},[362,2685,1090],{"class":901},[362,2687,1094],{"class":1093},[362,2689,2690],{"class":1097},"post_cov",[362,2692,1094],{"class":1093},[362,2694,1103],{"class":901},[362,2696,1107],{"class":1106},[362,2698,2144],{"class":2017},[362,2700,1070],{"class":901},[362,2702,2121],{"class":1066},[362,2704,933],{"class":901},[362,2706,2185],{"class":1172},[362,2708,1094],{"class":1097},[362,2710,1470],{"class":1073},[362,2712,1183],{"class":1066},[362,2714,1509],{"class":1073},[362,2716,1512],{"class":1097},[362,2718,2156],{"class":901},[362,2720,1074],{"class":1073},[362,2722,2161],{"class":901},[362,2724,2164],{"class":1066},[362,2726,1962],{"class":901},[362,2728,2730,2733,2735,2738,2740,2743],{"class":852,"line":2729},76,[362,2731,2732],{"class":860},"        out",[362,2734,902],{"class":901},[362,2736,2737],{"class":1066},"append",[362,2739,1070],{"class":901},[362,2741,2742],{"class":1066},"rec",[362,2744,1050],{"class":901},[362,2746,2748,2750],{"class":852,"line":2747},77,[362,2749,1214],{"class":856},[362,2751,2752],{"class":860}," out\n",[842,2754,2756],{"className":844,"code":2755,"language":846,"meta":847,"style":847},"# --- plotting helpers -------------------------------------------------\n\ndef cov_ellipse(ax, mean2, cov2, n_std=2.0, **kw):\n    \"\"\"Draw an n-sigma covariance ellipse for a 2-D Gaussian.\"\"\"\n    cov2 = cov2.detach().cpu().double()\n    vals, vecs = torch.linalg.eigh(cov2)\n    vals = vals.clamp(min=1e-12)\n    order = torch.argsort(vals, descending=True)\n    vals, vecs = vals[order], vecs[:, order]\n    angle = math.degrees(math.atan2(float(vecs[1, 0]), float(vecs[0, 0])))\n    width, height = (2 * n_std * vals.sqrt()).tolist()\n    ax.add_patch(Ellipse((float(mean2[0]), float(mean2[1])),\n                         width, height, angle=angle, fill=False, **kw))\n\ndef predictive_xy(rec, r, n=2):\n    \"\"\"\n    One-step-ahead measurement distribution for the position block.\n\n    For these models H = [I | 0], so the predicted measurement mean\n    is the leading ``n`` state entries and its covariance is the\n    leading n-by-n block of P plus the measurement noise R = r*I.\n    \"\"\"\n    mu = rec[\"prior_mean\"][:n]\n    S = rec[\"prior_cov\"][:n, :n] + torch.eye(n) * r\n    return mu, S\n\ndef fade(cmap_name, k, n):\n    \"\"\"A time-graded color: early frames light, late frames saturated.\"\"\"\n    return plt.get_cmap(cmap_name)(0.25 + 0.7 * k \u002F max(1, n - 1))\n\n",[702,2757,2758,2763,2767,2809,2818,2844,2874,2901,2932,2962,3023,3063,3107,3146,3150,3177,3181,3186,3190,3195,3200,3205,3209,3234,3282,3294,3298,3320,3329],{"__ignoreMap":847},[362,2759,2760],{"class":852,"line":853},[362,2761,2762],{"class":2132},"# --- plotting helpers -------------------------------------------------\n",[362,2764,2765],{"class":852,"line":864},[362,2766,868],{"emptyLinePlaceholder":867},[362,2768,2769,2771,2774,2776,2779,2781,2784,2786,2789,2791,2794,2796,2799,2801,2804,2807],{"class":852,"line":871},[362,2770,1173],{"class":1172},[362,2772,2773],{"class":1176}," cov_ellipse",[362,2775,1070],{"class":901},[362,2777,2778],{"class":1182},"ax",[362,2780,933],{"class":901},[362,2782,2783],{"class":1182}," mean2",[362,2785,933],{"class":901},[362,2787,2788],{"class":1182}," cov2",[362,2790,933],{"class":901},[362,2792,2793],{"class":1182}," n_std",[362,2795,395],{"class":1106},[362,2797,2798],{"class":1073},"2.0",[362,2800,933],{"class":901},[362,2802,2803],{"class":1106}," **",[362,2805,2806],{"class":1182},"kw",[362,2808,1196],{"class":901},[362,2810,2811,2813,2816],{"class":852,"line":885},[362,2812,1202],{"class":1201},[362,2814,2815],{"class":1205},"Draw an n-sigma covariance ellipse for a 2-D Gaussian.",[362,2817,1209],{"class":1201},[362,2819,2820,2823,2825,2827,2829,2832,2835,2838,2840,2842],{"class":852,"line":893},[362,2821,2822],{"class":860},"    cov2 ",[362,2824,395],{"class":1106},[362,2826,2788],{"class":860},[362,2828,902],{"class":901},[362,2830,2831],{"class":1066},"detach",[362,2833,2834],{"class":901},"().",[362,2836,2837],{"class":1066},"cpu",[362,2839,2834],{"class":901},[362,2841,2428],{"class":1066},[362,2843,1962],{"class":901},[362,2845,2846,2849,2851,2854,2856,2858,2860,2862,2864,2867,2869,2872],{"class":852,"line":915},[362,2847,2848],{"class":860},"    vals",[362,2850,933],{"class":901},[362,2852,2853],{"class":860}," vecs ",[362,2855,395],{"class":1106},[362,2857,2380],{"class":860},[362,2859,902],{"class":901},[362,2861,2455],{"class":905},[362,2863,902],{"class":901},[362,2865,2866],{"class":1066},"eigh",[362,2868,1070],{"class":901},[362,2870,2871],{"class":1066},"cov2",[362,2873,1050],{"class":901},[362,2875,2876,2879,2881,2884,2886,2889,2891,2894,2896,2899],{"class":852,"line":939},[362,2877,2878],{"class":860},"    vals ",[362,2880,395],{"class":1106},[362,2882,2883],{"class":860}," vals",[362,2885,902],{"class":901},[362,2887,2888],{"class":1066},"clamp",[362,2890,1070],{"class":901},[362,2892,2893],{"class":1225},"min",[362,2895,395],{"class":1106},[362,2897,2898],{"class":1073},"1e-12",[362,2900,1050],{"class":901},[362,2902,2903,2906,2908,2910,2912,2915,2917,2920,2922,2925,2927,2930],{"class":852,"line":944},[362,2904,2905],{"class":860},"    order ",[362,2907,395],{"class":1106},[362,2909,2380],{"class":860},[362,2911,902],{"class":901},[362,2913,2914],{"class":1066},"argsort",[362,2916,1070],{"class":901},[362,2918,2919],{"class":1066},"vals",[362,2921,933],{"class":901},[362,2923,2924],{"class":1225}," descending",[362,2926,395],{"class":1106},[362,2928,2929],{"class":1787},"True",[362,2931,1050],{"class":901},[362,2933,2934,2936,2938,2940,2942,2944,2946,2949,2951,2954,2957,2960],{"class":852,"line":977},[362,2935,2848],{"class":860},[362,2937,933],{"class":901},[362,2939,2853],{"class":860},[362,2941,395],{"class":1106},[362,2943,2883],{"class":860},[362,2945,1090],{"class":901},[362,2947,2948],{"class":860},"order",[362,2950,1244],{"class":901},[362,2952,2953],{"class":860}," vecs",[362,2955,2956],{"class":901},"[:,",[362,2958,2959],{"class":860}," order",[362,2961,2332],{"class":901},[362,2963,2964,2967,2969,2972,2974,2977,2979,2981,2983,2986,2988,2990,2992,2995,2997,2999,3001,3003,3006,3008,3010,3012,3014,3016,3018,3020],{"class":852,"line":994},[362,2965,2966],{"class":860},"    angle ",[362,2968,395],{"class":1106},[362,2970,2971],{"class":860}," math",[362,2973,902],{"class":901},[362,2975,2976],{"class":1066},"degrees",[362,2978,1070],{"class":901},[362,2980,371],{"class":1066},[362,2982,902],{"class":901},[362,2984,2985],{"class":1066},"atan2",[362,2987,1070],{"class":901},[362,2989,1492],{"class":1277},[362,2991,1070],{"class":901},[362,2993,2994],{"class":1066},"vecs",[362,2996,1090],{"class":901},[362,2998,1241],{"class":1073},[362,3000,933],{"class":901},[362,3002,1607],{"class":1073},[362,3004,3005],{"class":901},"]),",[362,3007,2036],{"class":1277},[362,3009,1070],{"class":901},[362,3011,2994],{"class":1066},[362,3013,1090],{"class":901},[362,3015,1074],{"class":1073},[362,3017,933],{"class":901},[362,3019,1607],{"class":1073},[362,3021,3022],{"class":901},"])))\n",[362,3024,3025,3028,3030,3033,3035,3037,3040,3042,3045,3048,3050,3052,3055,3058,3061],{"class":852,"line":1015},[362,3026,3027],{"class":860},"    width",[362,3029,933],{"class":901},[362,3031,3032],{"class":860}," height ",[362,3034,395],{"class":1106},[362,3036,1110],{"class":901},[362,3038,3039],{"class":1073},"2",[362,3041,1764],{"class":1106},[362,3043,3044],{"class":860}," n_std ",[362,3046,3047],{"class":1106},"*",[362,3049,2883],{"class":860},[362,3051,902],{"class":901},[362,3053,3054],{"class":1066},"sqrt",[362,3056,3057],{"class":901},"()).",[362,3059,3060],{"class":1066},"tolist",[362,3062,1962],{"class":901},[362,3064,3065,3068,3070,3073,3075,3078,3081,3083,3085,3088,3090,3092,3094,3096,3098,3100,3102,3104],{"class":852,"line":1034},[362,3066,3067],{"class":860},"    ax",[362,3069,902],{"class":901},[362,3071,3072],{"class":1066},"add_patch",[362,3074,1070],{"class":901},[362,3076,3077],{"class":1066},"Ellipse",[362,3079,3080],{"class":901},"((",[362,3082,1492],{"class":1277},[362,3084,1070],{"class":901},[362,3086,3087],{"class":1066},"mean2",[362,3089,1090],{"class":901},[362,3091,1074],{"class":1073},[362,3093,3005],{"class":901},[362,3095,2036],{"class":1277},[362,3097,1070],{"class":901},[362,3099,3087],{"class":1066},[362,3101,1090],{"class":901},[362,3103,1241],{"class":1073},[362,3105,3106],{"class":901},"])),\n",[362,3108,3109,3112,3114,3117,3119,3122,3124,3127,3129,3132,3134,3137,3139,3141,3143],{"class":852,"line":1047},[362,3110,3111],{"class":1066},"                         width",[362,3113,933],{"class":901},[362,3115,3116],{"class":1066}," height",[362,3118,933],{"class":901},[362,3120,3121],{"class":1225}," angle",[362,3123,395],{"class":1106},[362,3125,3126],{"class":1066},"angle",[362,3128,933],{"class":901},[362,3130,3131],{"class":1225}," fill",[362,3133,395],{"class":1106},[362,3135,3136],{"class":1787},"False",[362,3138,933],{"class":901},[362,3140,2803],{"class":1106},[362,3142,2806],{"class":1066},[362,3144,3145],{"class":901},"))\n",[362,3147,3148],{"class":852,"line":1053},[362,3149,868],{"emptyLinePlaceholder":867},[362,3151,3152,3154,3157,3159,3161,3163,3166,3168,3171,3173,3175],{"class":852,"line":1058},[362,3153,1173],{"class":1172},[362,3155,3156],{"class":1176}," predictive_xy",[362,3158,1070],{"class":901},[362,3160,2742],{"class":1182},[362,3162,933],{"class":901},[362,3164,3165],{"class":1182}," r",[362,3167,933],{"class":901},[362,3169,3170],{"class":1182}," n",[362,3172,395],{"class":1106},[362,3174,3039],{"class":1073},[362,3176,1196],{"class":901},[362,3178,3179],{"class":852,"line":1079},[362,3180,1805],{"class":1201},[362,3182,3183],{"class":852,"line":1567},[362,3184,3185],{"class":1205},"    One-step-ahead measurement distribution for the position block.\n",[362,3187,3188],{"class":852,"line":1577},[362,3189,868],{"emptyLinePlaceholder":867},[362,3191,3192],{"class":852,"line":1586},[362,3193,3194],{"class":1205},"    For these models H = [I | 0], so the predicted measurement mean\n",[362,3196,3197],{"class":852,"line":1625},[362,3198,3199],{"class":1205},"    is the leading ``n`` state entries and its covariance is the\n",[362,3201,3202],{"class":852,"line":1657},[362,3203,3204],{"class":1205},"    leading n-by-n block of P plus the measurement noise R = r*I.\n",[362,3206,3207],{"class":852,"line":1689},[362,3208,1805],{"class":1201},[362,3210,3211,3214,3216,3218,3220,3222,3224,3226,3229,3232],{"class":852,"line":1709},[362,3212,3213],{"class":860},"    mu ",[362,3215,395],{"class":1106},[362,3217,2517],{"class":860},[362,3219,1090],{"class":901},[362,3221,1094],{"class":1093},[362,3223,2221],{"class":1097},[362,3225,1094],{"class":1093},[362,3227,3228],{"class":901},"][:",[362,3230,3231],{"class":860},"n",[362,3233,2332],{"class":901},[362,3235,3236,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279],{"class":852,"line":1719},[362,3237,3238],{"class":860},"    S ",[362,3240,395],{"class":1106},[362,3242,2517],{"class":860},[362,3244,1090],{"class":901},[362,3246,1094],{"class":1093},[362,3248,2236],{"class":1097},[362,3250,1094],{"class":1093},[362,3252,3228],{"class":901},[362,3254,3231],{"class":860},[362,3256,933],{"class":901},[362,3258,2370],{"class":901},[362,3260,3231],{"class":860},[362,3262,1103],{"class":901},[362,3264,2377],{"class":1106},[362,3266,2380],{"class":860},[362,3268,902],{"class":901},[362,3270,2385],{"class":1066},[362,3272,1070],{"class":901},[362,3274,3231],{"class":1066},[362,3276,2129],{"class":901},[362,3278,1764],{"class":1106},[362,3280,3281],{"class":860}," r\n",[362,3283,3284,3286,3289,3291],{"class":852,"line":1724},[362,3285,1214],{"class":856},[362,3287,3288],{"class":860}," mu",[362,3290,933],{"class":901},[362,3292,3293],{"class":860}," S\n",[362,3295,3296],{"class":852,"line":1729},[362,3297,868],{"emptyLinePlaceholder":867},[362,3299,3300,3302,3305,3307,3310,3312,3314,3316,3318],{"class":852,"line":1769},[362,3301,1173],{"class":1172},[362,3303,3304],{"class":1176}," fade",[362,3306,1070],{"class":901},[362,3308,3309],{"class":1182},"cmap_name",[362,3311,933],{"class":901},[362,3313,2006],{"class":1182},[362,3315,933],{"class":901},[362,3317,3170],{"class":1182},[362,3319,1196],{"class":901},[362,3321,3322,3324,3327],{"class":852,"line":1802},[362,3323,1202],{"class":1201},[362,3325,3326],{"class":1205},"A time-graded color: early frames light, late frames saturated.",[362,3328,1209],{"class":1201},[362,3330,3331,3333,3336,3338,3341,3343,3345,3348,3351,3353,3356,3358,3361,3363,3366,3368,3370,3372,3375,3377,3380],{"class":852,"line":1808},[362,3332,1214],{"class":856},[362,3334,3335],{"class":860}," plt",[362,3337,902],{"class":901},[362,3339,3340],{"class":1066},"get_cmap",[362,3342,1070],{"class":901},[362,3344,3309],{"class":1066},[362,3346,3347],{"class":901},")(",[362,3349,3350],{"class":1073},"0.25",[362,3352,2377],{"class":1106},[362,3354,3355],{"class":1073}," 0.7",[362,3357,1764],{"class":1106},[362,3359,3360],{"class":1066}," k ",[362,3362,124],{"class":1106},[362,3364,3365],{"class":2017}," max",[362,3367,1070],{"class":901},[362,3369,1241],{"class":1073},[362,3371,933],{"class":901},[362,3373,3374],{"class":1066}," n ",[362,3376,2416],{"class":1106},[362,3378,3379],{"class":1073}," 1",[362,3381,3145],{"class":901},[810,3383,3385],{"id":3384},"_1-points-a-2-d-centroid","1 — Points: a 2-D centroid",[338,3387,3388,3389,3391,3392,3394,3395,902],{},"The canonical case. A constant-velocity object drifts across the\nframe; the detector reports its centroid with Gaussian noise.\n",[702,3390,704],{}," carries ",[702,3393,709],{}," and observes ",[702,3396,714],{},[338,3398,3399,3400,3403,3404,3407,3408,3410],{},"Below, the grey curve is the true path, red ✕ are the noisy\ndetections, and the blue line is the filter's posterior estimate.\nThe ",[347,3401,3402],{},"green ellipses"," are what makes the filter a filter: at sampled\nframes, the 2σ region where the filter — using only ",[342,3405,3406],{},"past","\ndetections — expects the ",[342,3409,649],{}," detection to fall. A χ²\u002FMahalanobis\ngate is exactly \"is the detection inside this ellipse?\".",[842,3412,3414],{"className":844,"code":3413,"language":846,"meta":847,"style":847},"T = 22\nt = torch.arange(T).float()\ntrue_xy = torch.stack([2.0 * t, 12.0 + 0.06 * (t - 11) ** 2], dim=1)\ng = torch.Generator().manual_seed(3)\nsigma = 1.4\nmeas = true_xy + sigma * torch.randn(T, 2, generator=g)\n\nproc = KalmanCentroid2D(\"centroid\", q=0.08, r=sigma ** 2)\ninit_mean = torch.tensor([float(meas[0, 0]), float(meas[0, 1]), 2.0, 0.0])\ninit_cov = torch.diag(torch.tensor([4.0, 4.0, 4.0, 4.0]))\nrec = run_kalman(proc, init_mean, init_cov, list(meas), [True] * T)\npost = torch.stack([r[\"post_mean\"][:2] for r in rec])\n\n",[702,3415,3416,3426,3451,3513,3538,3548,3592,3596,3638,3696,3739,3786],{"__ignoreMap":847},[362,3417,3418,3421,3423],{"class":852,"line":853},[362,3419,3420],{"class":860},"T ",[362,3422,395],{"class":1106},[362,3424,3425],{"class":1073}," 22\n",[362,3427,3428,3431,3433,3435,3437,3440,3442,3445,3447,3449],{"class":852,"line":864},[362,3429,3430],{"class":860},"t ",[362,3432,395],{"class":1106},[362,3434,2380],{"class":860},[362,3436,902],{"class":901},[362,3438,3439],{"class":1066},"arange",[362,3441,1070],{"class":901},[362,3443,3444],{"class":1066},"T",[362,3446,1489],{"class":901},[362,3448,1492],{"class":1066},[362,3450,1962],{"class":901},[362,3452,3453,3456,3458,3460,3462,3465,3467,3469,3471,3474,3476,3479,3481,3484,3486,3488,3490,3492,3495,3497,3499,3502,3504,3507,3509,3511],{"class":852,"line":871},[362,3454,3455],{"class":860},"true_xy ",[362,3457,395],{"class":1106},[362,3459,2380],{"class":860},[362,3461,902],{"class":901},[362,3463,3464],{"class":1066},"stack",[362,3466,1238],{"class":901},[362,3468,2798],{"class":1073},[362,3470,1764],{"class":1106},[362,3472,3473],{"class":1066}," t",[362,3475,933],{"class":901},[362,3477,3478],{"class":1073}," 12.0",[362,3480,2377],{"class":1106},[362,3482,3483],{"class":1073}," 0.06",[362,3485,1764],{"class":1106},[362,3487,1110],{"class":901},[362,3489,3430],{"class":1066},[362,3491,2416],{"class":1106},[362,3493,3494],{"class":1073}," 11",[362,3496,2129],{"class":901},[362,3498,2803],{"class":1106},[362,3500,3501],{"class":1073}," 2",[362,3503,1244],{"class":901},[362,3505,3506],{"class":1225}," dim",[362,3508,395],{"class":1106},[362,3510,1241],{"class":1073},[362,3512,1050],{"class":901},[362,3514,3515,3518,3520,3522,3524,3527,3529,3531,3533,3536],{"class":852,"line":885},[362,3516,3517],{"class":860},"g ",[362,3519,395],{"class":1106},[362,3521,2380],{"class":860},[362,3523,902],{"class":901},[362,3525,3526],{"class":1066},"Generator",[362,3528,2834],{"class":901},[362,3530,1067],{"class":1066},[362,3532,1070],{"class":901},[362,3534,3535],{"class":1073},"3",[362,3537,1050],{"class":901},[362,3539,3540,3543,3545],{"class":852,"line":893},[362,3541,3542],{"class":860},"sigma ",[362,3544,395],{"class":1106},[362,3546,3547],{"class":1073}," 1.4\n",[362,3549,3550,3553,3555,3558,3560,3563,3565,3567,3569,3572,3574,3576,3578,3580,3582,3585,3587,3590],{"class":852,"line":915},[362,3551,3552],{"class":860},"meas ",[362,3554,395],{"class":1106},[362,3556,3557],{"class":860}," true_xy ",[362,3559,525],{"class":1106},[362,3561,3562],{"class":860}," sigma ",[362,3564,3047],{"class":1106},[362,3566,2380],{"class":860},[362,3568,902],{"class":901},[362,3570,3571],{"class":1066},"randn",[362,3573,1070],{"class":901},[362,3575,3444],{"class":1066},[362,3577,933],{"class":901},[362,3579,3501],{"class":1073},[362,3581,933],{"class":901},[362,3583,3584],{"class":1225}," generator",[362,3586,395],{"class":1106},[362,3588,3589],{"class":1066},"g",[362,3591,1050],{"class":901},[362,3593,3594],{"class":852,"line":939},[362,3595,868],{"emptyLinePlaceholder":867},[362,3597,3598,3601,3603,3605,3607,3609,3611,3613,3615,3618,3620,3623,3625,3627,3629,3631,3634,3636],{"class":852,"line":944},[362,3599,3600],{"class":860},"proc ",[362,3602,395],{"class":1106},[362,3604,1023],{"class":1066},[362,3606,1070],{"class":901},[362,3608,1094],{"class":1093},[362,3610,294],{"class":1097},[362,3612,1094],{"class":1093},[362,3614,933],{"class":901},[362,3616,3617],{"class":1225}," q",[362,3619,395],{"class":1106},[362,3621,3622],{"class":1073},"0.08",[362,3624,933],{"class":901},[362,3626,3165],{"class":1225},[362,3628,395],{"class":1106},[362,3630,3542],{"class":1066},[362,3632,3633],{"class":1106},"**",[362,3635,3501],{"class":1073},[362,3637,1050],{"class":901},[362,3639,3640,3643,3645,3647,3649,3651,3653,3655,3657,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3689,3691,3694],{"class":852,"line":977},[362,3641,3642],{"class":860},"init_mean ",[362,3644,395],{"class":1106},[362,3646,2380],{"class":860},[362,3648,902],{"class":901},[362,3650,1235],{"class":1066},[362,3652,1238],{"class":901},[362,3654,1492],{"class":1277},[362,3656,1070],{"class":901},[362,3658,3659],{"class":1066},"meas",[362,3661,1090],{"class":901},[362,3663,1074],{"class":1073},[362,3665,933],{"class":901},[362,3667,1607],{"class":1073},[362,3669,3005],{"class":901},[362,3671,2036],{"class":1277},[362,3673,1070],{"class":901},[362,3675,3659],{"class":1066},[362,3677,1090],{"class":901},[362,3679,1074],{"class":1073},[362,3681,933],{"class":901},[362,3683,3379],{"class":1073},[362,3685,3005],{"class":901},[362,3687,3688],{"class":1073}," 2.0",[362,3690,933],{"class":901},[362,3692,3693],{"class":1073}," 0.0",[362,3695,2605],{"class":901},[362,3697,3698,3701,3703,3705,3707,3710,3712,3714,3716,3718,3720,3723,3725,3728,3730,3732,3734,3736],{"class":852,"line":994},[362,3699,3700],{"class":860},"init_cov ",[362,3702,395],{"class":1106},[362,3704,2380],{"class":860},[362,3706,902],{"class":901},[362,3708,3709],{"class":1066},"diag",[362,3711,1070],{"class":901},[362,3713,1061],{"class":1066},[362,3715,902],{"class":901},[362,3717,1235],{"class":1066},[362,3719,1238],{"class":901},[362,3721,3722],{"class":1073},"4.0",[362,3724,933],{"class":901},[362,3726,3727],{"class":1073}," 4.0",[362,3729,933],{"class":901},[362,3731,3727],{"class":1073},[362,3733,933],{"class":901},[362,3735,3727],{"class":1073},[362,3737,3738],{"class":901},"]))\n",[362,3740,3741,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3765,3767,3769,3772,3775,3777,3779,3781,3784],{"class":852,"line":1015},[362,3742,3743],{"class":860},"rec ",[362,3745,395],{"class":1106},[362,3747,1734],{"class":1066},[362,3749,1070],{"class":901},[362,3751,1739],{"class":1066},[362,3753,933],{"class":901},[362,3755,1744],{"class":1066},[362,3757,933],{"class":901},[362,3759,1749],{"class":1066},[362,3761,933],{"class":901},[362,3763,3764],{"class":1277}," list",[362,3766,1070],{"class":901},[362,3768,3659],{"class":1066},[362,3770,3771],{"class":901},"),",[362,3773,3774],{"class":901}," [",[362,3776,2929],{"class":1787},[362,3778,1103],{"class":901},[362,3780,1764],{"class":1106},[362,3782,3783],{"class":1066}," T",[362,3785,1050],{"class":901},[362,3787,3788,3791,3793,3795,3797,3799,3801,3804,3806,3808,3810,3812,3814,3816,3818,3821,3824,3826,3828],{"class":852,"line":1034},[362,3789,3790],{"class":860},"post ",[362,3792,395],{"class":1106},[362,3794,2380],{"class":860},[362,3796,902],{"class":901},[362,3798,3464],{"class":1066},[362,3800,1238],{"class":901},[362,3802,3803],{"class":1066},"r",[362,3805,1090],{"class":901},[362,3807,1094],{"class":1093},[362,3809,2652],{"class":1097},[362,3811,1094],{"class":1093},[362,3813,3228],{"class":901},[362,3815,3039],{"class":1073},[362,3817,1103],{"class":901},[362,3819,3820],{"class":856}," for",[362,3822,3823],{"class":1066}," r ",[362,3825,2014],{"class":856},[362,3827,2517],{"class":1066},[362,3829,2605],{"class":901},[842,3831,3833],{"className":844,"code":3832,"language":846,"meta":847,"style":847},"fig, ax = plt.subplots(figsize=(9, 5))\nax.plot(true_xy[:, 0], true_xy[:, 1], \"-\", color=\"0.55\", lw=2,\n        label=\"ground truth\", zorder=1)\nax.scatter(meas[:, 0], meas[:, 1], marker=\"x\", color=\"tab:red\", s=45,\n           label=\"noisy detections\", zorder=2)\nax.plot(post[:, 0], post[:, 1], \"o-\", color=\"tab:blue\", ms=4,\n        label=\"Kalman estimate (posterior)\", zorder=3)\nfor k in range(3, T, 4):\n    mu, S = predictive_xy(rec[k], proc.r)\n    cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=1.4)\nax.plot([], [], color=\"tab:green\", lw=1.4,\n        label=\"2σ predicted next position\")\nax.set_title(\"2-D centroid: trajectory + one-step-ahead predictive distribution\")\nax.set_xlabel(\"x\"); ax.set_ylabel(\"y\")\nax.legend(loc=\"upper left\", fontsize=8); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,3834,3835,3873,3933,3958,4022,4046,4106,4129,4155,4187,4238,4272,4287,4307,4345,4399],{"__ignoreMap":847},[362,3836,3837,3840,3842,3845,3847,3849,3851,3854,3856,3859,3861,3863,3866,3868,3871],{"class":852,"line":853},[362,3838,3839],{"class":860},"fig",[362,3841,933],{"class":901},[362,3843,3844],{"class":860}," ax ",[362,3846,395],{"class":1106},[362,3848,3335],{"class":860},[362,3850,902],{"class":901},[362,3852,3853],{"class":1066},"subplots",[362,3855,1070],{"class":901},[362,3857,3858],{"class":1225},"figsize",[362,3860,395],{"class":1106},[362,3862,1070],{"class":901},[362,3864,3865],{"class":1073},"9",[362,3867,933],{"class":901},[362,3869,3870],{"class":1073}," 5",[362,3872,3145],{"class":901},[362,3874,3875,3877,3879,3882,3884,3887,3889,3891,3893,3896,3898,3900,3902,3904,3906,3908,3910,3913,3915,3917,3920,3922,3924,3927,3929,3931],{"class":852,"line":864},[362,3876,2778],{"class":860},[362,3878,902],{"class":901},[362,3880,3881],{"class":1066},"plot",[362,3883,1070],{"class":901},[362,3885,3886],{"class":1066},"true_xy",[362,3888,2956],{"class":901},[362,3890,1607],{"class":1073},[362,3892,1244],{"class":901},[362,3894,3895],{"class":1066}," true_xy",[362,3897,2956],{"class":901},[362,3899,3379],{"class":1073},[362,3901,1244],{"class":901},[362,3903,2233],{"class":1093},[362,3905,2416],{"class":1097},[362,3907,1094],{"class":1093},[362,3909,933],{"class":901},[362,3911,3912],{"class":1225}," color",[362,3914,395],{"class":1106},[362,3916,1094],{"class":1093},[362,3918,3919],{"class":1097},"0.55",[362,3921,1094],{"class":1093},[362,3923,933],{"class":901},[362,3925,3926],{"class":1225}," lw",[362,3928,395],{"class":1106},[362,3930,3039],{"class":1073},[362,3932,1031],{"class":901},[362,3934,3935,3938,3940,3942,3945,3947,3949,3952,3954,3956],{"class":852,"line":871},[362,3936,3937],{"class":1225},"        label",[362,3939,395],{"class":1106},[362,3941,1094],{"class":1093},[362,3943,3944],{"class":1097},"ground truth",[362,3946,1094],{"class":1093},[362,3948,933],{"class":901},[362,3950,3951],{"class":1225}," zorder",[362,3953,395],{"class":1106},[362,3955,1241],{"class":1073},[362,3957,1050],{"class":901},[362,3959,3960,3962,3964,3967,3969,3971,3973,3975,3977,3980,3982,3984,3986,3989,3991,3993,3995,3997,3999,4001,4003,4005,4008,4010,4012,4015,4017,4020],{"class":852,"line":885},[362,3961,2778],{"class":860},[362,3963,902],{"class":901},[362,3965,3966],{"class":1066},"scatter",[362,3968,1070],{"class":901},[362,3970,3659],{"class":1066},[362,3972,2956],{"class":901},[362,3974,1607],{"class":1073},[362,3976,1244],{"class":901},[362,3978,3979],{"class":1066}," meas",[362,3981,2956],{"class":901},[362,3983,3379],{"class":1073},[362,3985,1244],{"class":901},[362,3987,3988],{"class":1225}," marker",[362,3990,395],{"class":1106},[362,3992,1094],{"class":1093},[362,3994,386],{"class":1097},[362,3996,1094],{"class":1093},[362,3998,933],{"class":901},[362,4000,3912],{"class":1225},[362,4002,395],{"class":1106},[362,4004,1094],{"class":1093},[362,4006,4007],{"class":1097},"tab:red",[362,4009,1094],{"class":1093},[362,4011,933],{"class":901},[362,4013,4014],{"class":1225}," s",[362,4016,395],{"class":1106},[362,4018,4019],{"class":1073},"45",[362,4021,1031],{"class":901},[362,4023,4024,4027,4029,4031,4034,4036,4038,4040,4042,4044],{"class":852,"line":893},[362,4025,4026],{"class":1225},"           label",[362,4028,395],{"class":1106},[362,4030,1094],{"class":1093},[362,4032,4033],{"class":1097},"noisy detections",[362,4035,1094],{"class":1093},[362,4037,933],{"class":901},[362,4039,3951],{"class":1225},[362,4041,395],{"class":1106},[362,4043,3039],{"class":1073},[362,4045,1050],{"class":901},[362,4047,4048,4050,4052,4054,4056,4059,4061,4063,4065,4068,4070,4072,4074,4076,4079,4081,4083,4085,4087,4089,4092,4094,4096,4099,4101,4104],{"class":852,"line":915},[362,4049,2778],{"class":860},[362,4051,902],{"class":901},[362,4053,3881],{"class":1066},[362,4055,1070],{"class":901},[362,4057,4058],{"class":1066},"post",[362,4060,2956],{"class":901},[362,4062,1607],{"class":1073},[362,4064,1244],{"class":901},[362,4066,4067],{"class":1066}," post",[362,4069,2956],{"class":901},[362,4071,3379],{"class":1073},[362,4073,1244],{"class":901},[362,4075,2233],{"class":1093},[362,4077,4078],{"class":1097},"o-",[362,4080,1094],{"class":1093},[362,4082,933],{"class":901},[362,4084,3912],{"class":1225},[362,4086,395],{"class":1106},[362,4088,1094],{"class":1093},[362,4090,4091],{"class":1097},"tab:blue",[362,4093,1094],{"class":1093},[362,4095,933],{"class":901},[362,4097,4098],{"class":1225}," ms",[362,4100,395],{"class":1106},[362,4102,4103],{"class":1073},"4",[362,4105,1031],{"class":901},[362,4107,4108,4110,4112,4114,4117,4119,4121,4123,4125,4127],{"class":852,"line":939},[362,4109,3937],{"class":1225},[362,4111,395],{"class":1106},[362,4113,1094],{"class":1093},[362,4115,4116],{"class":1097},"Kalman estimate (posterior)",[362,4118,1094],{"class":1093},[362,4120,933],{"class":901},[362,4122,3951],{"class":1225},[362,4124,395],{"class":1106},[362,4126,3535],{"class":1073},[362,4128,1050],{"class":901},[362,4130,4131,4134,4136,4138,4141,4143,4145,4147,4149,4151,4153],{"class":852,"line":944},[362,4132,4133],{"class":856},"for",[362,4135,3360],{"class":860},[362,4137,2014],{"class":856},[362,4139,4140],{"class":2017}," range",[362,4142,1070],{"class":901},[362,4144,3535],{"class":1073},[362,4146,933],{"class":901},[362,4148,3783],{"class":1066},[362,4150,933],{"class":901},[362,4152,1118],{"class":1073},[362,4154,1196],{"class":901},[362,4156,4157,4160,4162,4165,4167,4169,4171,4173,4175,4177,4179,4181,4183,4185],{"class":852,"line":977},[362,4158,4159],{"class":860},"    mu",[362,4161,933],{"class":901},[362,4163,4164],{"class":860}," S ",[362,4166,395],{"class":1106},[362,4168,3156],{"class":1066},[362,4170,1070],{"class":901},[362,4172,2742],{"class":1066},[362,4174,1090],{"class":901},[362,4176,2046],{"class":1066},[362,4178,1244],{"class":901},[362,4180,1939],{"class":1066},[362,4182,902],{"class":901},[362,4184,3803],{"class":905},[362,4186,1050],{"class":901},[362,4188,4189,4192,4194,4196,4198,4200,4202,4205,4207,4209,4211,4213,4215,4218,4220,4222,4225,4227,4229,4231,4233,4236],{"class":852,"line":994},[362,4190,4191],{"class":1066},"    cov_ellipse",[362,4193,1070],{"class":901},[362,4195,2778],{"class":1066},[362,4197,933],{"class":901},[362,4199,3288],{"class":1066},[362,4201,933],{"class":901},[362,4203,4204],{"class":1066}," S",[362,4206,933],{"class":901},[362,4208,2793],{"class":1225},[362,4210,395],{"class":1106},[362,4212,2798],{"class":1073},[362,4214,933],{"class":901},[362,4216,4217],{"class":1225}," edgecolor",[362,4219,395],{"class":1106},[362,4221,1094],{"class":1093},[362,4223,4224],{"class":1097},"tab:green",[362,4226,1094],{"class":1093},[362,4228,933],{"class":901},[362,4230,3926],{"class":1225},[362,4232,395],{"class":1106},[362,4234,4235],{"class":1073},"1.4",[362,4237,1050],{"class":901},[362,4239,4240,4242,4244,4246,4249,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270],{"class":852,"line":1015},[362,4241,2778],{"class":860},[362,4243,902],{"class":901},[362,4245,3881],{"class":1066},[362,4247,4248],{"class":901},"([],",[362,4250,4251],{"class":901}," [],",[362,4253,3912],{"class":1225},[362,4255,395],{"class":1106},[362,4257,1094],{"class":1093},[362,4259,4224],{"class":1097},[362,4261,1094],{"class":1093},[362,4263,933],{"class":901},[362,4265,3926],{"class":1225},[362,4267,395],{"class":1106},[362,4269,4235],{"class":1073},[362,4271,1031],{"class":901},[362,4273,4274,4276,4278,4280,4283,4285],{"class":852,"line":1034},[362,4275,3937],{"class":1225},[362,4277,395],{"class":1106},[362,4279,1094],{"class":1093},[362,4281,4282],{"class":1097},"2σ predicted next position",[362,4284,1094],{"class":1093},[362,4286,1050],{"class":901},[362,4288,4289,4291,4293,4296,4298,4300,4303,4305],{"class":852,"line":1047},[362,4290,2778],{"class":860},[362,4292,902],{"class":901},[362,4294,4295],{"class":1066},"set_title",[362,4297,1070],{"class":901},[362,4299,1094],{"class":1093},[362,4301,4302],{"class":1097},"2-D centroid: trajectory + one-step-ahead predictive distribution",[362,4304,1094],{"class":1093},[362,4306,1050],{"class":901},[362,4308,4309,4311,4313,4316,4318,4320,4322,4324,4326,4329,4331,4334,4336,4338,4341,4343],{"class":852,"line":1053},[362,4310,2778],{"class":860},[362,4312,902],{"class":901},[362,4314,4315],{"class":1066},"set_xlabel",[362,4317,1070],{"class":901},[362,4319,1094],{"class":1093},[362,4321,386],{"class":1097},[362,4323,1094],{"class":1093},[362,4325,2129],{"class":901},[362,4327,4328],{"class":860},"; ax",[362,4330,902],{"class":901},[362,4332,4333],{"class":1066},"set_ylabel",[362,4335,1070],{"class":901},[362,4337,1094],{"class":1093},[362,4339,4340],{"class":1097},"y",[362,4342,1094],{"class":1093},[362,4344,1050],{"class":901},[362,4346,4347,4349,4351,4354,4356,4359,4361,4363,4366,4368,4370,4373,4375,4378,4380,4382,4384,4387,4389,4392,4394,4397],{"class":852,"line":1058},[362,4348,2778],{"class":860},[362,4350,902],{"class":901},[362,4352,4353],{"class":1066},"legend",[362,4355,1070],{"class":901},[362,4357,4358],{"class":1225},"loc",[362,4360,395],{"class":1106},[362,4362,1094],{"class":1093},[362,4364,4365],{"class":1097},"upper left",[362,4367,1094],{"class":1093},[362,4369,933],{"class":901},[362,4371,4372],{"class":1225}," fontsize",[362,4374,395],{"class":1106},[362,4376,4377],{"class":1073},"8",[362,4379,2129],{"class":901},[362,4381,4328],{"class":860},[362,4383,902],{"class":901},[362,4385,4386],{"class":1066},"grid",[362,4388,1070],{"class":901},[362,4390,4391],{"class":1225},"alpha",[362,4393,395],{"class":1106},[362,4395,4396],{"class":1073},"0.3",[362,4398,1050],{"class":901},[362,4400,4401,4403,4405,4408,4411,4414,4416,4419],{"class":852,"line":1079},[362,4402,1082],{"class":860},[362,4404,902],{"class":901},[362,4406,4407],{"class":1066},"tight_layout",[362,4409,4410],{"class":901},"()",[362,4412,4413],{"class":860},"; plt",[362,4415,902],{"class":901},[362,4417,4418],{"class":1066},"show",[362,4420,1962],{"class":901},[338,4422,4423],{},[4424,4425],"img",{"alt":847,"src":4426},"\u002F_nb\u002F9cc84592b188e55b.png",[1122,4428,4430],{"id":4429},"predicting-through-an-occlusion","Predicting through an occlusion",[338,4432,4433,4434,4437,4438,4441],{},"The predictive distribution is most useful when there is ",[342,4435,4436],{},"no","\ndetection to fall back on. Here the object is occluded for six\nframes (no detections, frames 7–12). With no measurement to fuse,\nthe filter keeps predicting: the mean coasts along the last known\nvelocity and the covariance ",[347,4439,4440],{},"grows"," every frame — the ellipses\nballoon, honestly reporting \"it's somewhere in here, and I'm less\nand less sure.\" When the object reappears, one detection collapses\nthe uncertainty again.",[842,4443,4445],{"className":844,"code":4444,"language":846,"meta":847,"style":847},"present = [True] * 7 + [False] * 6 + [True] * 9\nT2 = len(present)\nt2 = torch.arange(T2).float()\ntrue2 = torch.stack([2.0 * t2, 10.0 + 1.2 * t2], dim=1)\ng = torch.Generator().manual_seed(5)\nmeas2 = true2 + 1.0 * torch.randn(T2, 2, generator=g)\n\nproc = KalmanCentroid2D(\"centroid\", q=0.05, r=1.0)\ninit_mean = torch.tensor([float(meas2[0, 0]), float(meas2[0, 1]), 2.0, 1.2])\nrec2 = run_kalman(proc, init_mean, torch.eye(4) * 3.0,\n                  list(meas2), present)\nest2 = torch.stack([r[\"post_mean\"][:2] for r in rec2])\n\nfig, ax = plt.subplots(figsize=(9, 5))\nax.plot(true2[:, 0], true2[:, 1], \"-\", color=\"0.55\", lw=2, label=\"ground truth\")\nseen_mask = torch.tensor(present)\nax.scatter(meas2[seen_mask, 0], meas2[seen_mask, 1], marker=\"x\",\n           color=\"tab:red\", s=45, label=\"detections (when visible)\")\nax.plot(est2[:, 0], est2[:, 1], \"o-\", color=\"tab:blue\", ms=4,\n        label=\"Kalman estimate\")\nfor k in range(T2):\n    if not present[k]:                      # draw the growing belief\n        mu, S = predictive_xy(rec2[k], proc.r)\n        cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:orange\", lw=1.3)\nax.plot([], [], color=\"tab:orange\", lw=1.3, label=\"2σ belief during occlusion\")\nax.set_title(\"Coasting through a 6-frame occlusion (orange = no detection)\")\nax.set_xlabel(\"x\"); ax.set_ylabel(\"y\")\nax.legend(loc=\"upper left\", fontsize=8); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,4446,4447,4491,4507,4531,4577,4600,4641,4645,4680,4735,4773,4788,4830,4834,4866,4935,4954,5002,5038,5094,5109,5125,5144,5176,5225,5270,5289,5323,5369],{"__ignoreMap":847},[362,4448,4449,4452,4454,4456,4458,4460,4462,4465,4467,4469,4471,4473,4475,4478,4480,4482,4484,4486,4488],{"class":852,"line":853},[362,4450,4451],{"class":860},"present ",[362,4453,395],{"class":1106},[362,4455,3774],{"class":901},[362,4457,2929],{"class":1787},[362,4459,1103],{"class":901},[362,4461,1764],{"class":1106},[362,4463,4464],{"class":1073}," 7",[362,4466,2377],{"class":1106},[362,4468,3774],{"class":901},[362,4470,3136],{"class":1787},[362,4472,1103],{"class":901},[362,4474,1764],{"class":1106},[362,4476,4477],{"class":1073}," 6",[362,4479,2377],{"class":1106},[362,4481,3774],{"class":901},[362,4483,2929],{"class":1787},[362,4485,1103],{"class":901},[362,4487,1764],{"class":1106},[362,4489,4490],{"class":1073}," 9\n",[362,4492,4493,4496,4498,4501,4503,4505],{"class":852,"line":864},[362,4494,4495],{"class":860},"T2 ",[362,4497,395],{"class":1106},[362,4499,4500],{"class":2017}," len",[362,4502,1070],{"class":901},[362,4504,2023],{"class":1066},[362,4506,1050],{"class":901},[362,4508,4509,4512,4514,4516,4518,4520,4522,4525,4527,4529],{"class":852,"line":871},[362,4510,4511],{"class":860},"t2 ",[362,4513,395],{"class":1106},[362,4515,2380],{"class":860},[362,4517,902],{"class":901},[362,4519,3439],{"class":1066},[362,4521,1070],{"class":901},[362,4523,4524],{"class":1066},"T2",[362,4526,1489],{"class":901},[362,4528,1492],{"class":1066},[362,4530,1962],{"class":901},[362,4532,4533,4536,4538,4540,4542,4544,4546,4548,4550,4553,4555,4558,4560,4563,4565,4567,4569,4571,4573,4575],{"class":852,"line":885},[362,4534,4535],{"class":860},"true2 ",[362,4537,395],{"class":1106},[362,4539,2380],{"class":860},[362,4541,902],{"class":901},[362,4543,3464],{"class":1066},[362,4545,1238],{"class":901},[362,4547,2798],{"class":1073},[362,4549,1764],{"class":1106},[362,4551,4552],{"class":1066}," t2",[362,4554,933],{"class":901},[362,4556,4557],{"class":1073}," 10.0",[362,4559,2377],{"class":1106},[362,4561,4562],{"class":1073}," 1.2",[362,4564,1764],{"class":1106},[362,4566,4552],{"class":1066},[362,4568,1244],{"class":901},[362,4570,3506],{"class":1225},[362,4572,395],{"class":1106},[362,4574,1241],{"class":1073},[362,4576,1050],{"class":901},[362,4578,4579,4581,4583,4585,4587,4589,4591,4593,4595,4598],{"class":852,"line":893},[362,4580,3517],{"class":860},[362,4582,395],{"class":1106},[362,4584,2380],{"class":860},[362,4586,902],{"class":901},[362,4588,3526],{"class":1066},[362,4590,2834],{"class":901},[362,4592,1067],{"class":1066},[362,4594,1070],{"class":901},[362,4596,4597],{"class":1073},"5",[362,4599,1050],{"class":901},[362,4601,4602,4605,4607,4610,4612,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637,4639],{"class":852,"line":915},[362,4603,4604],{"class":860},"meas2 ",[362,4606,395],{"class":1106},[362,4608,4609],{"class":860}," true2 ",[362,4611,525],{"class":1106},[362,4613,4614],{"class":1073}," 1.0",[362,4616,1764],{"class":1106},[362,4618,2380],{"class":860},[362,4620,902],{"class":901},[362,4622,3571],{"class":1066},[362,4624,1070],{"class":901},[362,4626,4524],{"class":1066},[362,4628,933],{"class":901},[362,4630,3501],{"class":1073},[362,4632,933],{"class":901},[362,4634,3584],{"class":1225},[362,4636,395],{"class":1106},[362,4638,3589],{"class":1066},[362,4640,1050],{"class":901},[362,4642,4643],{"class":852,"line":939},[362,4644,868],{"emptyLinePlaceholder":867},[362,4646,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4670,4672,4674,4676,4678],{"class":852,"line":944},[362,4648,3600],{"class":860},[362,4650,395],{"class":1106},[362,4652,1023],{"class":1066},[362,4654,1070],{"class":901},[362,4656,1094],{"class":1093},[362,4658,294],{"class":1097},[362,4660,1094],{"class":1093},[362,4662,933],{"class":901},[362,4664,3617],{"class":1225},[362,4666,395],{"class":1106},[362,4668,4669],{"class":1073},"0.05",[362,4671,933],{"class":901},[362,4673,3165],{"class":1225},[362,4675,395],{"class":1106},[362,4677,1777],{"class":1073},[362,4679,1050],{"class":901},[362,4681,4682,4684,4686,4688,4690,4692,4694,4696,4698,4701,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733],{"class":852,"line":977},[362,4683,3642],{"class":860},[362,4685,395],{"class":1106},[362,4687,2380],{"class":860},[362,4689,902],{"class":901},[362,4691,1235],{"class":1066},[362,4693,1238],{"class":901},[362,4695,1492],{"class":1277},[362,4697,1070],{"class":901},[362,4699,4700],{"class":1066},"meas2",[362,4702,1090],{"class":901},[362,4704,1074],{"class":1073},[362,4706,933],{"class":901},[362,4708,1607],{"class":1073},[362,4710,3005],{"class":901},[362,4712,2036],{"class":1277},[362,4714,1070],{"class":901},[362,4716,4700],{"class":1066},[362,4718,1090],{"class":901},[362,4720,1074],{"class":1073},[362,4722,933],{"class":901},[362,4724,3379],{"class":1073},[362,4726,3005],{"class":901},[362,4728,3688],{"class":1073},[362,4730,933],{"class":901},[362,4732,4562],{"class":1073},[362,4734,2605],{"class":901},[362,4736,4737,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4771],{"class":852,"line":994},[362,4738,4739],{"class":860},"rec2 ",[362,4741,395],{"class":1106},[362,4743,1734],{"class":1066},[362,4745,1070],{"class":901},[362,4747,1739],{"class":1066},[362,4749,933],{"class":901},[362,4751,1744],{"class":1066},[362,4753,933],{"class":901},[362,4755,2380],{"class":1066},[362,4757,902],{"class":901},[362,4759,2385],{"class":1066},[362,4761,1070],{"class":901},[362,4763,4103],{"class":1073},[362,4765,2129],{"class":901},[362,4767,1764],{"class":1106},[362,4769,4770],{"class":1073}," 3.0",[362,4772,1031],{"class":901},[362,4774,4775,4778,4780,4782,4784,4786],{"class":852,"line":1015},[362,4776,4777],{"class":1277},"                  list",[362,4779,1070],{"class":901},[362,4781,4700],{"class":1066},[362,4783,3771],{"class":901},[362,4785,1759],{"class":1066},[362,4787,1050],{"class":901},[362,4789,4790,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4828],{"class":852,"line":1034},[362,4791,4792],{"class":860},"est2 ",[362,4794,395],{"class":1106},[362,4796,2380],{"class":860},[362,4798,902],{"class":901},[362,4800,3464],{"class":1066},[362,4802,1238],{"class":901},[362,4804,3803],{"class":1066},[362,4806,1090],{"class":901},[362,4808,1094],{"class":1093},[362,4810,2652],{"class":1097},[362,4812,1094],{"class":1093},[362,4814,3228],{"class":901},[362,4816,3039],{"class":1073},[362,4818,1103],{"class":901},[362,4820,3820],{"class":856},[362,4822,3823],{"class":1066},[362,4824,2014],{"class":856},[362,4826,4827],{"class":1066}," rec2",[362,4829,2605],{"class":901},[362,4831,4832],{"class":852,"line":1047},[362,4833,868],{"emptyLinePlaceholder":867},[362,4835,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862,4864],{"class":852,"line":1053},[362,4837,3839],{"class":860},[362,4839,933],{"class":901},[362,4841,3844],{"class":860},[362,4843,395],{"class":1106},[362,4845,3335],{"class":860},[362,4847,902],{"class":901},[362,4849,3853],{"class":1066},[362,4851,1070],{"class":901},[362,4853,3858],{"class":1225},[362,4855,395],{"class":1106},[362,4857,1070],{"class":901},[362,4859,3865],{"class":1073},[362,4861,933],{"class":901},[362,4863,3870],{"class":1073},[362,4865,3145],{"class":901},[362,4867,4868,4870,4872,4874,4876,4879,4881,4883,4885,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920,4922,4925,4927,4929,4931,4933],{"class":852,"line":1058},[362,4869,2778],{"class":860},[362,4871,902],{"class":901},[362,4873,3881],{"class":1066},[362,4875,1070],{"class":901},[362,4877,4878],{"class":1066},"true2",[362,4880,2956],{"class":901},[362,4882,1607],{"class":1073},[362,4884,1244],{"class":901},[362,4886,4887],{"class":1066}," true2",[362,4889,2956],{"class":901},[362,4891,3379],{"class":1073},[362,4893,1244],{"class":901},[362,4895,2233],{"class":1093},[362,4897,2416],{"class":1097},[362,4899,1094],{"class":1093},[362,4901,933],{"class":901},[362,4903,3912],{"class":1225},[362,4905,395],{"class":1106},[362,4907,1094],{"class":1093},[362,4909,3919],{"class":1097},[362,4911,1094],{"class":1093},[362,4913,933],{"class":901},[362,4915,3926],{"class":1225},[362,4917,395],{"class":1106},[362,4919,3039],{"class":1073},[362,4921,933],{"class":901},[362,4923,4924],{"class":1225}," label",[362,4926,395],{"class":1106},[362,4928,1094],{"class":1093},[362,4930,3944],{"class":1097},[362,4932,1094],{"class":1093},[362,4934,1050],{"class":901},[362,4936,4937,4940,4942,4944,4946,4948,4950,4952],{"class":852,"line":1079},[362,4938,4939],{"class":860},"seen_mask ",[362,4941,395],{"class":1106},[362,4943,2380],{"class":860},[362,4945,902],{"class":901},[362,4947,1235],{"class":1066},[362,4949,1070],{"class":901},[362,4951,2023],{"class":1066},[362,4953,1050],{"class":901},[362,4955,4956,4958,4960,4962,4964,4966,4968,4971,4973,4975,4977,4980,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000],{"class":852,"line":1567},[362,4957,2778],{"class":860},[362,4959,902],{"class":901},[362,4961,3966],{"class":1066},[362,4963,1070],{"class":901},[362,4965,4700],{"class":1066},[362,4967,1090],{"class":901},[362,4969,4970],{"class":1066},"seen_mask",[362,4972,933],{"class":901},[362,4974,1607],{"class":1073},[362,4976,1244],{"class":901},[362,4978,4979],{"class":1066}," meas2",[362,4981,1090],{"class":901},[362,4983,4970],{"class":1066},[362,4985,933],{"class":901},[362,4987,3379],{"class":1073},[362,4989,1244],{"class":901},[362,4991,3988],{"class":1225},[362,4993,395],{"class":1106},[362,4995,1094],{"class":1093},[362,4997,386],{"class":1097},[362,4999,1094],{"class":1093},[362,5001,1031],{"class":901},[362,5003,5004,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031,5034,5036],{"class":852,"line":1577},[362,5005,5006],{"class":1225},"           color",[362,5008,395],{"class":1106},[362,5010,1094],{"class":1093},[362,5012,4007],{"class":1097},[362,5014,1094],{"class":1093},[362,5016,933],{"class":901},[362,5018,4014],{"class":1225},[362,5020,395],{"class":1106},[362,5022,4019],{"class":1073},[362,5024,933],{"class":901},[362,5026,4924],{"class":1225},[362,5028,395],{"class":1106},[362,5030,1094],{"class":1093},[362,5032,5033],{"class":1097},"detections (when visible)",[362,5035,1094],{"class":1093},[362,5037,1050],{"class":901},[362,5039,5040,5042,5044,5046,5048,5051,5053,5055,5057,5060,5062,5064,5066,5068,5070,5072,5074,5076,5078,5080,5082,5084,5086,5088,5090,5092],{"class":852,"line":1586},[362,5041,2778],{"class":860},[362,5043,902],{"class":901},[362,5045,3881],{"class":1066},[362,5047,1070],{"class":901},[362,5049,5050],{"class":1066},"est2",[362,5052,2956],{"class":901},[362,5054,1607],{"class":1073},[362,5056,1244],{"class":901},[362,5058,5059],{"class":1066}," est2",[362,5061,2956],{"class":901},[362,5063,3379],{"class":1073},[362,5065,1244],{"class":901},[362,5067,2233],{"class":1093},[362,5069,4078],{"class":1097},[362,5071,1094],{"class":1093},[362,5073,933],{"class":901},[362,5075,3912],{"class":1225},[362,5077,395],{"class":1106},[362,5079,1094],{"class":1093},[362,5081,4091],{"class":1097},[362,5083,1094],{"class":1093},[362,5085,933],{"class":901},[362,5087,4098],{"class":1225},[362,5089,395],{"class":1106},[362,5091,4103],{"class":1073},[362,5093,1031],{"class":901},[362,5095,5096,5098,5100,5102,5105,5107],{"class":852,"line":1625},[362,5097,3937],{"class":1225},[362,5099,395],{"class":1106},[362,5101,1094],{"class":1093},[362,5103,5104],{"class":1097},"Kalman estimate",[362,5106,1094],{"class":1093},[362,5108,1050],{"class":901},[362,5110,5111,5113,5115,5117,5119,5121,5123],{"class":852,"line":1657},[362,5112,4133],{"class":856},[362,5114,3360],{"class":860},[362,5116,2014],{"class":856},[362,5118,4140],{"class":2017},[362,5120,1070],{"class":901},[362,5122,4524],{"class":1066},[362,5124,1196],{"class":901},[362,5126,5127,5130,5132,5134,5136,5138,5141],{"class":852,"line":1689},[362,5128,5129],{"class":856},"    if",[362,5131,2061],{"class":1106},[362,5133,1759],{"class":860},[362,5135,1090],{"class":901},[362,5137,2046],{"class":860},[362,5139,5140],{"class":901},"]:",[362,5142,5143],{"class":2132},"                      # draw the growing belief\n",[362,5145,5146,5149,5151,5153,5155,5157,5159,5162,5164,5166,5168,5170,5172,5174],{"class":852,"line":1709},[362,5147,5148],{"class":860},"        mu",[362,5150,933],{"class":901},[362,5152,4164],{"class":860},[362,5154,395],{"class":1106},[362,5156,3156],{"class":1066},[362,5158,1070],{"class":901},[362,5160,5161],{"class":1066},"rec2",[362,5163,1090],{"class":901},[362,5165,2046],{"class":1066},[362,5167,1244],{"class":901},[362,5169,1939],{"class":1066},[362,5171,902],{"class":901},[362,5173,3803],{"class":905},[362,5175,1050],{"class":901},[362,5177,5178,5181,5183,5185,5187,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209,5212,5214,5216,5218,5220,5223],{"class":852,"line":1719},[362,5179,5180],{"class":1066},"        cov_ellipse",[362,5182,1070],{"class":901},[362,5184,2778],{"class":1066},[362,5186,933],{"class":901},[362,5188,3288],{"class":1066},[362,5190,933],{"class":901},[362,5192,4204],{"class":1066},[362,5194,933],{"class":901},[362,5196,2793],{"class":1225},[362,5198,395],{"class":1106},[362,5200,2798],{"class":1073},[362,5202,933],{"class":901},[362,5204,4217],{"class":1225},[362,5206,395],{"class":1106},[362,5208,1094],{"class":1093},[362,5210,5211],{"class":1097},"tab:orange",[362,5213,1094],{"class":1093},[362,5215,933],{"class":901},[362,5217,3926],{"class":1225},[362,5219,395],{"class":1106},[362,5221,5222],{"class":1073},"1.3",[362,5224,1050],{"class":901},[362,5226,5227,5229,5231,5233,5235,5237,5239,5241,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5266,5268],{"class":852,"line":1724},[362,5228,2778],{"class":860},[362,5230,902],{"class":901},[362,5232,3881],{"class":1066},[362,5234,4248],{"class":901},[362,5236,4251],{"class":901},[362,5238,3912],{"class":1225},[362,5240,395],{"class":1106},[362,5242,1094],{"class":1093},[362,5244,5211],{"class":1097},[362,5246,1094],{"class":1093},[362,5248,933],{"class":901},[362,5250,3926],{"class":1225},[362,5252,395],{"class":1106},[362,5254,5222],{"class":1073},[362,5256,933],{"class":901},[362,5258,4924],{"class":1225},[362,5260,395],{"class":1106},[362,5262,1094],{"class":1093},[362,5264,5265],{"class":1097},"2σ belief during occlusion",[362,5267,1094],{"class":1093},[362,5269,1050],{"class":901},[362,5271,5272,5274,5276,5278,5280,5282,5285,5287],{"class":852,"line":1729},[362,5273,2778],{"class":860},[362,5275,902],{"class":901},[362,5277,4295],{"class":1066},[362,5279,1070],{"class":901},[362,5281,1094],{"class":1093},[362,5283,5284],{"class":1097},"Coasting through a 6-frame occlusion (orange = no detection)",[362,5286,1094],{"class":1093},[362,5288,1050],{"class":901},[362,5290,5291,5293,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321],{"class":852,"line":1769},[362,5292,2778],{"class":860},[362,5294,902],{"class":901},[362,5296,4315],{"class":1066},[362,5298,1070],{"class":901},[362,5300,1094],{"class":1093},[362,5302,386],{"class":1097},[362,5304,1094],{"class":1093},[362,5306,2129],{"class":901},[362,5308,4328],{"class":860},[362,5310,902],{"class":901},[362,5312,4333],{"class":1066},[362,5314,1070],{"class":901},[362,5316,1094],{"class":1093},[362,5318,4340],{"class":1097},[362,5320,1094],{"class":1093},[362,5322,1050],{"class":901},[362,5324,5325,5327,5329,5331,5333,5335,5337,5339,5341,5343,5345,5347,5349,5351,5353,5355,5357,5359,5361,5363,5365,5367],{"class":852,"line":1802},[362,5326,2778],{"class":860},[362,5328,902],{"class":901},[362,5330,4353],{"class":1066},[362,5332,1070],{"class":901},[362,5334,4358],{"class":1225},[362,5336,395],{"class":1106},[362,5338,1094],{"class":1093},[362,5340,4365],{"class":1097},[362,5342,1094],{"class":1093},[362,5344,933],{"class":901},[362,5346,4372],{"class":1225},[362,5348,395],{"class":1106},[362,5350,4377],{"class":1073},[362,5352,2129],{"class":901},[362,5354,4328],{"class":860},[362,5356,902],{"class":901},[362,5358,4386],{"class":1066},[362,5360,1070],{"class":901},[362,5362,4391],{"class":1225},[362,5364,395],{"class":1106},[362,5366,4396],{"class":1073},[362,5368,1050],{"class":901},[362,5370,5371,5373,5375,5377,5379,5381,5383,5385],{"class":852,"line":1808},[362,5372,1082],{"class":860},[362,5374,902],{"class":901},[362,5376,4407],{"class":1066},[362,5378,4410],{"class":901},[362,5380,4413],{"class":860},[362,5382,902],{"class":901},[362,5384,4418],{"class":1066},[362,5386,1962],{"class":901},[338,5388,5389],{},[4424,5390],{"alt":847,"src":5391},"\u002F_nb\u002F5a1df415e5705749.png",[810,5393,5395],{"id":5394},"_2-2-d-boxes","2 — 2-D boxes",[338,5397,5398,5400,5401,5403,5404,5407,5408,5411,5412,5415,5416,902],{},[702,5399,724],{}," (the SORT model) tracks a box as ",[702,5402,735],{}," —\ncentre, aspect ratio ",[702,5405,5406],{},"a = w\u002Fh",", and height ",[702,5409,5410],{},"h"," — with velocities on\ncentre and aspect. That means the filter predicts not just where the\nbox goes but how it ",[342,5413,5414],{},"reshapes",". Here a box translates right and grows\ntaller; the detector reports noisy ",[702,5417,735],{},[338,5419,5420,5421,5424,5425,5428,5429,5431],{},"We draw the true box (grey) and the predicted box (blue) at sampled\nframes. The ",[347,5422,5423],{},"green ellipse"," is the predictive distribution of the\nbox ",[342,5426,5427],{},"centre","; the faint blue boxes are samples drawn from the full\npredictive ",[702,5430,735],{}," distribution — a \"cloud of plausible\nboxes\" the filter is offering for the next frame.",[842,5433,5435],{"className":844,"code":5434,"language":846,"meta":847,"style":847},"T = 14\nt = torch.arange(T).float()\ncx, cy = 25.0 + 7.0 * t, 60.0 + torch.zeros(T)\nh = 28.0 + 1.6 * t                       # growing height\na = torch.full((T,), 0.55)               # aspect ratio w\u002Fh\ntrue_box = torch.stack([cx, cy, a, h], dim=1)        # [x, y, a, h]\ng = torch.Generator().manual_seed(7)\nnoise = torch.tensor([2.0, 2.0, 0.03, 2.0])\nmeas_box = true_box + noise * torch.randn(T, 4, generator=g)\n\nproc = KalmanBBox(\"bbox\", q=0.2, r=4.0, model=\"sort\")   # 7-D SORT state\ninit_mean = torch.zeros(7)\ninit_mean[:4] = meas_box[0]\ninit_mean[4] = 7.0                                      # vx prior\nrec_box = run_kalman(proc, init_mean, torch.eye(7) * 10.0,\n                     list(meas_box), [True] * T)\n\ndef draw_box(ax, xyah, **kw):\n    x, y, asp, hh = [float(v) for v in xyah[:4]]\n    w = asp * hh\n    ax.add_patch(Rectangle((x - w \u002F 2, y - hh \u002F 2), w, hh, fill=False, **kw))\n\n",[702,5436,5437,5446,5468,5511,5534,5563,5608,5630,5662,5703,5707,5760,5778,5800,5817,5854,5878,5882,5906,5955,5970],{"__ignoreMap":847},[362,5438,5439,5441,5443],{"class":852,"line":853},[362,5440,3420],{"class":860},[362,5442,395],{"class":1106},[362,5444,5445],{"class":1073}," 14\n",[362,5447,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466],{"class":852,"line":864},[362,5449,3430],{"class":860},[362,5451,395],{"class":1106},[362,5453,2380],{"class":860},[362,5455,902],{"class":901},[362,5457,3439],{"class":1066},[362,5459,1070],{"class":901},[362,5461,3444],{"class":1066},[362,5463,1489],{"class":901},[362,5465,1492],{"class":1066},[362,5467,1962],{"class":901},[362,5469,5470,5473,5475,5478,5480,5483,5485,5488,5490,5492,5494,5497,5499,5501,5503,5505,5507,5509],{"class":852,"line":871},[362,5471,5472],{"class":860},"cx",[362,5474,933],{"class":901},[362,5476,5477],{"class":860}," cy ",[362,5479,395],{"class":1106},[362,5481,5482],{"class":1073}," 25.0",[362,5484,2377],{"class":1106},[362,5486,5487],{"class":1073}," 7.0",[362,5489,1764],{"class":1106},[362,5491,3473],{"class":860},[362,5493,933],{"class":901},[362,5495,5496],{"class":1073}," 60.0",[362,5498,2377],{"class":1106},[362,5500,2380],{"class":860},[362,5502,902],{"class":901},[362,5504,1350],{"class":1066},[362,5506,1070],{"class":901},[362,5508,3444],{"class":1066},[362,5510,1050],{"class":901},[362,5512,5513,5516,5518,5521,5523,5526,5528,5531],{"class":852,"line":885},[362,5514,5515],{"class":860},"h ",[362,5517,395],{"class":1106},[362,5519,5520],{"class":1073}," 28.0",[362,5522,2377],{"class":1106},[362,5524,5525],{"class":1073}," 1.6",[362,5527,1764],{"class":1106},[362,5529,5530],{"class":860}," t                       ",[362,5532,5533],{"class":2132},"# growing height\n",[362,5535,5536,5539,5541,5543,5545,5548,5550,5552,5555,5558,5560],{"class":852,"line":893},[362,5537,5538],{"class":860},"a ",[362,5540,395],{"class":1106},[362,5542,2380],{"class":860},[362,5544,902],{"class":901},[362,5546,5547],{"class":1066},"full",[362,5549,3080],{"class":901},[362,5551,3444],{"class":1066},[362,5553,5554],{"class":901},",),",[362,5556,5557],{"class":1073}," 0.55",[362,5559,2129],{"class":901},[362,5561,5562],{"class":2132},"               # aspect ratio w\u002Fh\n",[362,5564,5565,5568,5570,5572,5574,5576,5578,5580,5582,5585,5587,5590,5592,5595,5597,5599,5601,5603,5605],{"class":852,"line":915},[362,5566,5567],{"class":860},"true_box ",[362,5569,395],{"class":1106},[362,5571,2380],{"class":860},[362,5573,902],{"class":901},[362,5575,3464],{"class":1066},[362,5577,1238],{"class":901},[362,5579,5472],{"class":1066},[362,5581,933],{"class":901},[362,5583,5584],{"class":1066}," cy",[362,5586,933],{"class":901},[362,5588,5589],{"class":1066}," a",[362,5591,933],{"class":901},[362,5593,5594],{"class":1066}," h",[362,5596,1244],{"class":901},[362,5598,3506],{"class":1225},[362,5600,395],{"class":1106},[362,5602,1241],{"class":1073},[362,5604,2129],{"class":901},[362,5606,5607],{"class":2132},"        # [x, y, a, h]\n",[362,5609,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628],{"class":852,"line":939},[362,5611,3517],{"class":860},[362,5613,395],{"class":1106},[362,5615,2380],{"class":860},[362,5617,902],{"class":901},[362,5619,3526],{"class":1066},[362,5621,2834],{"class":901},[362,5623,1067],{"class":1066},[362,5625,1070],{"class":901},[362,5627,1113],{"class":1073},[362,5629,1050],{"class":901},[362,5631,5632,5635,5637,5639,5641,5643,5645,5647,5649,5651,5653,5656,5658,5660],{"class":852,"line":944},[362,5633,5634],{"class":860},"noise ",[362,5636,395],{"class":1106},[362,5638,2380],{"class":860},[362,5640,902],{"class":901},[362,5642,1235],{"class":1066},[362,5644,1238],{"class":901},[362,5646,2798],{"class":1073},[362,5648,933],{"class":901},[362,5650,3688],{"class":1073},[362,5652,933],{"class":901},[362,5654,5655],{"class":1073}," 0.03",[362,5657,933],{"class":901},[362,5659,3688],{"class":1073},[362,5661,2605],{"class":901},[362,5663,5664,5667,5669,5672,5674,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701],{"class":852,"line":977},[362,5665,5666],{"class":860},"meas_box ",[362,5668,395],{"class":1106},[362,5670,5671],{"class":860}," true_box ",[362,5673,525],{"class":1106},[362,5675,5676],{"class":860}," noise ",[362,5678,3047],{"class":1106},[362,5680,2380],{"class":860},[362,5682,902],{"class":901},[362,5684,3571],{"class":1066},[362,5686,1070],{"class":901},[362,5688,3444],{"class":1066},[362,5690,933],{"class":901},[362,5692,1118],{"class":1073},[362,5694,933],{"class":901},[362,5696,3584],{"class":1225},[362,5698,395],{"class":1106},[362,5700,3589],{"class":1066},[362,5702,1050],{"class":901},[362,5704,5705],{"class":852,"line":994},[362,5706,868],{"emptyLinePlaceholder":867},[362,5708,5709,5711,5713,5716,5718,5720,5722,5724,5726,5728,5730,5733,5735,5737,5739,5741,5743,5746,5748,5750,5753,5755,5757],{"class":852,"line":1015},[362,5710,3600],{"class":860},[362,5712,395],{"class":1106},[362,5714,5715],{"class":1066}," KalmanBBox",[362,5717,1070],{"class":901},[362,5719,1094],{"class":1093},[362,5721,291],{"class":1097},[362,5723,1094],{"class":1093},[362,5725,933],{"class":901},[362,5727,3617],{"class":1225},[362,5729,395],{"class":1106},[362,5731,5732],{"class":1073},"0.2",[362,5734,933],{"class":901},[362,5736,3165],{"class":1225},[362,5738,395],{"class":1106},[362,5740,3722],{"class":1073},[362,5742,933],{"class":901},[362,5744,5745],{"class":1225}," model",[362,5747,395],{"class":1106},[362,5749,1094],{"class":1093},[362,5751,5752],{"class":1097},"sort",[362,5754,1094],{"class":1093},[362,5756,2129],{"class":901},[362,5758,5759],{"class":2132},"   # 7-D SORT state\n",[362,5761,5762,5764,5766,5768,5770,5772,5774,5776],{"class":852,"line":1034},[362,5763,3642],{"class":860},[362,5765,395],{"class":1106},[362,5767,2380],{"class":860},[362,5769,902],{"class":901},[362,5771,1350],{"class":1066},[362,5773,1070],{"class":901},[362,5775,1113],{"class":1073},[362,5777,1050],{"class":901},[362,5779,5780,5783,5785,5787,5789,5791,5794,5796,5798],{"class":852,"line":1047},[362,5781,5782],{"class":860},"init_mean",[362,5784,2362],{"class":901},[362,5786,4103],{"class":1073},[362,5788,1103],{"class":901},[362,5790,1107],{"class":1106},[362,5792,5793],{"class":860}," meas_box",[362,5795,1090],{"class":901},[362,5797,1074],{"class":1073},[362,5799,2332],{"class":901},[362,5801,5802,5804,5806,5808,5810,5812,5814],{"class":852,"line":1053},[362,5803,5782],{"class":860},[362,5805,1090],{"class":901},[362,5807,4103],{"class":1073},[362,5809,1103],{"class":901},[362,5811,1107],{"class":1106},[362,5813,5487],{"class":1073},[362,5815,5816],{"class":2132},"                                      # vx prior\n",[362,5818,5819,5822,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852],{"class":852,"line":1058},[362,5820,5821],{"class":860},"rec_box ",[362,5823,395],{"class":1106},[362,5825,1734],{"class":1066},[362,5827,1070],{"class":901},[362,5829,1739],{"class":1066},[362,5831,933],{"class":901},[362,5833,1744],{"class":1066},[362,5835,933],{"class":901},[362,5837,2380],{"class":1066},[362,5839,902],{"class":901},[362,5841,2385],{"class":1066},[362,5843,1070],{"class":901},[362,5845,1113],{"class":1073},[362,5847,2129],{"class":901},[362,5849,1764],{"class":1106},[362,5851,4557],{"class":1073},[362,5853,1031],{"class":901},[362,5855,5856,5859,5861,5864,5866,5868,5870,5872,5874,5876],{"class":852,"line":1079},[362,5857,5858],{"class":1277},"                     list",[362,5860,1070],{"class":901},[362,5862,5863],{"class":1066},"meas_box",[362,5865,3771],{"class":901},[362,5867,3774],{"class":901},[362,5869,2929],{"class":1787},[362,5871,1103],{"class":901},[362,5873,1764],{"class":1106},[362,5875,3783],{"class":1066},[362,5877,1050],{"class":901},[362,5879,5880],{"class":852,"line":1567},[362,5881,868],{"emptyLinePlaceholder":867},[362,5883,5884,5886,5889,5891,5893,5895,5898,5900,5902,5904],{"class":852,"line":1577},[362,5885,1173],{"class":1172},[362,5887,5888],{"class":1176}," draw_box",[362,5890,1070],{"class":901},[362,5892,2778],{"class":1182},[362,5894,933],{"class":901},[362,5896,5897],{"class":1182}," xyah",[362,5899,933],{"class":901},[362,5901,2803],{"class":1106},[362,5903,2806],{"class":1182},[362,5905,1196],{"class":901},[362,5907,5908,5911,5913,5916,5918,5921,5923,5926,5928,5930,5932,5934,5937,5939,5941,5944,5946,5948,5950,5952],{"class":852,"line":1586},[362,5909,5910],{"class":860},"    x",[362,5912,933],{"class":901},[362,5914,5915],{"class":860}," y",[362,5917,933],{"class":901},[362,5919,5920],{"class":860}," asp",[362,5922,933],{"class":901},[362,5924,5925],{"class":860}," hh ",[362,5927,395],{"class":1106},[362,5929,3774],{"class":901},[362,5931,1492],{"class":1277},[362,5933,1070],{"class":901},[362,5935,5936],{"class":1066},"v",[362,5938,2129],{"class":901},[362,5940,3820],{"class":856},[362,5942,5943],{"class":860}," v ",[362,5945,2014],{"class":856},[362,5947,5897],{"class":860},[362,5949,2362],{"class":901},[362,5951,4103],{"class":1073},[362,5953,5954],{"class":901},"]]\n",[362,5956,5957,5960,5962,5965,5967],{"class":852,"line":1625},[362,5958,5959],{"class":860},"    w ",[362,5961,395],{"class":1106},[362,5963,5964],{"class":860}," asp ",[362,5966,3047],{"class":1106},[362,5968,5969],{"class":860}," hh\n",[362,5971,5972,5974,5976,5978,5980,5983,5985,5988,5990,5993,5995,5997,5999,6002,6004,6006,6008,6010,6012,6015,6017,6020,6022,6024,6026,6028,6030,6032,6034],{"class":852,"line":1657},[362,5973,3067],{"class":860},[362,5975,902],{"class":901},[362,5977,3072],{"class":1066},[362,5979,1070],{"class":901},[362,5981,5982],{"class":1066},"Rectangle",[362,5984,3080],{"class":901},[362,5986,5987],{"class":1066},"x ",[362,5989,2416],{"class":1106},[362,5991,5992],{"class":1066}," w ",[362,5994,124],{"class":1106},[362,5996,3501],{"class":1073},[362,5998,933],{"class":901},[362,6000,6001],{"class":1066}," y ",[362,6003,2416],{"class":1106},[362,6005,5925],{"class":1066},[362,6007,124],{"class":1106},[362,6009,3501],{"class":1073},[362,6011,3771],{"class":901},[362,6013,6014],{"class":1066}," w",[362,6016,933],{"class":901},[362,6018,6019],{"class":1066}," hh",[362,6021,933],{"class":901},[362,6023,3131],{"class":1225},[362,6025,395],{"class":1106},[362,6027,3136],{"class":1787},[362,6029,933],{"class":901},[362,6031,2803],{"class":1106},[362,6033,2806],{"class":1066},[362,6035,3145],{"class":901},[842,6037,6039],{"className":844,"code":6038,"language":846,"meta":847,"style":847},"fig, ax = plt.subplots(figsize=(9, 5))\nfor k in range(0, T, 2):\n    draw_box(ax, true_box[k], edgecolor=\"0.6\", lw=2)\n    draw_box(ax, rec_box[k][\"post_mean\"], edgecolor=\"tab:blue\", lw=1.5,\n             linestyle=\"--\")\n    # samples from the predictive [x, y, a, h] distribution\n    mu4 = rec_box[k][\"prior_mean\"][:4]\n    S4 = rec_box[k][\"prior_cov\"][:4, :4] + torch.eye(4) * proc.r\n    S4 = S4 + torch.eye(4) * 1e-6\n    dist = torch.distributions.MultivariateNormal(mu4.double(), S4.double())\n    for _ in range(12):\n        draw_box(ax, dist.sample().float(), edgecolor=\"tab:blue\",\n                 lw=0.5, alpha=0.18)\n    mu, S = predictive_xy(rec_box[k], proc.r)\n    cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=1.2)\nax.plot([], [], color=\"0.6\", lw=2, label=\"true box\")\nax.plot([], [], color=\"tab:blue\", lw=1.5, ls=\"--\", label=\"predicted box\")\nax.plot([], [], color=\"tab:blue\", lw=0.5, label=\"samples from box distribution\")\nax.plot([], [], color=\"tab:green\", lw=1.2, label=\"2σ centre distribution\")\nax.set_xlim(0, 150); ax.set_ylim(110, 10)            # image convention\nax.set_aspect(\"equal\")\nax.set_title(\"2-D box: predicted shape + a distribution over plausible boxes\")\nax.set_xlabel(\"x\"); ax.set_ylabel(\"y\"); ax.legend(fontsize=8)\nplt.tight_layout(); plt.show()\n\n",[702,6040,6041,6073,6097,6138,6187,6203,6208,6235,6290,6318,6358,6376,6413,6435,6466,6513,6558,6616,6661,6706,6748,6768,6787,6838],{"__ignoreMap":847},[362,6042,6043,6045,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065,6067,6069,6071],{"class":852,"line":853},[362,6044,3839],{"class":860},[362,6046,933],{"class":901},[362,6048,3844],{"class":860},[362,6050,395],{"class":1106},[362,6052,3335],{"class":860},[362,6054,902],{"class":901},[362,6056,3853],{"class":1066},[362,6058,1070],{"class":901},[362,6060,3858],{"class":1225},[362,6062,395],{"class":1106},[362,6064,1070],{"class":901},[362,6066,3865],{"class":1073},[362,6068,933],{"class":901},[362,6070,3870],{"class":1073},[362,6072,3145],{"class":901},[362,6074,6075,6077,6079,6081,6083,6085,6087,6089,6091,6093,6095],{"class":852,"line":864},[362,6076,4133],{"class":856},[362,6078,3360],{"class":860},[362,6080,2014],{"class":856},[362,6082,4140],{"class":2017},[362,6084,1070],{"class":901},[362,6086,1074],{"class":1073},[362,6088,933],{"class":901},[362,6090,3783],{"class":1066},[362,6092,933],{"class":901},[362,6094,3501],{"class":1073},[362,6096,1196],{"class":901},[362,6098,6099,6102,6104,6106,6108,6111,6113,6115,6117,6119,6121,6123,6126,6128,6130,6132,6134,6136],{"class":852,"line":871},[362,6100,6101],{"class":1066},"    draw_box",[362,6103,1070],{"class":901},[362,6105,2778],{"class":1066},[362,6107,933],{"class":901},[362,6109,6110],{"class":1066}," true_box",[362,6112,1090],{"class":901},[362,6114,2046],{"class":1066},[362,6116,1244],{"class":901},[362,6118,4217],{"class":1225},[362,6120,395],{"class":1106},[362,6122,1094],{"class":1093},[362,6124,6125],{"class":1097},"0.6",[362,6127,1094],{"class":1093},[362,6129,933],{"class":901},[362,6131,3926],{"class":1225},[362,6133,395],{"class":1106},[362,6135,3039],{"class":1073},[362,6137,1050],{"class":901},[362,6139,6140,6142,6144,6146,6148,6151,6153,6155,6158,6160,6162,6164,6166,6168,6170,6172,6174,6176,6178,6180,6182,6185],{"class":852,"line":885},[362,6141,6101],{"class":1066},[362,6143,1070],{"class":901},[362,6145,2778],{"class":1066},[362,6147,933],{"class":901},[362,6149,6150],{"class":1066}," rec_box",[362,6152,1090],{"class":901},[362,6154,2046],{"class":1066},[362,6156,6157],{"class":901},"][",[362,6159,1094],{"class":1093},[362,6161,2652],{"class":1097},[362,6163,1094],{"class":1093},[362,6165,1244],{"class":901},[362,6167,4217],{"class":1225},[362,6169,395],{"class":1106},[362,6171,1094],{"class":1093},[362,6173,4091],{"class":1097},[362,6175,1094],{"class":1093},[362,6177,933],{"class":901},[362,6179,3926],{"class":1225},[362,6181,395],{"class":1106},[362,6183,6184],{"class":1073},"1.5",[362,6186,1031],{"class":901},[362,6188,6189,6192,6194,6196,6199,6201],{"class":852,"line":893},[362,6190,6191],{"class":1225},"             linestyle",[362,6193,395],{"class":1106},[362,6195,1094],{"class":1093},[362,6197,6198],{"class":1097},"--",[362,6200,1094],{"class":1093},[362,6202,1050],{"class":901},[362,6204,6205],{"class":852,"line":915},[362,6206,6207],{"class":2132},"    # samples from the predictive [x, y, a, h] distribution\n",[362,6209,6210,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233],{"class":852,"line":939},[362,6211,6212],{"class":860},"    mu4 ",[362,6214,395],{"class":1106},[362,6216,6150],{"class":860},[362,6218,1090],{"class":901},[362,6220,2046],{"class":860},[362,6222,6157],{"class":901},[362,6224,1094],{"class":1093},[362,6226,2221],{"class":1097},[362,6228,1094],{"class":1093},[362,6230,3228],{"class":901},[362,6232,4103],{"class":1073},[362,6234,2332],{"class":901},[362,6236,6237,6240,6242,6244,6246,6248,6250,6252,6254,6256,6258,6260,6262,6264,6266,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288],{"class":852,"line":944},[362,6238,6239],{"class":860},"    S4 ",[362,6241,395],{"class":1106},[362,6243,6150],{"class":860},[362,6245,1090],{"class":901},[362,6247,2046],{"class":860},[362,6249,6157],{"class":901},[362,6251,1094],{"class":1093},[362,6253,2236],{"class":1097},[362,6255,1094],{"class":1093},[362,6257,3228],{"class":901},[362,6259,4103],{"class":1073},[362,6261,933],{"class":901},[362,6263,2370],{"class":901},[362,6265,4103],{"class":1073},[362,6267,1103],{"class":901},[362,6269,2377],{"class":1106},[362,6271,2380],{"class":860},[362,6273,902],{"class":901},[362,6275,2385],{"class":1066},[362,6277,1070],{"class":901},[362,6279,4103],{"class":1073},[362,6281,2129],{"class":901},[362,6283,1764],{"class":1106},[362,6285,1939],{"class":860},[362,6287,902],{"class":901},[362,6289,2400],{"class":905},[362,6291,6292,6294,6296,6299,6301,6303,6305,6307,6309,6311,6313,6315],{"class":852,"line":977},[362,6293,6239],{"class":860},[362,6295,395],{"class":1106},[362,6297,6298],{"class":860}," S4 ",[362,6300,525],{"class":1106},[362,6302,2380],{"class":860},[362,6304,902],{"class":901},[362,6306,2385],{"class":1066},[362,6308,1070],{"class":901},[362,6310,4103],{"class":1073},[362,6312,2129],{"class":901},[362,6314,1764],{"class":1106},[362,6316,6317],{"class":1073}," 1e-6\n",[362,6319,6320,6323,6325,6327,6329,6332,6334,6337,6339,6342,6344,6346,6348,6351,6353,6355],{"class":852,"line":994},[362,6321,6322],{"class":860},"    dist ",[362,6324,395],{"class":1106},[362,6326,2380],{"class":860},[362,6328,902],{"class":901},[362,6330,6331],{"class":905},"distributions",[362,6333,902],{"class":901},[362,6335,6336],{"class":1066},"MultivariateNormal",[362,6338,1070],{"class":901},[362,6340,6341],{"class":1066},"mu4",[362,6343,902],{"class":901},[362,6345,2428],{"class":1066},[362,6347,2632],{"class":901},[362,6349,6350],{"class":1066}," S4",[362,6352,902],{"class":901},[362,6354,2428],{"class":1066},[362,6356,6357],{"class":901},"())\n",[362,6359,6360,6362,6365,6367,6369,6371,6374],{"class":852,"line":1015},[362,6361,2003],{"class":856},[362,6363,6364],{"class":860}," _ ",[362,6366,2014],{"class":856},[362,6368,4140],{"class":2017},[362,6370,1070],{"class":901},[362,6372,6373],{"class":1073},"12",[362,6375,1196],{"class":901},[362,6377,6378,6381,6383,6385,6387,6390,6392,6395,6397,6399,6401,6403,6405,6407,6409,6411],{"class":852,"line":1034},[362,6379,6380],{"class":1066},"        draw_box",[362,6382,1070],{"class":901},[362,6384,2778],{"class":1066},[362,6386,933],{"class":901},[362,6388,6389],{"class":1066}," dist",[362,6391,902],{"class":901},[362,6393,6394],{"class":1066},"sample",[362,6396,2834],{"class":901},[362,6398,1492],{"class":1066},[362,6400,2632],{"class":901},[362,6402,4217],{"class":1225},[362,6404,395],{"class":1106},[362,6406,1094],{"class":1093},[362,6408,4091],{"class":1097},[362,6410,1094],{"class":1093},[362,6412,1031],{"class":901},[362,6414,6415,6418,6420,6423,6425,6428,6430,6433],{"class":852,"line":1047},[362,6416,6417],{"class":1225},"                 lw",[362,6419,395],{"class":1106},[362,6421,6422],{"class":1073},"0.5",[362,6424,933],{"class":901},[362,6426,6427],{"class":1225}," alpha",[362,6429,395],{"class":1106},[362,6431,6432],{"class":1073},"0.18",[362,6434,1050],{"class":901},[362,6436,6437,6439,6441,6443,6445,6447,6449,6452,6454,6456,6458,6460,6462,6464],{"class":852,"line":1053},[362,6438,4159],{"class":860},[362,6440,933],{"class":901},[362,6442,4164],{"class":860},[362,6444,395],{"class":1106},[362,6446,3156],{"class":1066},[362,6448,1070],{"class":901},[362,6450,6451],{"class":1066},"rec_box",[362,6453,1090],{"class":901},[362,6455,2046],{"class":1066},[362,6457,1244],{"class":901},[362,6459,1939],{"class":1066},[362,6461,902],{"class":901},[362,6463,3803],{"class":905},[362,6465,1050],{"class":901},[362,6467,6468,6470,6472,6474,6476,6478,6480,6482,6484,6486,6488,6490,6492,6494,6496,6498,6500,6502,6504,6506,6508,6511],{"class":852,"line":1058},[362,6469,4191],{"class":1066},[362,6471,1070],{"class":901},[362,6473,2778],{"class":1066},[362,6475,933],{"class":901},[362,6477,3288],{"class":1066},[362,6479,933],{"class":901},[362,6481,4204],{"class":1066},[362,6483,933],{"class":901},[362,6485,2793],{"class":1225},[362,6487,395],{"class":1106},[362,6489,2798],{"class":1073},[362,6491,933],{"class":901},[362,6493,4217],{"class":1225},[362,6495,395],{"class":1106},[362,6497,1094],{"class":1093},[362,6499,4224],{"class":1097},[362,6501,1094],{"class":1093},[362,6503,933],{"class":901},[362,6505,3926],{"class":1225},[362,6507,395],{"class":1106},[362,6509,6510],{"class":1073},"1.2",[362,6512,1050],{"class":901},[362,6514,6515,6517,6519,6521,6523,6525,6527,6529,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,6554,6556],{"class":852,"line":1079},[362,6516,2778],{"class":860},[362,6518,902],{"class":901},[362,6520,3881],{"class":1066},[362,6522,4248],{"class":901},[362,6524,4251],{"class":901},[362,6526,3912],{"class":1225},[362,6528,395],{"class":1106},[362,6530,1094],{"class":1093},[362,6532,6125],{"class":1097},[362,6534,1094],{"class":1093},[362,6536,933],{"class":901},[362,6538,3926],{"class":1225},[362,6540,395],{"class":1106},[362,6542,3039],{"class":1073},[362,6544,933],{"class":901},[362,6546,4924],{"class":1225},[362,6548,395],{"class":1106},[362,6550,1094],{"class":1093},[362,6552,6553],{"class":1097},"true box",[362,6555,1094],{"class":1093},[362,6557,1050],{"class":901},[362,6559,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584,6586,6588,6590,6593,6595,6597,6599,6601,6603,6605,6607,6609,6612,6614],{"class":852,"line":1567},[362,6561,2778],{"class":860},[362,6563,902],{"class":901},[362,6565,3881],{"class":1066},[362,6567,4248],{"class":901},[362,6569,4251],{"class":901},[362,6571,3912],{"class":1225},[362,6573,395],{"class":1106},[362,6575,1094],{"class":1093},[362,6577,4091],{"class":1097},[362,6579,1094],{"class":1093},[362,6581,933],{"class":901},[362,6583,3926],{"class":1225},[362,6585,395],{"class":1106},[362,6587,6184],{"class":1073},[362,6589,933],{"class":901},[362,6591,6592],{"class":1225}," ls",[362,6594,395],{"class":1106},[362,6596,1094],{"class":1093},[362,6598,6198],{"class":1097},[362,6600,1094],{"class":1093},[362,6602,933],{"class":901},[362,6604,4924],{"class":1225},[362,6606,395],{"class":1106},[362,6608,1094],{"class":1093},[362,6610,6611],{"class":1097},"predicted box",[362,6613,1094],{"class":1093},[362,6615,1050],{"class":901},[362,6617,6618,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644,6646,6648,6650,6652,6654,6657,6659],{"class":852,"line":1577},[362,6619,2778],{"class":860},[362,6621,902],{"class":901},[362,6623,3881],{"class":1066},[362,6625,4248],{"class":901},[362,6627,4251],{"class":901},[362,6629,3912],{"class":1225},[362,6631,395],{"class":1106},[362,6633,1094],{"class":1093},[362,6635,4091],{"class":1097},[362,6637,1094],{"class":1093},[362,6639,933],{"class":901},[362,6641,3926],{"class":1225},[362,6643,395],{"class":1106},[362,6645,6422],{"class":1073},[362,6647,933],{"class":901},[362,6649,4924],{"class":1225},[362,6651,395],{"class":1106},[362,6653,1094],{"class":1093},[362,6655,6656],{"class":1097},"samples from box distribution",[362,6658,1094],{"class":1093},[362,6660,1050],{"class":901},[362,6662,6663,6665,6667,6669,6671,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6702,6704],{"class":852,"line":1586},[362,6664,2778],{"class":860},[362,6666,902],{"class":901},[362,6668,3881],{"class":1066},[362,6670,4248],{"class":901},[362,6672,4251],{"class":901},[362,6674,3912],{"class":1225},[362,6676,395],{"class":1106},[362,6678,1094],{"class":1093},[362,6680,4224],{"class":1097},[362,6682,1094],{"class":1093},[362,6684,933],{"class":901},[362,6686,3926],{"class":1225},[362,6688,395],{"class":1106},[362,6690,6510],{"class":1073},[362,6692,933],{"class":901},[362,6694,4924],{"class":1225},[362,6696,395],{"class":1106},[362,6698,1094],{"class":1093},[362,6700,6701],{"class":1097},"2σ centre distribution",[362,6703,1094],{"class":1093},[362,6705,1050],{"class":901},[362,6707,6708,6710,6712,6715,6717,6719,6721,6724,6726,6728,6730,6733,6735,6738,6740,6743,6745],{"class":852,"line":1625},[362,6709,2778],{"class":860},[362,6711,902],{"class":901},[362,6713,6714],{"class":1066},"set_xlim",[362,6716,1070],{"class":901},[362,6718,1074],{"class":1073},[362,6720,933],{"class":901},[362,6722,6723],{"class":1073}," 150",[362,6725,2129],{"class":901},[362,6727,4328],{"class":860},[362,6729,902],{"class":901},[362,6731,6732],{"class":1066},"set_ylim",[362,6734,1070],{"class":901},[362,6736,6737],{"class":1073},"110",[362,6739,933],{"class":901},[362,6741,6742],{"class":1073}," 10",[362,6744,2129],{"class":901},[362,6746,6747],{"class":2132},"            # image convention\n",[362,6749,6750,6752,6754,6757,6759,6761,6764,6766],{"class":852,"line":1657},[362,6751,2778],{"class":860},[362,6753,902],{"class":901},[362,6755,6756],{"class":1066},"set_aspect",[362,6758,1070],{"class":901},[362,6760,1094],{"class":1093},[362,6762,6763],{"class":1097},"equal",[362,6765,1094],{"class":1093},[362,6767,1050],{"class":901},[362,6769,6770,6772,6774,6776,6778,6780,6783,6785],{"class":852,"line":1689},[362,6771,2778],{"class":860},[362,6773,902],{"class":901},[362,6775,4295],{"class":1066},[362,6777,1070],{"class":901},[362,6779,1094],{"class":1093},[362,6781,6782],{"class":1097},"2-D box: predicted shape + a distribution over plausible boxes",[362,6784,1094],{"class":1093},[362,6786,1050],{"class":901},[362,6788,6789,6791,6793,6795,6797,6799,6801,6803,6805,6807,6809,6811,6813,6815,6817,6819,6821,6823,6825,6827,6829,6832,6834,6836],{"class":852,"line":1709},[362,6790,2778],{"class":860},[362,6792,902],{"class":901},[362,6794,4315],{"class":1066},[362,6796,1070],{"class":901},[362,6798,1094],{"class":1093},[362,6800,386],{"class":1097},[362,6802,1094],{"class":1093},[362,6804,2129],{"class":901},[362,6806,4328],{"class":860},[362,6808,902],{"class":901},[362,6810,4333],{"class":1066},[362,6812,1070],{"class":901},[362,6814,1094],{"class":1093},[362,6816,4340],{"class":1097},[362,6818,1094],{"class":1093},[362,6820,2129],{"class":901},[362,6822,4328],{"class":860},[362,6824,902],{"class":901},[362,6826,4353],{"class":1066},[362,6828,1070],{"class":901},[362,6830,6831],{"class":1225},"fontsize",[362,6833,395],{"class":1106},[362,6835,4377],{"class":1073},[362,6837,1050],{"class":901},[362,6839,6840,6842,6844,6846,6848,6850,6852,6854],{"class":852,"line":1719},[362,6841,1082],{"class":860},[362,6843,902],{"class":901},[362,6845,4407],{"class":1066},[362,6847,4410],{"class":901},[362,6849,4413],{"class":860},[362,6851,902],{"class":901},[362,6853,4418],{"class":1066},[362,6855,1962],{"class":901},[338,6857,6858],{},[4424,6859],{"alt":847,"src":6860},"\u002F_nb\u002F12b683a08a30e078.png",[842,6862,6864],{"className":844,"code":6863,"language":846,"meta":847,"style":847},"# The same run, as time series: the filter predicts size as well as place.\npost_box = torch.stack([r[\"post_mean\"] for r in rec_box])\nfig, axes = plt.subplots(1, 2, figsize=(11, 3.4))\nfor ax, j, name in [(axes[0], 0, \"centre x\"), (axes[1], 3, \"height h\")]:\n    ax.plot(t, true_box[:, j], \"-\", color=\"0.55\", lw=2, label=\"truth\")\n    ax.scatter(t, meas_box[:, j], marker=\"x\", color=\"tab:red\", s=30,\n               label=\"detection\")\n    ax.plot(t, post_box[:, j], \"o-\", color=\"tab:blue\", ms=3, label=\"estimate\")\n    ax.set_title(name); ax.set_xlabel(\"frame\"); ax.grid(alpha=0.3)\naxes[0].legend(fontsize=8)\nplt.tight_layout(); plt.show()\n\n",[702,6865,6866,6871,6908,6952,7021,7085,7140,7156,7220,7267,7289],{"__ignoreMap":847},[362,6867,6868],{"class":852,"line":853},[362,6869,6870],{"class":2132},"# The same run, as time series: the filter predicts size as well as place.\n",[362,6872,6873,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906],{"class":852,"line":864},[362,6874,6875],{"class":860},"post_box ",[362,6877,395],{"class":1106},[362,6879,2380],{"class":860},[362,6881,902],{"class":901},[362,6883,3464],{"class":1066},[362,6885,1238],{"class":901},[362,6887,3803],{"class":1066},[362,6889,1090],{"class":901},[362,6891,1094],{"class":1093},[362,6893,2652],{"class":1097},[362,6895,1094],{"class":1093},[362,6897,1103],{"class":901},[362,6899,3820],{"class":856},[362,6901,3823],{"class":1066},[362,6903,2014],{"class":856},[362,6905,6150],{"class":1066},[362,6907,2605],{"class":901},[362,6909,6910,6912,6914,6917,6919,6921,6923,6925,6927,6929,6931,6933,6935,6938,6940,6942,6945,6947,6950],{"class":852,"line":871},[362,6911,3839],{"class":860},[362,6913,933],{"class":901},[362,6915,6916],{"class":860}," axes ",[362,6918,395],{"class":1106},[362,6920,3335],{"class":860},[362,6922,902],{"class":901},[362,6924,3853],{"class":1066},[362,6926,1070],{"class":901},[362,6928,1241],{"class":1073},[362,6930,933],{"class":901},[362,6932,3501],{"class":1073},[362,6934,933],{"class":901},[362,6936,6937],{"class":1225}," figsize",[362,6939,395],{"class":1106},[362,6941,1070],{"class":901},[362,6943,6944],{"class":1073},"11",[362,6946,933],{"class":901},[362,6948,6949],{"class":1073}," 3.4",[362,6951,3145],{"class":901},[362,6953,6954,6956,6959,6961,6964,6966,6969,6971,6974,6977,6979,6981,6983,6985,6987,6989,6992,6994,6996,6998,7000,7002,7004,7006,7009,7011,7013,7016,7018],{"class":852,"line":885},[362,6955,4133],{"class":856},[362,6957,6958],{"class":860}," ax",[362,6960,933],{"class":901},[362,6962,6963],{"class":860}," j",[362,6965,933],{"class":901},[362,6967,6968],{"class":860}," name ",[362,6970,2014],{"class":856},[362,6972,6973],{"class":901}," [(",[362,6975,6976],{"class":860},"axes",[362,6978,1090],{"class":901},[362,6980,1074],{"class":1073},[362,6982,1244],{"class":901},[362,6984,1607],{"class":1073},[362,6986,933],{"class":901},[362,6988,2233],{"class":1093},[362,6990,6991],{"class":1097},"centre x",[362,6993,1094],{"class":1093},[362,6995,3771],{"class":901},[362,6997,1110],{"class":901},[362,6999,6976],{"class":860},[362,7001,1090],{"class":901},[362,7003,1241],{"class":1073},[362,7005,1244],{"class":901},[362,7007,7008],{"class":1073}," 3",[362,7010,933],{"class":901},[362,7012,2233],{"class":1093},[362,7014,7015],{"class":1097},"height h",[362,7017,1094],{"class":1093},[362,7019,7020],{"class":901},")]:\n",[362,7022,7023,7025,7027,7029,7031,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078,7081,7083],{"class":852,"line":893},[362,7024,3067],{"class":860},[362,7026,902],{"class":901},[362,7028,3881],{"class":1066},[362,7030,1070],{"class":901},[362,7032,7033],{"class":1066},"t",[362,7035,933],{"class":901},[362,7037,6110],{"class":1066},[362,7039,2956],{"class":901},[362,7041,6963],{"class":1066},[362,7043,1244],{"class":901},[362,7045,2233],{"class":1093},[362,7047,2416],{"class":1097},[362,7049,1094],{"class":1093},[362,7051,933],{"class":901},[362,7053,3912],{"class":1225},[362,7055,395],{"class":1106},[362,7057,1094],{"class":1093},[362,7059,3919],{"class":1097},[362,7061,1094],{"class":1093},[362,7063,933],{"class":901},[362,7065,3926],{"class":1225},[362,7067,395],{"class":1106},[362,7069,3039],{"class":1073},[362,7071,933],{"class":901},[362,7073,4924],{"class":1225},[362,7075,395],{"class":1106},[362,7077,1094],{"class":1093},[362,7079,7080],{"class":1097},"truth",[362,7082,1094],{"class":1093},[362,7084,1050],{"class":901},[362,7086,7087,7089,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135,7138],{"class":852,"line":915},[362,7088,3067],{"class":860},[362,7090,902],{"class":901},[362,7092,3966],{"class":1066},[362,7094,1070],{"class":901},[362,7096,7033],{"class":1066},[362,7098,933],{"class":901},[362,7100,5793],{"class":1066},[362,7102,2956],{"class":901},[362,7104,6963],{"class":1066},[362,7106,1244],{"class":901},[362,7108,3988],{"class":1225},[362,7110,395],{"class":1106},[362,7112,1094],{"class":1093},[362,7114,386],{"class":1097},[362,7116,1094],{"class":1093},[362,7118,933],{"class":901},[362,7120,3912],{"class":1225},[362,7122,395],{"class":1106},[362,7124,1094],{"class":1093},[362,7126,4007],{"class":1097},[362,7128,1094],{"class":1093},[362,7130,933],{"class":901},[362,7132,4014],{"class":1225},[362,7134,395],{"class":1106},[362,7136,7137],{"class":1073},"30",[362,7139,1031],{"class":901},[362,7141,7142,7145,7147,7149,7152,7154],{"class":852,"line":939},[362,7143,7144],{"class":1225},"               label",[362,7146,395],{"class":1106},[362,7148,1094],{"class":1093},[362,7150,7151],{"class":1097},"detection",[362,7153,1094],{"class":1093},[362,7155,1050],{"class":901},[362,7157,7158,7160,7162,7164,7166,7168,7170,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213,7216,7218],{"class":852,"line":944},[362,7159,3067],{"class":860},[362,7161,902],{"class":901},[362,7163,3881],{"class":1066},[362,7165,1070],{"class":901},[362,7167,7033],{"class":1066},[362,7169,933],{"class":901},[362,7171,7172],{"class":1066}," post_box",[362,7174,2956],{"class":901},[362,7176,6963],{"class":1066},[362,7178,1244],{"class":901},[362,7180,2233],{"class":1093},[362,7182,4078],{"class":1097},[362,7184,1094],{"class":1093},[362,7186,933],{"class":901},[362,7188,3912],{"class":1225},[362,7190,395],{"class":1106},[362,7192,1094],{"class":1093},[362,7194,4091],{"class":1097},[362,7196,1094],{"class":1093},[362,7198,933],{"class":901},[362,7200,4098],{"class":1225},[362,7202,395],{"class":1106},[362,7204,3535],{"class":1073},[362,7206,933],{"class":901},[362,7208,4924],{"class":1225},[362,7210,395],{"class":1106},[362,7212,1094],{"class":1093},[362,7214,7215],{"class":1097},"estimate",[362,7217,1094],{"class":1093},[362,7219,1050],{"class":901},[362,7221,7222,7224,7226,7228,7230,7233,7235,7237,7239,7241,7243,7245,7247,7249,7251,7253,7255,7257,7259,7261,7263,7265],{"class":852,"line":977},[362,7223,3067],{"class":860},[362,7225,902],{"class":901},[362,7227,4295],{"class":1066},[362,7229,1070],{"class":901},[362,7231,7232],{"class":1066},"name",[362,7234,2129],{"class":901},[362,7236,4328],{"class":860},[362,7238,902],{"class":901},[362,7240,4315],{"class":1066},[362,7242,1070],{"class":901},[362,7244,1094],{"class":1093},[362,7246,209],{"class":1097},[362,7248,1094],{"class":1093},[362,7250,2129],{"class":901},[362,7252,4328],{"class":860},[362,7254,902],{"class":901},[362,7256,4386],{"class":1066},[362,7258,1070],{"class":901},[362,7260,4391],{"class":1225},[362,7262,395],{"class":1106},[362,7264,4396],{"class":1073},[362,7266,1050],{"class":901},[362,7268,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287],{"class":852,"line":994},[362,7270,6976],{"class":860},[362,7272,1090],{"class":901},[362,7274,1074],{"class":1073},[362,7276,2161],{"class":901},[362,7278,4353],{"class":1066},[362,7280,1070],{"class":901},[362,7282,6831],{"class":1225},[362,7284,395],{"class":1106},[362,7286,4377],{"class":1073},[362,7288,1050],{"class":901},[362,7290,7291,7293,7295,7297,7299,7301,7303,7305],{"class":852,"line":1015},[362,7292,1082],{"class":860},[362,7294,902],{"class":901},[362,7296,4407],{"class":1066},[362,7298,4410],{"class":901},[362,7300,4413],{"class":860},[362,7302,902],{"class":901},[362,7304,4418],{"class":1066},[362,7306,1962],{"class":901},[338,7308,7309],{},[4424,7310],{"alt":847,"src":7311},"\u002F_nb\u002F1c31efe7636aefb1.png",[810,7313,7315],{"id":7314},"_3-2-d-masks","3 — 2-D masks",[338,7317,7318,7319,7322,7323,7325,7326,7328],{},"A segmentation mask is a bitmap, not a vector — a Kalman filter\ncannot smooth pixels directly. The standard move is to track a\nlow-dimensional ",[342,7320,7321],{},"summary"," of the mask (here its ",[347,7324,294],{},") with\n",[702,7327,704],{},", and carry the mask shape along for rendering. The\nprediction then says \"the blob's centre will be about here, with this\nuncertainty,\" and you translate the mask template to that centre.",[338,7330,7331],{},"Left: the mask at each frame, time-graded light→dark, with the true\ncentroid path. Right: at one frame, the predicted mask (translated to\nthe prior centroid) and the 2σ ellipse for where the centre will land.",[842,7333,7335],{"className":844,"code":7334,"language":846,"meta":847,"style":847},"Himg, Wimg = 90, 170\nys, xs = torch.meshgrid(torch.arange(Himg), torch.arange(Wimg), indexing=\"ij\")\n\ndef make_mask(cx, cy, rx=13.0, ry=8.0):\n    return (((xs - cx) \u002F rx) ** 2 + ((ys - cy) \u002F ry) ** 2) \u003C= 1.0\n\ndef mask_centroid(mask):\n    idx = mask.nonzero().float()                     # rows are [y, x]\n    return torch.stack([idx[:, 1].mean(), idx[:, 0].mean()])   # [x, y]\n\nT = 12\nt = torch.arange(T).float()\ntrue_c = torch.stack([18.0 + 11.0 * t, 30.0 + 3.5 * t], dim=1)\nmasks = [make_mask(float(cx), float(cy)) for cx, cy in true_c]\ng = torch.Generator().manual_seed(9)\nmeas_c = torch.stack([mask_centroid(m) for m in masks])             + 2.0 * torch.randn(T, 2, generator=g)\n\nproc = KalmanCentroid2D(\"centroid\", q=0.1, r=4.0)\ninit_mean = torch.tensor([float(meas_c[0, 0]), float(meas_c[0, 1]), 11.0, 3.5])\nrec_m = run_kalman(proc, init_mean, torch.eye(4) * 6.0,\n                   list(meas_c), [True] * T)\n\n",[702,7336,7337,7357,7417,7421,7458,7518,7522,7536,7560,7603,7607,7616,7638,7689,7736,7758,7825,7829,7864,7919,7957],{"__ignoreMap":847},[362,7338,7339,7342,7344,7347,7349,7352,7354],{"class":852,"line":853},[362,7340,7341],{"class":860},"Himg",[362,7343,933],{"class":901},[362,7345,7346],{"class":860}," Wimg ",[362,7348,395],{"class":1106},[362,7350,7351],{"class":1073}," 90",[362,7353,933],{"class":901},[362,7355,7356],{"class":1073}," 170\n",[362,7358,7359,7362,7364,7367,7369,7371,7373,7376,7378,7380,7382,7384,7386,7388,7390,7392,7394,7396,7398,7401,7403,7406,7408,7410,7413,7415],{"class":852,"line":864},[362,7360,7361],{"class":860},"ys",[362,7363,933],{"class":901},[362,7365,7366],{"class":860}," xs ",[362,7368,395],{"class":1106},[362,7370,2380],{"class":860},[362,7372,902],{"class":901},[362,7374,7375],{"class":1066},"meshgrid",[362,7377,1070],{"class":901},[362,7379,1061],{"class":1066},[362,7381,902],{"class":901},[362,7383,3439],{"class":1066},[362,7385,1070],{"class":901},[362,7387,7341],{"class":1066},[362,7389,3771],{"class":901},[362,7391,2380],{"class":1066},[362,7393,902],{"class":901},[362,7395,3439],{"class":1066},[362,7397,1070],{"class":901},[362,7399,7400],{"class":1066},"Wimg",[362,7402,3771],{"class":901},[362,7404,7405],{"class":1225}," indexing",[362,7407,395],{"class":1106},[362,7409,1094],{"class":1093},[362,7411,7412],{"class":1097},"ij",[362,7414,1094],{"class":1093},[362,7416,1050],{"class":901},[362,7418,7419],{"class":852,"line":871},[362,7420,868],{"emptyLinePlaceholder":867},[362,7422,7423,7425,7428,7430,7432,7434,7436,7438,7441,7443,7446,7448,7451,7453,7456],{"class":852,"line":885},[362,7424,1173],{"class":1172},[362,7426,7427],{"class":1176}," make_mask",[362,7429,1070],{"class":901},[362,7431,5472],{"class":1182},[362,7433,933],{"class":901},[362,7435,5584],{"class":1182},[362,7437,933],{"class":901},[362,7439,7440],{"class":1182}," rx",[362,7442,395],{"class":1106},[362,7444,7445],{"class":1073},"13.0",[362,7447,933],{"class":901},[362,7449,7450],{"class":1182}," ry",[362,7452,395],{"class":1106},[362,7454,7455],{"class":1073},"8.0",[362,7457,1196],{"class":901},[362,7459,7460,7462,7465,7468,7470,7473,7475,7478,7480,7482,7484,7486,7488,7491,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7515],{"class":852,"line":893},[362,7461,1214],{"class":856},[362,7463,7464],{"class":901}," (((",[362,7466,7467],{"class":860},"xs ",[362,7469,2416],{"class":1106},[362,7471,7472],{"class":860}," cx",[362,7474,2129],{"class":901},[362,7476,7477],{"class":1106}," \u002F",[362,7479,7440],{"class":860},[362,7481,2129],{"class":901},[362,7483,2803],{"class":1106},[362,7485,3501],{"class":1073},[362,7487,2377],{"class":1106},[362,7489,7490],{"class":901}," ((",[362,7492,7493],{"class":860},"ys ",[362,7495,2416],{"class":1106},[362,7497,5584],{"class":860},[362,7499,2129],{"class":901},[362,7501,7477],{"class":1106},[362,7503,7450],{"class":860},[362,7505,2129],{"class":901},[362,7507,2803],{"class":1106},[362,7509,3501],{"class":1073},[362,7511,2129],{"class":901},[362,7513,7514],{"class":1106}," \u003C=",[362,7516,7517],{"class":1073}," 1.0\n",[362,7519,7520],{"class":852,"line":915},[362,7521,868],{"emptyLinePlaceholder":867},[362,7523,7524,7526,7529,7531,7534],{"class":852,"line":939},[362,7525,1173],{"class":1172},[362,7527,7528],{"class":1176}," mask_centroid",[362,7530,1070],{"class":901},[362,7532,7533],{"class":1182},"mask",[362,7535,1196],{"class":901},[362,7537,7538,7541,7543,7546,7548,7551,7553,7555,7557],{"class":852,"line":944},[362,7539,7540],{"class":860},"    idx ",[362,7542,395],{"class":1106},[362,7544,7545],{"class":860}," mask",[362,7547,902],{"class":901},[362,7549,7550],{"class":1066},"nonzero",[362,7552,2834],{"class":901},[362,7554,1492],{"class":1066},[362,7556,4410],{"class":901},[362,7558,7559],{"class":2132},"                     # rows are [y, x]\n",[362,7561,7562,7564,7566,7568,7570,7572,7575,7577,7579,7581,7584,7586,7589,7591,7593,7595,7597,7600],{"class":852,"line":977},[362,7563,1214],{"class":856},[362,7565,2380],{"class":860},[362,7567,902],{"class":901},[362,7569,3464],{"class":1066},[362,7571,1238],{"class":901},[362,7573,7574],{"class":1066},"idx",[362,7576,2956],{"class":901},[362,7578,3379],{"class":1073},[362,7580,2161],{"class":901},[362,7582,7583],{"class":1066},"mean",[362,7585,2632],{"class":901},[362,7587,7588],{"class":1066}," idx",[362,7590,2956],{"class":901},[362,7592,1607],{"class":1073},[362,7594,2161],{"class":901},[362,7596,7583],{"class":1066},[362,7598,7599],{"class":901},"()])",[362,7601,7602],{"class":2132},"   # [x, y]\n",[362,7604,7605],{"class":852,"line":994},[362,7606,868],{"emptyLinePlaceholder":867},[362,7608,7609,7611,7613],{"class":852,"line":1015},[362,7610,3420],{"class":860},[362,7612,395],{"class":1106},[362,7614,7615],{"class":1073}," 12\n",[362,7617,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636],{"class":852,"line":1034},[362,7619,3430],{"class":860},[362,7621,395],{"class":1106},[362,7623,2380],{"class":860},[362,7625,902],{"class":901},[362,7627,3439],{"class":1066},[362,7629,1070],{"class":901},[362,7631,3444],{"class":1066},[362,7633,1489],{"class":901},[362,7635,1492],{"class":1066},[362,7637,1962],{"class":901},[362,7639,7640,7643,7645,7647,7649,7651,7653,7656,7658,7661,7663,7665,7667,7670,7672,7675,7677,7679,7681,7683,7685,7687],{"class":852,"line":1047},[362,7641,7642],{"class":860},"true_c ",[362,7644,395],{"class":1106},[362,7646,2380],{"class":860},[362,7648,902],{"class":901},[362,7650,3464],{"class":1066},[362,7652,1238],{"class":901},[362,7654,7655],{"class":1073},"18.0",[362,7657,2377],{"class":1106},[362,7659,7660],{"class":1073}," 11.0",[362,7662,1764],{"class":1106},[362,7664,3473],{"class":1066},[362,7666,933],{"class":901},[362,7668,7669],{"class":1073}," 30.0",[362,7671,2377],{"class":1106},[362,7673,7674],{"class":1073}," 3.5",[362,7676,1764],{"class":1106},[362,7678,3473],{"class":1066},[362,7680,1244],{"class":901},[362,7682,3506],{"class":1225},[362,7684,395],{"class":1106},[362,7686,1241],{"class":1073},[362,7688,1050],{"class":901},[362,7690,7691,7694,7696,7698,7701,7703,7705,7707,7709,7711,7713,7715,7718,7721,7723,7725,7727,7729,7731,7734],{"class":852,"line":1053},[362,7692,7693],{"class":860},"masks ",[362,7695,395],{"class":1106},[362,7697,3774],{"class":901},[362,7699,7700],{"class":1066},"make_mask",[362,7702,1070],{"class":901},[362,7704,1492],{"class":1277},[362,7706,1070],{"class":901},[362,7708,5472],{"class":1066},[362,7710,3771],{"class":901},[362,7712,2036],{"class":1277},[362,7714,1070],{"class":901},[362,7716,7717],{"class":1066},"cy",[362,7719,7720],{"class":901},"))",[362,7722,3820],{"class":856},[362,7724,7472],{"class":860},[362,7726,933],{"class":901},[362,7728,5477],{"class":860},[362,7730,2014],{"class":856},[362,7732,7733],{"class":860}," true_c",[362,7735,2332],{"class":901},[362,7737,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756],{"class":852,"line":1058},[362,7739,3517],{"class":860},[362,7741,395],{"class":1106},[362,7743,2380],{"class":860},[362,7745,902],{"class":901},[362,7747,3526],{"class":1066},[362,7749,2834],{"class":901},[362,7751,1067],{"class":1066},[362,7753,1070],{"class":901},[362,7755,3865],{"class":1073},[362,7757,1050],{"class":901},[362,7759,7760,7763,7765,7767,7769,7771,7773,7776,7778,7780,7782,7784,7787,7789,7792,7794,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823],{"class":852,"line":1079},[362,7761,7762],{"class":860},"meas_c ",[362,7764,395],{"class":1106},[362,7766,2380],{"class":860},[362,7768,902],{"class":901},[362,7770,3464],{"class":1066},[362,7772,1238],{"class":901},[362,7774,7775],{"class":1066},"mask_centroid",[362,7777,1070],{"class":901},[362,7779,2365],{"class":1066},[362,7781,2129],{"class":901},[362,7783,3820],{"class":856},[362,7785,7786],{"class":1066}," m ",[362,7788,2014],{"class":856},[362,7790,7791],{"class":1066}," masks",[362,7793,2049],{"class":901},[362,7795,7796],{"class":1106},"             +",[362,7798,3688],{"class":1073},[362,7800,1764],{"class":1106},[362,7802,2380],{"class":860},[362,7804,902],{"class":901},[362,7806,3571],{"class":1066},[362,7808,1070],{"class":901},[362,7810,3444],{"class":1066},[362,7812,933],{"class":901},[362,7814,3501],{"class":1073},[362,7816,933],{"class":901},[362,7818,3584],{"class":1225},[362,7820,395],{"class":1106},[362,7822,3589],{"class":1066},[362,7824,1050],{"class":901},[362,7826,7827],{"class":852,"line":1567},[362,7828,868],{"emptyLinePlaceholder":867},[362,7830,7831,7833,7835,7837,7839,7841,7843,7845,7847,7849,7851,7854,7856,7858,7860,7862],{"class":852,"line":1577},[362,7832,3600],{"class":860},[362,7834,395],{"class":1106},[362,7836,1023],{"class":1066},[362,7838,1070],{"class":901},[362,7840,1094],{"class":1093},[362,7842,294],{"class":1097},[362,7844,1094],{"class":1093},[362,7846,933],{"class":901},[362,7848,3617],{"class":1225},[362,7850,395],{"class":1106},[362,7852,7853],{"class":1073},"0.1",[362,7855,933],{"class":901},[362,7857,3165],{"class":1225},[362,7859,395],{"class":1106},[362,7861,3722],{"class":1073},[362,7863,1050],{"class":901},[362,7865,7866,7868,7870,7872,7874,7876,7878,7880,7882,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917],{"class":852,"line":1586},[362,7867,3642],{"class":860},[362,7869,395],{"class":1106},[362,7871,2380],{"class":860},[362,7873,902],{"class":901},[362,7875,1235],{"class":1066},[362,7877,1238],{"class":901},[362,7879,1492],{"class":1277},[362,7881,1070],{"class":901},[362,7883,7884],{"class":1066},"meas_c",[362,7886,1090],{"class":901},[362,7888,1074],{"class":1073},[362,7890,933],{"class":901},[362,7892,1607],{"class":1073},[362,7894,3005],{"class":901},[362,7896,2036],{"class":1277},[362,7898,1070],{"class":901},[362,7900,7884],{"class":1066},[362,7902,1090],{"class":901},[362,7904,1074],{"class":1073},[362,7906,933],{"class":901},[362,7908,3379],{"class":1073},[362,7910,3005],{"class":901},[362,7912,7660],{"class":1073},[362,7914,933],{"class":901},[362,7916,7674],{"class":1073},[362,7918,2605],{"class":901},[362,7920,7921,7924,7926,7928,7930,7932,7934,7936,7938,7940,7942,7944,7946,7948,7950,7952,7955],{"class":852,"line":1625},[362,7922,7923],{"class":860},"rec_m ",[362,7925,395],{"class":1106},[362,7927,1734],{"class":1066},[362,7929,1070],{"class":901},[362,7931,1739],{"class":1066},[362,7933,933],{"class":901},[362,7935,1744],{"class":1066},[362,7937,933],{"class":901},[362,7939,2380],{"class":1066},[362,7941,902],{"class":901},[362,7943,2385],{"class":1066},[362,7945,1070],{"class":901},[362,7947,4103],{"class":1073},[362,7949,2129],{"class":901},[362,7951,1764],{"class":1106},[362,7953,7954],{"class":1073}," 6.0",[362,7956,1031],{"class":901},[362,7958,7959,7962,7964,7966,7968,7970,7972,7974,7976,7978],{"class":852,"line":1657},[362,7960,7961],{"class":1277},"                   list",[362,7963,1070],{"class":901},[362,7965,7884],{"class":1066},[362,7967,3771],{"class":901},[362,7969,3774],{"class":901},[362,7971,2929],{"class":1787},[362,7973,1103],{"class":901},[362,7975,1764],{"class":1106},[362,7977,3783],{"class":1066},[362,7979,1050],{"class":901},[842,7981,7983],{"className":844,"code":7982,"language":846,"meta":847,"style":847},"fig, (axL, axR) = plt.subplots(1, 2, figsize=(12, 4))\n\n# (left) masks over time + centroid trajectory\ncomposite = torch.zeros(Himg, Wimg)\nfor k, m in enumerate(masks):\n    composite = torch.maximum(composite, m.float() * (0.3 + 0.7 * k \u002F (T - 1)))\naxL.imshow(composite.numpy(), cmap=\"Blues\", origin=\"upper\")\naxL.plot(true_c[:, 0], true_c[:, 1], \"-o\", color=\"tab:orange\", ms=3,\n         label=\"true centroid\")\naxL.scatter(meas_c[:, 0], meas_c[:, 1], marker=\"x\", color=\"tab:red\", s=30,\n            label=\"measured centroid\")\naxL.set_title(\"Mask blob over time (light → dark) + centroid track\")\naxL.legend(fontsize=8); axL.set_xlabel(\"x\"); axL.set_ylabel(\"y\")\n\n# (right) predicted mask + centre uncertainty at frame kf\nkf = 8\naxR.imshow(masks[kf - 1].numpy(), cmap=\"Greys\", origin=\"upper\", alpha=0.5)\npri = rec_m[kf][\"prior_mean\"][:2]\ntemplate = make_mask(float(pri[0]), float(pri[1]))   # mask at predicted centre\naxR.contour(template.numpy(), levels=[0.5], colors=\"tab:blue\", linewidths=2)\nmu, S = predictive_xy(rec_m[kf], proc.r)\ncov_ellipse(axR, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=2)\naxR.scatter([float(pri[0])], [float(pri[1])], color=\"tab:blue\", s=30, zorder=3)\naxR.plot([], [], color=\"tab:blue\", lw=2, label=\"predicted mask (frame %d)\" % kf)\naxR.plot([], [], color=\"tab:green\", lw=2, label=\"2σ centre distribution\")\naxR.plot([], [], color=\"0.4\", lw=2, alpha=0.5, label=\"previous mask\")\naxR.set_xlim(0, Wimg); axR.set_ylim(Himg, 0)\naxR.set_title(\"Predicting the mask's next position\")\naxR.legend(fontsize=8); axR.set_xlabel(\"x\"); axR.set_ylabel(\"y\")\nplt.tight_layout(); plt.show()\n\n",[702,7984,7985,8035,8039,8044,8068,8089,8146,8194,8250,8266,8325,8341,8360,8411,8415,8420,8430,8490,8519,8559,8612,8644,8691,8756,8812,8856,8910,8945,8964,9014],{"__ignoreMap":847},[362,7986,7987,7989,7991,7993,7996,7998,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027,8029,8031,8033],{"class":852,"line":853},[362,7988,3839],{"class":860},[362,7990,933],{"class":901},[362,7992,1110],{"class":901},[362,7994,7995],{"class":860},"axL",[362,7997,933],{"class":901},[362,7999,8000],{"class":860}," axR",[362,8002,2129],{"class":901},[362,8004,1107],{"class":1106},[362,8006,3335],{"class":860},[362,8008,902],{"class":901},[362,8010,3853],{"class":1066},[362,8012,1070],{"class":901},[362,8014,1241],{"class":1073},[362,8016,933],{"class":901},[362,8018,3501],{"class":1073},[362,8020,933],{"class":901},[362,8022,6937],{"class":1225},[362,8024,395],{"class":1106},[362,8026,1070],{"class":901},[362,8028,6373],{"class":1073},[362,8030,933],{"class":901},[362,8032,1118],{"class":1073},[362,8034,3145],{"class":901},[362,8036,8037],{"class":852,"line":864},[362,8038,868],{"emptyLinePlaceholder":867},[362,8040,8041],{"class":852,"line":871},[362,8042,8043],{"class":2132},"# (left) masks over time + centroid trajectory\n",[362,8045,8046,8049,8051,8053,8055,8057,8059,8061,8063,8066],{"class":852,"line":885},[362,8047,8048],{"class":860},"composite ",[362,8050,395],{"class":1106},[362,8052,2380],{"class":860},[362,8054,902],{"class":901},[362,8056,1350],{"class":1066},[362,8058,1070],{"class":901},[362,8060,7341],{"class":1066},[362,8062,933],{"class":901},[362,8064,8065],{"class":1066}," Wimg",[362,8067,1050],{"class":901},[362,8069,8070,8072,8074,8076,8078,8080,8082,8084,8087],{"class":852,"line":893},[362,8071,4133],{"class":856},[362,8073,2006],{"class":860},[362,8075,933],{"class":901},[362,8077,7786],{"class":860},[362,8079,2014],{"class":856},[362,8081,2018],{"class":2017},[362,8083,1070],{"class":901},[362,8085,8086],{"class":1066},"masks",[362,8088,1196],{"class":901},[362,8090,8091,8094,8096,8098,8100,8103,8105,8108,8110,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8137,8139,8141,8143],{"class":852,"line":915},[362,8092,8093],{"class":860},"    composite ",[362,8095,395],{"class":1106},[362,8097,2380],{"class":860},[362,8099,902],{"class":901},[362,8101,8102],{"class":1066},"maximum",[362,8104,1070],{"class":901},[362,8106,8107],{"class":1066},"composite",[362,8109,933],{"class":901},[362,8111,8112],{"class":1066}," m",[362,8114,902],{"class":901},[362,8116,1492],{"class":1066},[362,8118,4410],{"class":901},[362,8120,1764],{"class":1106},[362,8122,1110],{"class":901},[362,8124,4396],{"class":1073},[362,8126,2377],{"class":1106},[362,8128,3355],{"class":1073},[362,8130,1764],{"class":1106},[362,8132,3360],{"class":1066},[362,8134,124],{"class":1106},[362,8136,1110],{"class":901},[362,8138,3420],{"class":1066},[362,8140,2416],{"class":1106},[362,8142,3379],{"class":1073},[362,8144,8145],{"class":901},")))\n",[362,8147,8148,8150,8152,8155,8157,8159,8161,8164,8166,8169,8171,8173,8176,8178,8180,8183,8185,8187,8190,8192],{"class":852,"line":939},[362,8149,7995],{"class":860},[362,8151,902],{"class":901},[362,8153,8154],{"class":1066},"imshow",[362,8156,1070],{"class":901},[362,8158,8107],{"class":1066},[362,8160,902],{"class":901},[362,8162,8163],{"class":1066},"numpy",[362,8165,2632],{"class":901},[362,8167,8168],{"class":1225}," cmap",[362,8170,395],{"class":1106},[362,8172,1094],{"class":1093},[362,8174,8175],{"class":1097},"Blues",[362,8177,1094],{"class":1093},[362,8179,933],{"class":901},[362,8181,8182],{"class":1225}," origin",[362,8184,395],{"class":1106},[362,8186,1094],{"class":1093},[362,8188,8189],{"class":1097},"upper",[362,8191,1094],{"class":1093},[362,8193,1050],{"class":901},[362,8195,8196,8198,8200,8202,8204,8207,8209,8211,8213,8215,8217,8219,8221,8223,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248],{"class":852,"line":944},[362,8197,7995],{"class":860},[362,8199,902],{"class":901},[362,8201,3881],{"class":1066},[362,8203,1070],{"class":901},[362,8205,8206],{"class":1066},"true_c",[362,8208,2956],{"class":901},[362,8210,1607],{"class":1073},[362,8212,1244],{"class":901},[362,8214,7733],{"class":1066},[362,8216,2956],{"class":901},[362,8218,3379],{"class":1073},[362,8220,1244],{"class":901},[362,8222,2233],{"class":1093},[362,8224,8225],{"class":1097},"-o",[362,8227,1094],{"class":1093},[362,8229,933],{"class":901},[362,8231,3912],{"class":1225},[362,8233,395],{"class":1106},[362,8235,1094],{"class":1093},[362,8237,5211],{"class":1097},[362,8239,1094],{"class":1093},[362,8241,933],{"class":901},[362,8243,4098],{"class":1225},[362,8245,395],{"class":1106},[362,8247,3535],{"class":1073},[362,8249,1031],{"class":901},[362,8251,8252,8255,8257,8259,8262,8264],{"class":852,"line":977},[362,8253,8254],{"class":1225},"         label",[362,8256,395],{"class":1106},[362,8258,1094],{"class":1093},[362,8260,8261],{"class":1097},"true centroid",[362,8263,1094],{"class":1093},[362,8265,1050],{"class":901},[362,8267,8268,8270,8272,8274,8276,8278,8280,8282,8284,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305,8307,8309,8311,8313,8315,8317,8319,8321,8323],{"class":852,"line":994},[362,8269,7995],{"class":860},[362,8271,902],{"class":901},[362,8273,3966],{"class":1066},[362,8275,1070],{"class":901},[362,8277,7884],{"class":1066},[362,8279,2956],{"class":901},[362,8281,1607],{"class":1073},[362,8283,1244],{"class":901},[362,8285,8286],{"class":1066}," meas_c",[362,8288,2956],{"class":901},[362,8290,3379],{"class":1073},[362,8292,1244],{"class":901},[362,8294,3988],{"class":1225},[362,8296,395],{"class":1106},[362,8298,1094],{"class":1093},[362,8300,386],{"class":1097},[362,8302,1094],{"class":1093},[362,8304,933],{"class":901},[362,8306,3912],{"class":1225},[362,8308,395],{"class":1106},[362,8310,1094],{"class":1093},[362,8312,4007],{"class":1097},[362,8314,1094],{"class":1093},[362,8316,933],{"class":901},[362,8318,4014],{"class":1225},[362,8320,395],{"class":1106},[362,8322,7137],{"class":1073},[362,8324,1031],{"class":901},[362,8326,8327,8330,8332,8334,8337,8339],{"class":852,"line":1015},[362,8328,8329],{"class":1225},"            label",[362,8331,395],{"class":1106},[362,8333,1094],{"class":1093},[362,8335,8336],{"class":1097},"measured centroid",[362,8338,1094],{"class":1093},[362,8340,1050],{"class":901},[362,8342,8343,8345,8347,8349,8351,8353,8356,8358],{"class":852,"line":1034},[362,8344,7995],{"class":860},[362,8346,902],{"class":901},[362,8348,4295],{"class":1066},[362,8350,1070],{"class":901},[362,8352,1094],{"class":1093},[362,8354,8355],{"class":1097},"Mask blob over time (light → dark) + centroid track",[362,8357,1094],{"class":1093},[362,8359,1050],{"class":901},[362,8361,8362,8364,8366,8368,8370,8372,8374,8376,8378,8381,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405,8407,8409],{"class":852,"line":1047},[362,8363,7995],{"class":860},[362,8365,902],{"class":901},[362,8367,4353],{"class":1066},[362,8369,1070],{"class":901},[362,8371,6831],{"class":1225},[362,8373,395],{"class":1106},[362,8375,4377],{"class":1073},[362,8377,2129],{"class":901},[362,8379,8380],{"class":860},"; axL",[362,8382,902],{"class":901},[362,8384,4315],{"class":1066},[362,8386,1070],{"class":901},[362,8388,1094],{"class":1093},[362,8390,386],{"class":1097},[362,8392,1094],{"class":1093},[362,8394,2129],{"class":901},[362,8396,8380],{"class":860},[362,8398,902],{"class":901},[362,8400,4333],{"class":1066},[362,8402,1070],{"class":901},[362,8404,1094],{"class":1093},[362,8406,4340],{"class":1097},[362,8408,1094],{"class":1093},[362,8410,1050],{"class":901},[362,8412,8413],{"class":852,"line":1053},[362,8414,868],{"emptyLinePlaceholder":867},[362,8416,8417],{"class":852,"line":1058},[362,8418,8419],{"class":2132},"# (right) predicted mask + centre uncertainty at frame kf\n",[362,8421,8422,8425,8427],{"class":852,"line":1079},[362,8423,8424],{"class":860},"kf ",[362,8426,395],{"class":1106},[362,8428,8429],{"class":1073}," 8\n",[362,8431,8432,8435,8437,8439,8441,8443,8445,8447,8449,8451,8453,8455,8457,8459,8461,8463,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486,8488],{"class":852,"line":1567},[362,8433,8434],{"class":860},"axR",[362,8436,902],{"class":901},[362,8438,8154],{"class":1066},[362,8440,1070],{"class":901},[362,8442,8086],{"class":1066},[362,8444,1090],{"class":901},[362,8446,8424],{"class":1066},[362,8448,2416],{"class":1106},[362,8450,3379],{"class":1073},[362,8452,2161],{"class":901},[362,8454,8163],{"class":1066},[362,8456,2632],{"class":901},[362,8458,8168],{"class":1225},[362,8460,395],{"class":1106},[362,8462,1094],{"class":1093},[362,8464,8465],{"class":1097},"Greys",[362,8467,1094],{"class":1093},[362,8469,933],{"class":901},[362,8471,8182],{"class":1225},[362,8473,395],{"class":1106},[362,8475,1094],{"class":1093},[362,8477,8189],{"class":1097},[362,8479,1094],{"class":1093},[362,8481,933],{"class":901},[362,8483,6427],{"class":1225},[362,8485,395],{"class":1106},[362,8487,6422],{"class":1073},[362,8489,1050],{"class":901},[362,8491,8492,8495,8497,8500,8502,8505,8507,8509,8511,8513,8515,8517],{"class":852,"line":1577},[362,8493,8494],{"class":860},"pri ",[362,8496,395],{"class":1106},[362,8498,8499],{"class":860}," rec_m",[362,8501,1090],{"class":901},[362,8503,8504],{"class":860},"kf",[362,8506,6157],{"class":901},[362,8508,1094],{"class":1093},[362,8510,2221],{"class":1097},[362,8512,1094],{"class":1093},[362,8514,3228],{"class":901},[362,8516,3039],{"class":1073},[362,8518,2332],{"class":901},[362,8520,8521,8524,8526,8528,8530,8532,8534,8537,8539,8541,8543,8545,8547,8549,8551,8553,8556],{"class":852,"line":1586},[362,8522,8523],{"class":860},"template ",[362,8525,395],{"class":1106},[362,8527,7427],{"class":1066},[362,8529,1070],{"class":901},[362,8531,1492],{"class":1277},[362,8533,1070],{"class":901},[362,8535,8536],{"class":1066},"pri",[362,8538,1090],{"class":901},[362,8540,1074],{"class":1073},[362,8542,3005],{"class":901},[362,8544,2036],{"class":1277},[362,8546,1070],{"class":901},[362,8548,8536],{"class":1066},[362,8550,1090],{"class":901},[362,8552,1241],{"class":1073},[362,8554,8555],{"class":901},"]))",[362,8557,8558],{"class":2132},"   # mask at predicted centre\n",[362,8560,8561,8563,8565,8568,8570,8573,8575,8577,8579,8582,8584,8586,8588,8590,8593,8595,8597,8599,8601,8603,8606,8608,8610],{"class":852,"line":1625},[362,8562,8434],{"class":860},[362,8564,902],{"class":901},[362,8566,8567],{"class":1066},"contour",[362,8569,1070],{"class":901},[362,8571,8572],{"class":1066},"template",[362,8574,902],{"class":901},[362,8576,8163],{"class":1066},[362,8578,2632],{"class":901},[362,8580,8581],{"class":1225}," levels",[362,8583,395],{"class":1106},[362,8585,1090],{"class":901},[362,8587,6422],{"class":1073},[362,8589,1244],{"class":901},[362,8591,8592],{"class":1225}," colors",[362,8594,395],{"class":1106},[362,8596,1094],{"class":1093},[362,8598,4091],{"class":1097},[362,8600,1094],{"class":1093},[362,8602,933],{"class":901},[362,8604,8605],{"class":1225}," linewidths",[362,8607,395],{"class":1106},[362,8609,3039],{"class":1073},[362,8611,1050],{"class":901},[362,8613,8614,8617,8619,8621,8623,8625,8627,8630,8632,8634,8636,8638,8640,8642],{"class":852,"line":1657},[362,8615,8616],{"class":860},"mu",[362,8618,933],{"class":901},[362,8620,4164],{"class":860},[362,8622,395],{"class":1106},[362,8624,3156],{"class":1066},[362,8626,1070],{"class":901},[362,8628,8629],{"class":1066},"rec_m",[362,8631,1090],{"class":901},[362,8633,8504],{"class":1066},[362,8635,1244],{"class":901},[362,8637,1939],{"class":1066},[362,8639,902],{"class":901},[362,8641,3803],{"class":905},[362,8643,1050],{"class":901},[362,8645,8646,8649,8651,8653,8655,8657,8659,8661,8663,8665,8667,8669,8671,8673,8675,8677,8679,8681,8683,8685,8687,8689],{"class":852,"line":1689},[362,8647,8648],{"class":1066},"cov_ellipse",[362,8650,1070],{"class":901},[362,8652,8434],{"class":1066},[362,8654,933],{"class":901},[362,8656,3288],{"class":1066},[362,8658,933],{"class":901},[362,8660,4204],{"class":1066},[362,8662,933],{"class":901},[362,8664,2793],{"class":1225},[362,8666,395],{"class":1106},[362,8668,2798],{"class":1073},[362,8670,933],{"class":901},[362,8672,4217],{"class":1225},[362,8674,395],{"class":1106},[362,8676,1094],{"class":1093},[362,8678,4224],{"class":1097},[362,8680,1094],{"class":1093},[362,8682,933],{"class":901},[362,8684,3926],{"class":1225},[362,8686,395],{"class":1106},[362,8688,3039],{"class":1073},[362,8690,1050],{"class":901},[362,8692,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742,8744,8746,8748,8750,8752,8754],{"class":852,"line":1709},[362,8694,8434],{"class":860},[362,8696,902],{"class":901},[362,8698,3966],{"class":1066},[362,8700,1238],{"class":901},[362,8702,1492],{"class":1277},[362,8704,1070],{"class":901},[362,8706,8536],{"class":1066},[362,8708,1090],{"class":901},[362,8710,1074],{"class":1073},[362,8712,8713],{"class":901},"])],",[362,8715,3774],{"class":901},[362,8717,1492],{"class":1277},[362,8719,1070],{"class":901},[362,8721,8536],{"class":1066},[362,8723,1090],{"class":901},[362,8725,1241],{"class":1073},[362,8727,8713],{"class":901},[362,8729,3912],{"class":1225},[362,8731,395],{"class":1106},[362,8733,1094],{"class":1093},[362,8735,4091],{"class":1097},[362,8737,1094],{"class":1093},[362,8739,933],{"class":901},[362,8741,4014],{"class":1225},[362,8743,395],{"class":1106},[362,8745,7137],{"class":1073},[362,8747,933],{"class":901},[362,8749,3951],{"class":1225},[362,8751,395],{"class":1106},[362,8753,3535],{"class":1073},[362,8755,1050],{"class":901},[362,8757,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,8797,8800,8802,8804,8807,8810],{"class":852,"line":1719},[362,8759,8434],{"class":860},[362,8761,902],{"class":901},[362,8763,3881],{"class":1066},[362,8765,4248],{"class":901},[362,8767,4251],{"class":901},[362,8769,3912],{"class":1225},[362,8771,395],{"class":1106},[362,8773,1094],{"class":1093},[362,8775,4091],{"class":1097},[362,8777,1094],{"class":1093},[362,8779,933],{"class":901},[362,8781,3926],{"class":1225},[362,8783,395],{"class":1106},[362,8785,3039],{"class":1073},[362,8787,933],{"class":901},[362,8789,4924],{"class":1225},[362,8791,395],{"class":1106},[362,8793,1094],{"class":1093},[362,8795,8796],{"class":1097},"predicted mask (frame ",[362,8798,8799],{"class":1073},"%d",[362,8801,2129],{"class":1097},[362,8803,1094],{"class":1093},[362,8805,8806],{"class":1106}," %",[362,8808,8809],{"class":1066}," kf",[362,8811,1050],{"class":901},[362,8813,8814,8816,8818,8820,8822,8824,8826,8828,8830,8832,8834,8836,8838,8840,8842,8844,8846,8848,8850,8852,8854],{"class":852,"line":1724},[362,8815,8434],{"class":860},[362,8817,902],{"class":901},[362,8819,3881],{"class":1066},[362,8821,4248],{"class":901},[362,8823,4251],{"class":901},[362,8825,3912],{"class":1225},[362,8827,395],{"class":1106},[362,8829,1094],{"class":1093},[362,8831,4224],{"class":1097},[362,8833,1094],{"class":1093},[362,8835,933],{"class":901},[362,8837,3926],{"class":1225},[362,8839,395],{"class":1106},[362,8841,3039],{"class":1073},[362,8843,933],{"class":901},[362,8845,4924],{"class":1225},[362,8847,395],{"class":1106},[362,8849,1094],{"class":1093},[362,8851,6701],{"class":1097},[362,8853,1094],{"class":1093},[362,8855,1050],{"class":901},[362,8857,8858,8860,8862,8864,8866,8868,8870,8872,8874,8877,8879,8881,8883,8885,8887,8889,8891,8893,8895,8897,8899,8901,8903,8906,8908],{"class":852,"line":1729},[362,8859,8434],{"class":860},[362,8861,902],{"class":901},[362,8863,3881],{"class":1066},[362,8865,4248],{"class":901},[362,8867,4251],{"class":901},[362,8869,3912],{"class":1225},[362,8871,395],{"class":1106},[362,8873,1094],{"class":1093},[362,8875,8876],{"class":1097},"0.4",[362,8878,1094],{"class":1093},[362,8880,933],{"class":901},[362,8882,3926],{"class":1225},[362,8884,395],{"class":1106},[362,8886,3039],{"class":1073},[362,8888,933],{"class":901},[362,8890,6427],{"class":1225},[362,8892,395],{"class":1106},[362,8894,6422],{"class":1073},[362,8896,933],{"class":901},[362,8898,4924],{"class":1225},[362,8900,395],{"class":1106},[362,8902,1094],{"class":1093},[362,8904,8905],{"class":1097},"previous mask",[362,8907,1094],{"class":1093},[362,8909,1050],{"class":901},[362,8911,8912,8914,8916,8918,8920,8922,8924,8926,8928,8931,8933,8935,8937,8939,8941,8943],{"class":852,"line":1769},[362,8913,8434],{"class":860},[362,8915,902],{"class":901},[362,8917,6714],{"class":1066},[362,8919,1070],{"class":901},[362,8921,1074],{"class":1073},[362,8923,933],{"class":901},[362,8925,8065],{"class":1066},[362,8927,2129],{"class":901},[362,8929,8930],{"class":860},"; axR",[362,8932,902],{"class":901},[362,8934,6732],{"class":1066},[362,8936,1070],{"class":901},[362,8938,7341],{"class":1066},[362,8940,933],{"class":901},[362,8942,1607],{"class":1073},[362,8944,1050],{"class":901},[362,8946,8947,8949,8951,8953,8955,8957,8960,8962],{"class":852,"line":1802},[362,8948,8434],{"class":860},[362,8950,902],{"class":901},[362,8952,4295],{"class":1066},[362,8954,1070],{"class":901},[362,8956,1094],{"class":1093},[362,8958,8959],{"class":1097},"Predicting the mask's next position",[362,8961,1094],{"class":1093},[362,8963,1050],{"class":901},[362,8965,8966,8968,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012],{"class":852,"line":1808},[362,8967,8434],{"class":860},[362,8969,902],{"class":901},[362,8971,4353],{"class":1066},[362,8973,1070],{"class":901},[362,8975,6831],{"class":1225},[362,8977,395],{"class":1106},[362,8979,4377],{"class":1073},[362,8981,2129],{"class":901},[362,8983,8930],{"class":860},[362,8985,902],{"class":901},[362,8987,4315],{"class":1066},[362,8989,1070],{"class":901},[362,8991,1094],{"class":1093},[362,8993,386],{"class":1097},[362,8995,1094],{"class":1093},[362,8997,2129],{"class":901},[362,8999,8930],{"class":860},[362,9001,902],{"class":901},[362,9003,4333],{"class":1066},[362,9005,1070],{"class":901},[362,9007,1094],{"class":1093},[362,9009,4340],{"class":1097},[362,9011,1094],{"class":1093},[362,9013,1050],{"class":901},[362,9015,9016,9018,9020,9022,9024,9026,9028,9030],{"class":852,"line":1814},[362,9017,1082],{"class":860},[362,9019,902],{"class":901},[362,9021,4407],{"class":1066},[362,9023,4410],{"class":901},[362,9025,4413],{"class":860},[362,9027,902],{"class":901},[362,9029,4418],{"class":1066},[362,9031,1962],{"class":901},[338,9033,9034],{},[4424,9035],{"alt":847,"src":9036},"\u002F_nb\u002F9fbf7a8f5e12060e.png",[810,9038,9040],{"id":9039},"_4-3-d-point-clouds","4 — 3-D point clouds",[338,9042,9043,9044,9047,9048,9050,9051,9053,9054,9056,9057,9060],{},"For LiDAR-style tracking the object is a ",[342,9045,9046],{},"cloud"," of 3-D points; its\nlocation is summarized by the cloud centroid, tracked with\n",[702,9049,763],{}," (state ",[702,9052,768],{},", measurement\n",[702,9055,773],{},"). The predictive distribution is now a 3-D Gaussian — we\ndraw it as a 2σ ",[347,9058,9059],{},"wireframe ellipsoid"," around the predicted centroid.",[338,9062,9063],{},"The faded clouds show the object at three frames; the orange line is\nthe true centroid path; the green ellipsoid is where the filter\nexpects the centroid next, given only the earlier frames.",[842,9065,9067],{"className":844,"code":9066,"language":846,"meta":847,"style":847},"def plot_ellipsoid(ax, mean3, cov3, n_std=2.0, **kw):\n    cov3 = cov3.detach().cpu().double().numpy()\n    u = np.linspace(0, 2 * np.pi, 24)\n    v = np.linspace(0, np.pi, 14)\n    sphere = np.stack([\n        np.outer(np.cos(u), np.sin(v)),\n        np.outer(np.sin(u), np.sin(v)),\n        np.outer(np.ones_like(u), np.cos(v)),\n    ]).reshape(3, -1)\n    L = np.linalg.cholesky(cov3 + np.eye(3) * 1e-9) * n_std\n    pts = (L @ sphere) + mean3.detach().cpu().numpy()[:, None]\n    P = pts.reshape(3, u.size, v.size)\n    ax.plot_wireframe(P[0], P[1], P[2], **kw)\n\nT = 14\nt = torch.arange(T).float()\ntrue_c3 = torch.stack([1.5 * t, 0.4 * t, 5.0 + 0.5 * torch.sin(0.4 * t)], dim=1)\ng = torch.Generator().manual_seed(11)\nclouds = [c + 0.6 * torch.randn(160, 3, generator=g) for c in true_c3]\nmeas_c3 = torch.stack([cloud.mean(0) for cloud in clouds])             + 0.25 * torch.randn(T, 3, generator=g)\n\nproc = KalmanCentroid3D(\"centroid\", q=0.05, r=0.1)\ninit_mean = torch.zeros(6)\ninit_mean[:3] = meas_c3[0]\ninit_mean[3:5] = torch.tensor([1.5, 0.4])\nrec3 = run_kalman(proc, init_mean, torch.eye(6) * 2.0,\n                  list(meas_c3), [True] * T)\npost3 = torch.stack([r[\"post_mean\"][:3] for r in rec3])\n\n",[702,9068,9069,9106,9133,9172,9204,9220,9261,9295,9330,9351,9400,9442,9481,9523,9527,9535,9557,9623,9645,9701,9771,9775,9809,9828,9849,9881,9918,9941],{"__ignoreMap":847},[362,9070,9071,9073,9076,9078,9080,9082,9085,9087,9090,9092,9094,9096,9098,9100,9102,9104],{"class":852,"line":853},[362,9072,1173],{"class":1172},[362,9074,9075],{"class":1176}," plot_ellipsoid",[362,9077,1070],{"class":901},[362,9079,2778],{"class":1182},[362,9081,933],{"class":901},[362,9083,9084],{"class":1182}," mean3",[362,9086,933],{"class":901},[362,9088,9089],{"class":1182}," cov3",[362,9091,933],{"class":901},[362,9093,2793],{"class":1182},[362,9095,395],{"class":1106},[362,9097,2798],{"class":1073},[362,9099,933],{"class":901},[362,9101,2803],{"class":1106},[362,9103,2806],{"class":1182},[362,9105,1196],{"class":901},[362,9107,9108,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131],{"class":852,"line":864},[362,9109,9110],{"class":860},"    cov3 ",[362,9112,395],{"class":1106},[362,9114,9089],{"class":860},[362,9116,902],{"class":901},[362,9118,2831],{"class":1066},[362,9120,2834],{"class":901},[362,9122,2837],{"class":1066},[362,9124,2834],{"class":901},[362,9126,2428],{"class":1066},[362,9128,2834],{"class":901},[362,9130,8163],{"class":1066},[362,9132,1962],{"class":901},[362,9134,9135,9138,9140,9143,9145,9148,9150,9152,9154,9156,9158,9160,9162,9165,9167,9170],{"class":852,"line":871},[362,9136,9137],{"class":860},"    u ",[362,9139,395],{"class":1106},[362,9141,9142],{"class":860}," np",[362,9144,902],{"class":901},[362,9146,9147],{"class":1066},"linspace",[362,9149,1070],{"class":901},[362,9151,1074],{"class":1073},[362,9153,933],{"class":901},[362,9155,3501],{"class":1073},[362,9157,1764],{"class":1106},[362,9159,9142],{"class":1066},[362,9161,902],{"class":901},[362,9163,9164],{"class":905},"pi",[362,9166,933],{"class":901},[362,9168,9169],{"class":1073}," 24",[362,9171,1050],{"class":901},[362,9173,9174,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9202],{"class":852,"line":885},[362,9175,9176],{"class":860},"    v ",[362,9178,395],{"class":1106},[362,9180,9142],{"class":860},[362,9182,902],{"class":901},[362,9184,9147],{"class":1066},[362,9186,1070],{"class":901},[362,9188,1074],{"class":1073},[362,9190,933],{"class":901},[362,9192,9142],{"class":1066},[362,9194,902],{"class":901},[362,9196,9164],{"class":905},[362,9198,933],{"class":901},[362,9200,9201],{"class":1073}," 14",[362,9203,1050],{"class":901},[362,9205,9206,9209,9211,9213,9215,9217],{"class":852,"line":893},[362,9207,9208],{"class":860},"    sphere ",[362,9210,395],{"class":1106},[362,9212,9142],{"class":860},[362,9214,902],{"class":901},[362,9216,3464],{"class":1066},[362,9218,9219],{"class":901},"([\n",[362,9221,9222,9225,9227,9230,9232,9235,9237,9240,9242,9245,9247,9249,9251,9254,9256,9258],{"class":852,"line":915},[362,9223,9224],{"class":1066},"        np",[362,9226,902],{"class":901},[362,9228,9229],{"class":1066},"outer",[362,9231,1070],{"class":901},[362,9233,9234],{"class":1066},"np",[362,9236,902],{"class":901},[362,9238,9239],{"class":1066},"cos",[362,9241,1070],{"class":901},[362,9243,9244],{"class":1066},"u",[362,9246,3771],{"class":901},[362,9248,9142],{"class":1066},[362,9250,902],{"class":901},[362,9252,9253],{"class":1066},"sin",[362,9255,1070],{"class":901},[362,9257,5936],{"class":1066},[362,9259,9260],{"class":901},")),\n",[362,9262,9263,9265,9267,9269,9271,9273,9275,9277,9279,9281,9283,9285,9287,9289,9291,9293],{"class":852,"line":939},[362,9264,9224],{"class":1066},[362,9266,902],{"class":901},[362,9268,9229],{"class":1066},[362,9270,1070],{"class":901},[362,9272,9234],{"class":1066},[362,9274,902],{"class":901},[362,9276,9253],{"class":1066},[362,9278,1070],{"class":901},[362,9280,9244],{"class":1066},[362,9282,3771],{"class":901},[362,9284,9142],{"class":1066},[362,9286,902],{"class":901},[362,9288,9253],{"class":1066},[362,9290,1070],{"class":901},[362,9292,5936],{"class":1066},[362,9294,9260],{"class":901},[362,9296,9297,9299,9301,9303,9305,9307,9309,9312,9314,9316,9318,9320,9322,9324,9326,9328],{"class":852,"line":944},[362,9298,9224],{"class":1066},[362,9300,902],{"class":901},[362,9302,9229],{"class":1066},[362,9304,1070],{"class":901},[362,9306,9234],{"class":1066},[362,9308,902],{"class":901},[362,9310,9311],{"class":1066},"ones_like",[362,9313,1070],{"class":901},[362,9315,9244],{"class":1066},[362,9317,3771],{"class":901},[362,9319,9142],{"class":1066},[362,9321,902],{"class":901},[362,9323,9239],{"class":1066},[362,9325,1070],{"class":901},[362,9327,5936],{"class":1066},[362,9329,9260],{"class":901},[362,9331,9332,9335,9338,9340,9342,9344,9347,9349],{"class":852,"line":977},[362,9333,9334],{"class":901},"    ]).",[362,9336,9337],{"class":1066},"reshape",[362,9339,1070],{"class":901},[362,9341,3535],{"class":1073},[362,9343,933],{"class":901},[362,9345,9346],{"class":1106}," -",[362,9348,1241],{"class":1073},[362,9350,1050],{"class":901},[362,9352,9353,9356,9358,9360,9362,9364,9366,9369,9371,9374,9376,9378,9380,9382,9384,9386,9388,9390,9393,9395,9397],{"class":852,"line":994},[362,9354,9355],{"class":860},"    L ",[362,9357,395],{"class":1106},[362,9359,9142],{"class":860},[362,9361,902],{"class":901},[362,9363,2455],{"class":905},[362,9365,902],{"class":901},[362,9367,9368],{"class":1066},"cholesky",[362,9370,1070],{"class":901},[362,9372,9373],{"class":1066},"cov3 ",[362,9375,525],{"class":1106},[362,9377,9142],{"class":1066},[362,9379,902],{"class":901},[362,9381,2385],{"class":1066},[362,9383,1070],{"class":901},[362,9385,3535],{"class":1073},[362,9387,2129],{"class":901},[362,9389,1764],{"class":1106},[362,9391,9392],{"class":1073}," 1e-9",[362,9394,2129],{"class":901},[362,9396,1764],{"class":1106},[362,9398,9399],{"class":860}," n_std\n",[362,9401,9402,9405,9407,9409,9412,9414,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435,9438,9440],{"class":852,"line":1015},[362,9403,9404],{"class":860},"    pts ",[362,9406,395],{"class":1106},[362,9408,1110],{"class":901},[362,9410,9411],{"class":860},"L ",[362,9413,2448],{"class":1106},[362,9415,9416],{"class":860}," sphere",[362,9418,2129],{"class":901},[362,9420,2377],{"class":1106},[362,9422,9084],{"class":860},[362,9424,902],{"class":901},[362,9426,2831],{"class":1066},[362,9428,2834],{"class":901},[362,9430,2837],{"class":1066},[362,9432,2834],{"class":901},[362,9434,8163],{"class":1066},[362,9436,9437],{"class":901},"()[:,",[362,9439,2064],{"class":1787},[362,9441,2332],{"class":901},[362,9443,9444,9447,9449,9452,9454,9456,9458,9460,9462,9465,9467,9470,9472,9475,9477,9479],{"class":852,"line":1034},[362,9445,9446],{"class":860},"    P ",[362,9448,395],{"class":1106},[362,9450,9451],{"class":860}," pts",[362,9453,902],{"class":901},[362,9455,9337],{"class":1066},[362,9457,1070],{"class":901},[362,9459,3535],{"class":1073},[362,9461,933],{"class":901},[362,9463,9464],{"class":1066}," u",[362,9466,902],{"class":901},[362,9468,9469],{"class":905},"size",[362,9471,933],{"class":901},[362,9473,9474],{"class":1066}," v",[362,9476,902],{"class":901},[362,9478,9469],{"class":905},[362,9480,1050],{"class":901},[362,9482,9483,9485,9487,9490,9492,9494,9496,9498,9500,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521],{"class":852,"line":1047},[362,9484,3067],{"class":860},[362,9486,902],{"class":901},[362,9488,9489],{"class":1066},"plot_wireframe",[362,9491,1070],{"class":901},[362,9493,507],{"class":1066},[362,9495,1090],{"class":901},[362,9497,1074],{"class":1073},[362,9499,1244],{"class":901},[362,9501,9502],{"class":1066}," P",[362,9504,1090],{"class":901},[362,9506,1241],{"class":1073},[362,9508,1244],{"class":901},[362,9510,9502],{"class":1066},[362,9512,1090],{"class":901},[362,9514,3039],{"class":1073},[362,9516,1244],{"class":901},[362,9518,2803],{"class":1106},[362,9520,2806],{"class":1066},[362,9522,1050],{"class":901},[362,9524,9525],{"class":852,"line":1053},[362,9526,868],{"emptyLinePlaceholder":867},[362,9528,9529,9531,9533],{"class":852,"line":1058},[362,9530,3420],{"class":860},[362,9532,395],{"class":1106},[362,9534,5445],{"class":1073},[362,9536,9537,9539,9541,9543,9545,9547,9549,9551,9553,9555],{"class":852,"line":1079},[362,9538,3430],{"class":860},[362,9540,395],{"class":1106},[362,9542,2380],{"class":860},[362,9544,902],{"class":901},[362,9546,3439],{"class":1066},[362,9548,1070],{"class":901},[362,9550,3444],{"class":1066},[362,9552,1489],{"class":901},[362,9554,1492],{"class":1066},[362,9556,1962],{"class":901},[362,9558,9559,9562,9564,9566,9568,9570,9572,9574,9576,9578,9580,9583,9585,9587,9589,9592,9594,9597,9599,9601,9603,9605,9607,9609,9611,9613,9615,9617,9619,9621],{"class":852,"line":1567},[362,9560,9561],{"class":860},"true_c3 ",[362,9563,395],{"class":1106},[362,9565,2380],{"class":860},[362,9567,902],{"class":901},[362,9569,3464],{"class":1066},[362,9571,1238],{"class":901},[362,9573,6184],{"class":1073},[362,9575,1764],{"class":1106},[362,9577,3473],{"class":1066},[362,9579,933],{"class":901},[362,9581,9582],{"class":1073}," 0.4",[362,9584,1764],{"class":1106},[362,9586,3473],{"class":1066},[362,9588,933],{"class":901},[362,9590,9591],{"class":1073}," 5.0",[362,9593,2377],{"class":1106},[362,9595,9596],{"class":1073}," 0.5",[362,9598,1764],{"class":1106},[362,9600,2380],{"class":1066},[362,9602,902],{"class":901},[362,9604,9253],{"class":1066},[362,9606,1070],{"class":901},[362,9608,8876],{"class":1073},[362,9610,1764],{"class":1106},[362,9612,3473],{"class":1066},[362,9614,1291],{"class":901},[362,9616,3506],{"class":1225},[362,9618,395],{"class":1106},[362,9620,1241],{"class":1073},[362,9622,1050],{"class":901},[362,9624,9625,9627,9629,9631,9633,9635,9637,9639,9641,9643],{"class":852,"line":1577},[362,9626,3517],{"class":860},[362,9628,395],{"class":1106},[362,9630,2380],{"class":860},[362,9632,902],{"class":901},[362,9634,3526],{"class":1066},[362,9636,2834],{"class":901},[362,9638,1067],{"class":1066},[362,9640,1070],{"class":901},[362,9642,6944],{"class":1073},[362,9644,1050],{"class":901},[362,9646,9647,9650,9652,9654,9657,9659,9662,9664,9666,9668,9670,9672,9675,9677,9679,9681,9683,9685,9687,9689,9691,9694,9696,9699],{"class":852,"line":1586},[362,9648,9649],{"class":860},"clouds ",[362,9651,395],{"class":1106},[362,9653,3774],{"class":901},[362,9655,9656],{"class":860},"c ",[362,9658,525],{"class":1106},[362,9660,9661],{"class":1073}," 0.6",[362,9663,1764],{"class":1106},[362,9665,2380],{"class":860},[362,9667,902],{"class":901},[362,9669,3571],{"class":1066},[362,9671,1070],{"class":901},[362,9673,9674],{"class":1073},"160",[362,9676,933],{"class":901},[362,9678,7008],{"class":1073},[362,9680,933],{"class":901},[362,9682,3584],{"class":1225},[362,9684,395],{"class":1106},[362,9686,3589],{"class":1066},[362,9688,2129],{"class":901},[362,9690,3820],{"class":856},[362,9692,9693],{"class":860}," c ",[362,9695,2014],{"class":856},[362,9697,9698],{"class":860}," true_c3",[362,9700,2332],{"class":901},[362,9702,9703,9706,9708,9710,9712,9714,9716,9718,9720,9722,9724,9726,9728,9730,9733,9735,9738,9740,9742,9745,9747,9749,9751,9753,9755,9757,9759,9761,9763,9765,9767,9769],{"class":852,"line":1625},[362,9704,9705],{"class":860},"meas_c3 ",[362,9707,395],{"class":1106},[362,9709,2380],{"class":860},[362,9711,902],{"class":901},[362,9713,3464],{"class":1066},[362,9715,1238],{"class":901},[362,9717,9046],{"class":1066},[362,9719,902],{"class":901},[362,9721,7583],{"class":1066},[362,9723,1070],{"class":901},[362,9725,1074],{"class":1073},[362,9727,2129],{"class":901},[362,9729,3820],{"class":856},[362,9731,9732],{"class":1066}," cloud ",[362,9734,2014],{"class":856},[362,9736,9737],{"class":1066}," clouds",[362,9739,2049],{"class":901},[362,9741,7796],{"class":1106},[362,9743,9744],{"class":1073}," 0.25",[362,9746,1764],{"class":1106},[362,9748,2380],{"class":860},[362,9750,902],{"class":901},[362,9752,3571],{"class":1066},[362,9754,1070],{"class":901},[362,9756,3444],{"class":1066},[362,9758,933],{"class":901},[362,9760,7008],{"class":1073},[362,9762,933],{"class":901},[362,9764,3584],{"class":1225},[362,9766,395],{"class":1106},[362,9768,3589],{"class":1066},[362,9770,1050],{"class":901},[362,9772,9773],{"class":852,"line":1657},[362,9774,868],{"emptyLinePlaceholder":867},[362,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807],{"class":852,"line":1689},[362,9778,3600],{"class":860},[362,9780,395],{"class":1106},[362,9782,1028],{"class":1066},[362,9784,1070],{"class":901},[362,9786,1094],{"class":1093},[362,9788,294],{"class":1097},[362,9790,1094],{"class":1093},[362,9792,933],{"class":901},[362,9794,3617],{"class":1225},[362,9796,395],{"class":1106},[362,9798,4669],{"class":1073},[362,9800,933],{"class":901},[362,9802,3165],{"class":1225},[362,9804,395],{"class":1106},[362,9806,7853],{"class":1073},[362,9808,1050],{"class":901},[362,9810,9811,9813,9815,9817,9819,9821,9823,9826],{"class":852,"line":1709},[362,9812,3642],{"class":860},[362,9814,395],{"class":1106},[362,9816,2380],{"class":860},[362,9818,902],{"class":901},[362,9820,1350],{"class":1066},[362,9822,1070],{"class":901},[362,9824,9825],{"class":1073},"6",[362,9827,1050],{"class":901},[362,9829,9830,9832,9834,9836,9838,9840,9843,9845,9847],{"class":852,"line":1719},[362,9831,5782],{"class":860},[362,9833,2362],{"class":901},[362,9835,3535],{"class":1073},[362,9837,1103],{"class":901},[362,9839,1107],{"class":1106},[362,9841,9842],{"class":860}," meas_c3",[362,9844,1090],{"class":901},[362,9846,1074],{"class":1073},[362,9848,2332],{"class":901},[362,9850,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879],{"class":852,"line":1724},[362,9852,5782],{"class":860},[362,9854,1090],{"class":901},[362,9856,3535],{"class":1073},[362,9858,1475],{"class":901},[362,9860,4597],{"class":1073},[362,9862,1103],{"class":901},[362,9864,1107],{"class":1106},[362,9866,2380],{"class":860},[362,9868,902],{"class":901},[362,9870,1235],{"class":1066},[362,9872,1238],{"class":901},[362,9874,6184],{"class":1073},[362,9876,933],{"class":901},[362,9878,9582],{"class":1073},[362,9880,2605],{"class":901},[362,9882,9883,9886,9888,9890,9892,9894,9896,9898,9900,9902,9904,9906,9908,9910,9912,9914,9916],{"class":852,"line":1729},[362,9884,9885],{"class":860},"rec3 ",[362,9887,395],{"class":1106},[362,9889,1734],{"class":1066},[362,9891,1070],{"class":901},[362,9893,1739],{"class":1066},[362,9895,933],{"class":901},[362,9897,1744],{"class":1066},[362,9899,933],{"class":901},[362,9901,2380],{"class":1066},[362,9903,902],{"class":901},[362,9905,2385],{"class":1066},[362,9907,1070],{"class":901},[362,9909,9825],{"class":1073},[362,9911,2129],{"class":901},[362,9913,1764],{"class":1106},[362,9915,3688],{"class":1073},[362,9917,1031],{"class":901},[362,9919,9920,9922,9924,9927,9929,9931,9933,9935,9937,9939],{"class":852,"line":1769},[362,9921,4777],{"class":1277},[362,9923,1070],{"class":901},[362,9925,9926],{"class":1066},"meas_c3",[362,9928,3771],{"class":901},[362,9930,3774],{"class":901},[362,9932,2929],{"class":1787},[362,9934,1103],{"class":901},[362,9936,1764],{"class":1106},[362,9938,3783],{"class":1066},[362,9940,1050],{"class":901},[362,9942,9943,9946,9948,9950,9952,9954,9956,9958,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9981],{"class":852,"line":1802},[362,9944,9945],{"class":860},"post3 ",[362,9947,395],{"class":1106},[362,9949,2380],{"class":860},[362,9951,902],{"class":901},[362,9953,3464],{"class":1066},[362,9955,1238],{"class":901},[362,9957,3803],{"class":1066},[362,9959,1090],{"class":901},[362,9961,1094],{"class":1093},[362,9963,2652],{"class":1097},[362,9965,1094],{"class":1093},[362,9967,3228],{"class":901},[362,9969,3535],{"class":1073},[362,9971,1103],{"class":901},[362,9973,3820],{"class":856},[362,9975,3823],{"class":1066},[362,9977,2014],{"class":856},[362,9979,9980],{"class":1066}," rec3",[362,9982,2605],{"class":901},[842,9984,9986],{"className":844,"code":9985,"language":846,"meta":847,"style":847},"fig = plt.figure(figsize=(9, 6))\nax = fig.add_subplot(projection=\"3d\")\nfor k, col in [(0, \"tab:purple\"), (T \u002F\u002F 2, \"tab:cyan\"), (T - 1, \"tab:olive\")]:\n    c = clouds[k]\n    ax.scatter(c[:, 0], c[:, 1], c[:, 2], s=6, alpha=0.25, color=col,\n               label=f\"cloud @ frame {k}\")\nax.plot(true_c3[:, 0], true_c3[:, 1], true_c3[:, 2], \"-\", color=\"tab:orange\",\n        lw=2, label=\"true centroid\")\nax.plot(post3[:, 0], post3[:, 1], post3[:, 2], \"o\", color=\"tab:blue\", ms=3,\n        label=\"Kalman estimate\")\nfor k in (4, 9):\n    mu3 = rec3[k][\"prior_mean\"][:3]\n    S3 = rec3[k][\"prior_cov\"][:3, :3] + torch.eye(3) * proc.r\n    plot_ellipsoid(ax, mu3, S3, n_std=2.0, color=\"tab:green\", lw=0.6)\nax.plot([], [], color=\"tab:green\", label=\"2σ predicted centroid\")\nax.set_xlabel(\"x\"); ax.set_ylabel(\"y\"); ax.set_zlabel(\"z\")\nax.set_title(\"3-D point-cloud centroid: trajectory + predictive ellipsoid\")\nax.legend(fontsize=8, loc=\"upper left\")\nplt.tight_layout(); plt.show()\n\n",[702,9987,9988,10018,10049,10116,10131,10192,10214,10269,10292,10357,10371,10390,10417,10472,10521,10558,10610,10629,10660],{"__ignoreMap":847},[362,9989,9990,9993,9995,9997,9999,10002,10004,10006,10008,10010,10012,10014,10016],{"class":852,"line":853},[362,9991,9992],{"class":860},"fig ",[362,9994,395],{"class":1106},[362,9996,3335],{"class":860},[362,9998,902],{"class":901},[362,10000,10001],{"class":1066},"figure",[362,10003,1070],{"class":901},[362,10005,3858],{"class":1225},[362,10007,395],{"class":1106},[362,10009,1070],{"class":901},[362,10011,3865],{"class":1073},[362,10013,933],{"class":901},[362,10015,4477],{"class":1073},[362,10017,3145],{"class":901},[362,10019,10020,10023,10025,10028,10030,10033,10035,10038,10040,10042,10045,10047],{"class":852,"line":864},[362,10021,10022],{"class":860},"ax ",[362,10024,395],{"class":1106},[362,10026,10027],{"class":860}," fig",[362,10029,902],{"class":901},[362,10031,10032],{"class":1066},"add_subplot",[362,10034,1070],{"class":901},[362,10036,10037],{"class":1225},"projection",[362,10039,395],{"class":1106},[362,10041,1094],{"class":1093},[362,10043,10044],{"class":1097},"3d",[362,10046,1094],{"class":1093},[362,10048,1050],{"class":901},[362,10050,10051,10053,10055,10057,10060,10062,10064,10066,10068,10070,10073,10075,10077,10079,10081,10084,10086,10088,10090,10093,10095,10097,10099,10101,10103,10105,10107,10109,10112,10114],{"class":852,"line":871},[362,10052,4133],{"class":856},[362,10054,2006],{"class":860},[362,10056,933],{"class":901},[362,10058,10059],{"class":860}," col ",[362,10061,2014],{"class":856},[362,10063,6973],{"class":901},[362,10065,1074],{"class":1073},[362,10067,933],{"class":901},[362,10069,2233],{"class":1093},[362,10071,10072],{"class":1097},"tab:purple",[362,10074,1094],{"class":1093},[362,10076,3771],{"class":901},[362,10078,1110],{"class":901},[362,10080,3420],{"class":860},[362,10082,10083],{"class":1106},"\u002F\u002F",[362,10085,3501],{"class":1073},[362,10087,933],{"class":901},[362,10089,2233],{"class":1093},[362,10091,10092],{"class":1097},"tab:cyan",[362,10094,1094],{"class":1093},[362,10096,3771],{"class":901},[362,10098,1110],{"class":901},[362,10100,3420],{"class":860},[362,10102,2416],{"class":1106},[362,10104,3379],{"class":1073},[362,10106,933],{"class":901},[362,10108,2233],{"class":1093},[362,10110,10111],{"class":1097},"tab:olive",[362,10113,1094],{"class":1093},[362,10115,7020],{"class":901},[362,10117,10118,10121,10123,10125,10127,10129],{"class":852,"line":885},[362,10119,10120],{"class":860},"    c ",[362,10122,395],{"class":1106},[362,10124,9737],{"class":860},[362,10126,1090],{"class":901},[362,10128,2046],{"class":860},[362,10130,2332],{"class":901},[362,10132,10133,10135,10137,10139,10141,10144,10146,10148,10150,10153,10155,10157,10159,10161,10163,10165,10167,10169,10171,10173,10175,10177,10179,10181,10183,10185,10187,10190],{"class":852,"line":893},[362,10134,3067],{"class":860},[362,10136,902],{"class":901},[362,10138,3966],{"class":1066},[362,10140,1070],{"class":901},[362,10142,10143],{"class":1066},"c",[362,10145,2956],{"class":901},[362,10147,1607],{"class":1073},[362,10149,1244],{"class":901},[362,10151,10152],{"class":1066}," c",[362,10154,2956],{"class":901},[362,10156,3379],{"class":1073},[362,10158,1244],{"class":901},[362,10160,10152],{"class":1066},[362,10162,2956],{"class":901},[362,10164,3501],{"class":1073},[362,10166,1244],{"class":901},[362,10168,4014],{"class":1225},[362,10170,395],{"class":1106},[362,10172,9825],{"class":1073},[362,10174,933],{"class":901},[362,10176,6427],{"class":1225},[362,10178,395],{"class":1106},[362,10180,3350],{"class":1073},[362,10182,933],{"class":901},[362,10184,3912],{"class":1225},[362,10186,395],{"class":1106},[362,10188,10189],{"class":1066},"col",[362,10191,1031],{"class":901},[362,10193,10194,10196,10198,10201,10204,10206,10208,10210,10212],{"class":852,"line":915},[362,10195,7144],{"class":1225},[362,10197,395],{"class":1106},[362,10199,10200],{"class":1172},"f",[362,10202,10203],{"class":1097},"\"cloud @ frame ",[362,10205,1470],{"class":1073},[362,10207,2046],{"class":1066},[362,10209,1509],{"class":1073},[362,10211,1094],{"class":1097},[362,10213,1050],{"class":901},[362,10215,10216,10218,10220,10222,10224,10227,10229,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267],{"class":852,"line":939},[362,10217,2778],{"class":860},[362,10219,902],{"class":901},[362,10221,3881],{"class":1066},[362,10223,1070],{"class":901},[362,10225,10226],{"class":1066},"true_c3",[362,10228,2956],{"class":901},[362,10230,1607],{"class":1073},[362,10232,1244],{"class":901},[362,10234,9698],{"class":1066},[362,10236,2956],{"class":901},[362,10238,3379],{"class":1073},[362,10240,1244],{"class":901},[362,10242,9698],{"class":1066},[362,10244,2956],{"class":901},[362,10246,3501],{"class":1073},[362,10248,1244],{"class":901},[362,10250,2233],{"class":1093},[362,10252,2416],{"class":1097},[362,10254,1094],{"class":1093},[362,10256,933],{"class":901},[362,10258,3912],{"class":1225},[362,10260,395],{"class":1106},[362,10262,1094],{"class":1093},[362,10264,5211],{"class":1097},[362,10266,1094],{"class":1093},[362,10268,1031],{"class":901},[362,10270,10271,10274,10276,10278,10280,10282,10284,10286,10288,10290],{"class":852,"line":944},[362,10272,10273],{"class":1225},"        lw",[362,10275,395],{"class":1106},[362,10277,3039],{"class":1073},[362,10279,933],{"class":901},[362,10281,4924],{"class":1225},[362,10283,395],{"class":1106},[362,10285,1094],{"class":1093},[362,10287,8261],{"class":1097},[362,10289,1094],{"class":1093},[362,10291,1050],{"class":901},[362,10293,10294,10296,10298,10300,10302,10305,10307,10309,10311,10314,10316,10318,10320,10322,10324,10326,10328,10330,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355],{"class":852,"line":977},[362,10295,2778],{"class":860},[362,10297,902],{"class":901},[362,10299,3881],{"class":1066},[362,10301,1070],{"class":901},[362,10303,10304],{"class":1066},"post3",[362,10306,2956],{"class":901},[362,10308,1607],{"class":1073},[362,10310,1244],{"class":901},[362,10312,10313],{"class":1066}," post3",[362,10315,2956],{"class":901},[362,10317,3379],{"class":1073},[362,10319,1244],{"class":901},[362,10321,10313],{"class":1066},[362,10323,2956],{"class":901},[362,10325,3501],{"class":1073},[362,10327,1244],{"class":901},[362,10329,2233],{"class":1093},[362,10331,10332],{"class":1097},"o",[362,10334,1094],{"class":1093},[362,10336,933],{"class":901},[362,10338,3912],{"class":1225},[362,10340,395],{"class":1106},[362,10342,1094],{"class":1093},[362,10344,4091],{"class":1097},[362,10346,1094],{"class":1093},[362,10348,933],{"class":901},[362,10350,4098],{"class":1225},[362,10352,395],{"class":1106},[362,10354,3535],{"class":1073},[362,10356,1031],{"class":901},[362,10358,10359,10361,10363,10365,10367,10369],{"class":852,"line":994},[362,10360,3937],{"class":1225},[362,10362,395],{"class":1106},[362,10364,1094],{"class":1093},[362,10366,5104],{"class":1097},[362,10368,1094],{"class":1093},[362,10370,1050],{"class":901},[362,10372,10373,10375,10377,10379,10381,10383,10385,10388],{"class":852,"line":1015},[362,10374,4133],{"class":856},[362,10376,3360],{"class":860},[362,10378,2014],{"class":856},[362,10380,1110],{"class":901},[362,10382,4103],{"class":1073},[362,10384,933],{"class":901},[362,10386,10387],{"class":1073}," 9",[362,10389,1196],{"class":901},[362,10391,10392,10395,10397,10399,10401,10403,10405,10407,10409,10411,10413,10415],{"class":852,"line":1034},[362,10393,10394],{"class":860},"    mu3 ",[362,10396,395],{"class":1106},[362,10398,9980],{"class":860},[362,10400,1090],{"class":901},[362,10402,2046],{"class":860},[362,10404,6157],{"class":901},[362,10406,1094],{"class":1093},[362,10408,2221],{"class":1097},[362,10410,1094],{"class":1093},[362,10412,3228],{"class":901},[362,10414,3535],{"class":1073},[362,10416,2332],{"class":901},[362,10418,10419,10422,10424,10426,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468,10470],{"class":852,"line":1047},[362,10420,10421],{"class":860},"    S3 ",[362,10423,395],{"class":1106},[362,10425,9980],{"class":860},[362,10427,1090],{"class":901},[362,10429,2046],{"class":860},[362,10431,6157],{"class":901},[362,10433,1094],{"class":1093},[362,10435,2236],{"class":1097},[362,10437,1094],{"class":1093},[362,10439,3228],{"class":901},[362,10441,3535],{"class":1073},[362,10443,933],{"class":901},[362,10445,2370],{"class":901},[362,10447,3535],{"class":1073},[362,10449,1103],{"class":901},[362,10451,2377],{"class":1106},[362,10453,2380],{"class":860},[362,10455,902],{"class":901},[362,10457,2385],{"class":1066},[362,10459,1070],{"class":901},[362,10461,3535],{"class":1073},[362,10463,2129],{"class":901},[362,10465,1764],{"class":1106},[362,10467,1939],{"class":860},[362,10469,902],{"class":901},[362,10471,2400],{"class":905},[362,10473,10474,10477,10479,10481,10483,10486,10488,10491,10493,10495,10497,10499,10501,10503,10505,10507,10509,10511,10513,10515,10517,10519],{"class":852,"line":1053},[362,10475,10476],{"class":1066},"    plot_ellipsoid",[362,10478,1070],{"class":901},[362,10480,2778],{"class":1066},[362,10482,933],{"class":901},[362,10484,10485],{"class":1066}," mu3",[362,10487,933],{"class":901},[362,10489,10490],{"class":1066}," S3",[362,10492,933],{"class":901},[362,10494,2793],{"class":1225},[362,10496,395],{"class":1106},[362,10498,2798],{"class":1073},[362,10500,933],{"class":901},[362,10502,3912],{"class":1225},[362,10504,395],{"class":1106},[362,10506,1094],{"class":1093},[362,10508,4224],{"class":1097},[362,10510,1094],{"class":1093},[362,10512,933],{"class":901},[362,10514,3926],{"class":1225},[362,10516,395],{"class":1106},[362,10518,6125],{"class":1073},[362,10520,1050],{"class":901},[362,10522,10523,10525,10527,10529,10531,10533,10535,10537,10539,10541,10543,10545,10547,10549,10551,10554,10556],{"class":852,"line":1058},[362,10524,2778],{"class":860},[362,10526,902],{"class":901},[362,10528,3881],{"class":1066},[362,10530,4248],{"class":901},[362,10532,4251],{"class":901},[362,10534,3912],{"class":1225},[362,10536,395],{"class":1106},[362,10538,1094],{"class":1093},[362,10540,4224],{"class":1097},[362,10542,1094],{"class":1093},[362,10544,933],{"class":901},[362,10546,4924],{"class":1225},[362,10548,395],{"class":1106},[362,10550,1094],{"class":1093},[362,10552,10553],{"class":1097},"2σ predicted centroid",[362,10555,1094],{"class":1093},[362,10557,1050],{"class":901},[362,10559,10560,10562,10564,10566,10568,10570,10572,10574,10576,10578,10580,10582,10584,10586,10588,10590,10592,10594,10596,10599,10601,10603,10606,10608],{"class":852,"line":1079},[362,10561,2778],{"class":860},[362,10563,902],{"class":901},[362,10565,4315],{"class":1066},[362,10567,1070],{"class":901},[362,10569,1094],{"class":1093},[362,10571,386],{"class":1097},[362,10573,1094],{"class":1093},[362,10575,2129],{"class":901},[362,10577,4328],{"class":860},[362,10579,902],{"class":901},[362,10581,4333],{"class":1066},[362,10583,1070],{"class":901},[362,10585,1094],{"class":1093},[362,10587,4340],{"class":1097},[362,10589,1094],{"class":1093},[362,10591,2129],{"class":901},[362,10593,4328],{"class":860},[362,10595,902],{"class":901},[362,10597,10598],{"class":1066},"set_zlabel",[362,10600,1070],{"class":901},[362,10602,1094],{"class":1093},[362,10604,10605],{"class":1097},"z",[362,10607,1094],{"class":1093},[362,10609,1050],{"class":901},[362,10611,10612,10614,10616,10618,10620,10622,10625,10627],{"class":852,"line":1567},[362,10613,2778],{"class":860},[362,10615,902],{"class":901},[362,10617,4295],{"class":1066},[362,10619,1070],{"class":901},[362,10621,1094],{"class":1093},[362,10623,10624],{"class":1097},"3-D point-cloud centroid: trajectory + predictive ellipsoid",[362,10626,1094],{"class":1093},[362,10628,1050],{"class":901},[362,10630,10631,10633,10635,10637,10639,10641,10643,10645,10647,10650,10652,10654,10656,10658],{"class":852,"line":1577},[362,10632,2778],{"class":860},[362,10634,902],{"class":901},[362,10636,4353],{"class":1066},[362,10638,1070],{"class":901},[362,10640,6831],{"class":1225},[362,10642,395],{"class":1106},[362,10644,4377],{"class":1073},[362,10646,933],{"class":901},[362,10648,10649],{"class":1225}," loc",[362,10651,395],{"class":1106},[362,10653,1094],{"class":1093},[362,10655,4365],{"class":1097},[362,10657,1094],{"class":1093},[362,10659,1050],{"class":901},[362,10661,10662,10664,10666,10668,10670,10672,10674,10676],{"class":852,"line":1586},[362,10663,1082],{"class":860},[362,10665,902],{"class":901},[362,10667,4407],{"class":1066},[362,10669,4410],{"class":901},[362,10671,4413],{"class":860},[362,10673,902],{"class":901},[362,10675,4418],{"class":1066},[362,10677,1962],{"class":901},[338,10679,10680],{},[4424,10681],{"alt":847,"src":10682},"\u002F_nb\u002F46dca97add40c259.png",[810,10684,10686],{"id":10685},"_5-kernel-appearance-states","5 — Kernel \u002F appearance states",[338,10688,10689,10690,1110,10693,10696,10697,902],{},"Appearance embeddings (ReID kernels) have no velocity — there is no\n\"motion model\" for a feature vector. But a Kalman filter still helps:\nmodel the embedding as a ",[347,10691,10692],{},"random walk",[702,10694,10695],{},"F = I",", so the predict\nstep only inflates covariance) and the update becomes a principled,\nuncertainty-weighted smoother — EMA's grown-up cousin, where the\nblend rate is set by how trustworthy each observation is rather than\na fixed ",[702,10698,10699],{},"ρ",[338,10701,10702,10703,10705,10706,10709],{},"We build this directly from the ",[702,10704,783],{}," backbone with ",[702,10707,10708],{},"F = H = I",". The embedding is 2-D here so we can watch it; in practice it is\n512-D, but the recursion is identical. A slowly drifting appearance\n(lighting, pose) is tracked through heavy per-frame noise.",[842,10711,10713],{"className":844,"code":10712,"language":846,"meta":847,"style":847},"class RandomWalkKalman:\n    \"\"\"F = H = I Kalman: a smoother for no-motion (appearance) states.\"\"\"\n    def __init__(self, field, dim, q, r):\n        self.field, self.dim, self.r = field, dim, r\n        eye = torch.eye(dim)\n        self._proc = KalmanLinear(field=field, F=eye, H=eye,\n                                  Q=eye * q, R=eye * r)\n        self._upd = KalmanUpdate(field=field, cov_field=f\"{field}_cov\",\n                                 H=eye, R=eye * r)\n    def __call__(self, cs, ctx):\n        return self._proc(cs, ctx)\n    def make_update(self):\n        return self._upd\n\nT = 26\nt = torch.arange(T).float()\ntrue_emb = torch.stack([torch.cos(0.18 * t), 0.6 * torch.sin(0.18 * t)], dim=1)\ng = torch.Generator().manual_seed(13)\nemb_noise = 0.35\nmeas_emb = true_emb + emb_noise * torch.randn(T, 2, generator=g)\n\nproc = RandomWalkKalman(\"emb\", dim=2, q=0.01, r=emb_noise ** 2)\nrec_e = run_kalman(proc, meas_emb[0], torch.eye(2) * 0.3,\n                   list(meas_emb), [True] * T)\npost_e = torch.stack([r[\"post_mean\"] for r in rec_e])\n\n",[702,10714,10715,10726,10735,10767,10807,10826,10868,10897,10939,10962,10984,11006,11019,11030,11034,11043,11065,11124,11147,11157,11198,11202,11250,11293,11316],{"__ignoreMap":847},[362,10716,10717,10720,10724],{"class":852,"line":853},[362,10718,10719],{"class":1172},"class",[362,10721,10723],{"class":10722},"sbgvK"," RandomWalkKalman",[362,10725,2289],{"class":901},[362,10727,10728,10730,10733],{"class":852,"line":864},[362,10729,1202],{"class":1201},[362,10731,10732],{"class":1205},"F = H = I Kalman: a smoother for no-motion (appearance) states.",[362,10734,1209],{"class":1201},[362,10736,10737,10740,10743,10745,10749,10751,10753,10755,10757,10759,10761,10763,10765],{"class":852,"line":871},[362,10738,10739],{"class":1172},"    def",[362,10741,10742],{"class":2017}," __init__",[362,10744,1070],{"class":901},[362,10746,10748],{"class":10747},"smCYv","self",[362,10750,933],{"class":901},[362,10752,2153],{"class":1182},[362,10754,933],{"class":901},[362,10756,3506],{"class":1182},[362,10758,933],{"class":901},[362,10760,3617],{"class":1182},[362,10762,933],{"class":901},[362,10764,3165],{"class":1182},[362,10766,1196],{"class":901},[362,10768,10769,10773,10775,10777,10779,10782,10784,10787,10789,10791,10793,10795,10797,10799,10801,10803,10805],{"class":852,"line":885},[362,10770,10772],{"class":10771},"s_hVV","        self",[362,10774,902],{"class":901},[362,10776,1183],{"class":905},[362,10778,933],{"class":901},[362,10780,10781],{"class":10771}," self",[362,10783,902],{"class":901},[362,10785,10786],{"class":905},"dim",[362,10788,933],{"class":901},[362,10790,10781],{"class":10771},[362,10792,902],{"class":901},[362,10794,3803],{"class":905},[362,10796,1107],{"class":1106},[362,10798,2153],{"class":860},[362,10800,933],{"class":901},[362,10802,3506],{"class":860},[362,10804,933],{"class":901},[362,10806,3281],{"class":860},[362,10808,10809,10812,10814,10816,10818,10820,10822,10824],{"class":852,"line":893},[362,10810,10811],{"class":860},"        eye ",[362,10813,395],{"class":1106},[362,10815,2380],{"class":860},[362,10817,902],{"class":901},[362,10819,2385],{"class":1066},[362,10821,1070],{"class":901},[362,10823,10786],{"class":1066},[362,10825,1050],{"class":901},[362,10827,10828,10830,10832,10835,10837,10840,10842,10844,10846,10848,10850,10853,10855,10857,10859,10862,10864,10866],{"class":852,"line":915},[362,10829,10772],{"class":10771},[362,10831,902],{"class":901},[362,10833,10834],{"class":905},"_proc",[362,10836,1107],{"class":1106},[362,10838,10839],{"class":1066}," KalmanLinear",[362,10841,1070],{"class":901},[362,10843,1183],{"class":1225},[362,10845,395],{"class":1106},[362,10847,1183],{"class":1066},[362,10849,933],{"class":901},[362,10851,10852],{"class":1225}," F",[362,10854,395],{"class":1106},[362,10856,2385],{"class":1066},[362,10858,933],{"class":901},[362,10860,10861],{"class":1225}," H",[362,10863,395],{"class":1106},[362,10865,2385],{"class":1066},[362,10867,1031],{"class":901},[362,10869,10870,10873,10875,10878,10880,10882,10884,10887,10889,10891,10893,10895],{"class":852,"line":939},[362,10871,10872],{"class":1225},"                                  Q",[362,10874,395],{"class":1106},[362,10876,10877],{"class":1066},"eye ",[362,10879,3047],{"class":1106},[362,10881,3617],{"class":1066},[362,10883,933],{"class":901},[362,10885,10886],{"class":1225}," R",[362,10888,395],{"class":1106},[362,10890,10877],{"class":1066},[362,10892,3047],{"class":1106},[362,10894,3165],{"class":1066},[362,10896,1050],{"class":901},[362,10898,10899,10901,10903,10906,10908,10910,10912,10914,10916,10918,10920,10923,10925,10927,10929,10931,10933,10935,10937],{"class":852,"line":944},[362,10900,10772],{"class":10771},[362,10902,902],{"class":901},[362,10904,10905],{"class":905},"_upd",[362,10907,1107],{"class":1106},[362,10909,1042],{"class":1066},[362,10911,1070],{"class":901},[362,10913,1183],{"class":1225},[362,10915,395],{"class":1106},[362,10917,1183],{"class":1066},[362,10919,933],{"class":901},[362,10921,10922],{"class":1225}," cov_field",[362,10924,395],{"class":1106},[362,10926,10200],{"class":1172},[362,10928,1094],{"class":1097},[362,10930,1470],{"class":1073},[362,10932,1183],{"class":1066},[362,10934,1509],{"class":1073},[362,10936,1512],{"class":1097},[362,10938,1031],{"class":901},[362,10940,10941,10944,10946,10948,10950,10952,10954,10956,10958,10960],{"class":852,"line":977},[362,10942,10943],{"class":1225},"                                 H",[362,10945,395],{"class":1106},[362,10947,2385],{"class":1066},[362,10949,933],{"class":901},[362,10951,10886],{"class":1225},[362,10953,395],{"class":1106},[362,10955,10877],{"class":1066},[362,10957,3047],{"class":1106},[362,10959,3165],{"class":1066},[362,10961,1050],{"class":901},[362,10963,10964,10966,10969,10971,10973,10975,10978,10980,10982],{"class":852,"line":994},[362,10965,10739],{"class":1172},[362,10967,10968],{"class":2017}," __call__",[362,10970,1070],{"class":901},[362,10972,10748],{"class":10747},[362,10974,933],{"class":901},[362,10976,10977],{"class":1182}," cs",[362,10979,933],{"class":901},[362,10981,2126],{"class":1182},[362,10983,1196],{"class":901},[362,10985,10986,10989,10991,10993,10995,10997,11000,11002,11004],{"class":852,"line":1015},[362,10987,10988],{"class":856},"        return",[362,10990,10781],{"class":10771},[362,10992,902],{"class":901},[362,10994,10834],{"class":1066},[362,10996,1070],{"class":901},[362,10998,10999],{"class":1066},"cs",[362,11001,933],{"class":901},[362,11003,2126],{"class":1066},[362,11005,1050],{"class":901},[362,11007,11008,11010,11013,11015,11017],{"class":852,"line":1034},[362,11009,10739],{"class":1172},[362,11011,11012],{"class":1176}," make_update",[362,11014,1070],{"class":901},[362,11016,10748],{"class":10747},[362,11018,1196],{"class":901},[362,11020,11021,11023,11025,11027],{"class":852,"line":1047},[362,11022,10988],{"class":856},[362,11024,10781],{"class":10771},[362,11026,902],{"class":901},[362,11028,11029],{"class":905},"_upd\n",[362,11031,11032],{"class":852,"line":1053},[362,11033,868],{"emptyLinePlaceholder":867},[362,11035,11036,11038,11040],{"class":852,"line":1058},[362,11037,3420],{"class":860},[362,11039,395],{"class":1106},[362,11041,11042],{"class":1073}," 26\n",[362,11044,11045,11047,11049,11051,11053,11055,11057,11059,11061,11063],{"class":852,"line":1079},[362,11046,3430],{"class":860},[362,11048,395],{"class":1106},[362,11050,2380],{"class":860},[362,11052,902],{"class":901},[362,11054,3439],{"class":1066},[362,11056,1070],{"class":901},[362,11058,3444],{"class":1066},[362,11060,1489],{"class":901},[362,11062,1492],{"class":1066},[362,11064,1962],{"class":901},[362,11066,11067,11070,11072,11074,11076,11078,11080,11082,11084,11086,11088,11090,11092,11094,11096,11098,11100,11102,11104,11106,11108,11110,11112,11114,11116,11118,11120,11122],{"class":852,"line":1567},[362,11068,11069],{"class":860},"true_emb ",[362,11071,395],{"class":1106},[362,11073,2380],{"class":860},[362,11075,902],{"class":901},[362,11077,3464],{"class":1066},[362,11079,1238],{"class":901},[362,11081,1061],{"class":1066},[362,11083,902],{"class":901},[362,11085,9239],{"class":1066},[362,11087,1070],{"class":901},[362,11089,6432],{"class":1073},[362,11091,1764],{"class":1106},[362,11093,3473],{"class":1066},[362,11095,3771],{"class":901},[362,11097,9661],{"class":1073},[362,11099,1764],{"class":1106},[362,11101,2380],{"class":1066},[362,11103,902],{"class":901},[362,11105,9253],{"class":1066},[362,11107,1070],{"class":901},[362,11109,6432],{"class":1073},[362,11111,1764],{"class":1106},[362,11113,3473],{"class":1066},[362,11115,1291],{"class":901},[362,11117,3506],{"class":1225},[362,11119,395],{"class":1106},[362,11121,1241],{"class":1073},[362,11123,1050],{"class":901},[362,11125,11126,11128,11130,11132,11134,11136,11138,11140,11142,11145],{"class":852,"line":1577},[362,11127,3517],{"class":860},[362,11129,395],{"class":1106},[362,11131,2380],{"class":860},[362,11133,902],{"class":901},[362,11135,3526],{"class":1066},[362,11137,2834],{"class":901},[362,11139,1067],{"class":1066},[362,11141,1070],{"class":901},[362,11143,11144],{"class":1073},"13",[362,11146,1050],{"class":901},[362,11148,11149,11152,11154],{"class":852,"line":1586},[362,11150,11151],{"class":860},"emb_noise ",[362,11153,395],{"class":1106},[362,11155,11156],{"class":1073}," 0.35\n",[362,11158,11159,11162,11164,11167,11169,11172,11174,11176,11178,11180,11182,11184,11186,11188,11190,11192,11194,11196],{"class":852,"line":1625},[362,11160,11161],{"class":860},"meas_emb ",[362,11163,395],{"class":1106},[362,11165,11166],{"class":860}," true_emb ",[362,11168,525],{"class":1106},[362,11170,11171],{"class":860}," emb_noise ",[362,11173,3047],{"class":1106},[362,11175,2380],{"class":860},[362,11177,902],{"class":901},[362,11179,3571],{"class":1066},[362,11181,1070],{"class":901},[362,11183,3444],{"class":1066},[362,11185,933],{"class":901},[362,11187,3501],{"class":1073},[362,11189,933],{"class":901},[362,11191,3584],{"class":1225},[362,11193,395],{"class":1106},[362,11195,3589],{"class":1066},[362,11197,1050],{"class":901},[362,11199,11200],{"class":852,"line":1657},[362,11201,868],{"emptyLinePlaceholder":867},[362,11203,11204,11206,11208,11210,11212,11214,11217,11219,11221,11223,11225,11227,11229,11231,11233,11236,11238,11240,11242,11244,11246,11248],{"class":852,"line":1689},[362,11205,3600],{"class":860},[362,11207,395],{"class":1106},[362,11209,10723],{"class":1066},[362,11211,1070],{"class":901},[362,11213,1094],{"class":1093},[362,11215,11216],{"class":1097},"emb",[362,11218,1094],{"class":1093},[362,11220,933],{"class":901},[362,11222,3506],{"class":1225},[362,11224,395],{"class":1106},[362,11226,3039],{"class":1073},[362,11228,933],{"class":901},[362,11230,3617],{"class":1225},[362,11232,395],{"class":1106},[362,11234,11235],{"class":1073},"0.01",[362,11237,933],{"class":901},[362,11239,3165],{"class":1225},[362,11241,395],{"class":1106},[362,11243,11151],{"class":1066},[362,11245,3633],{"class":1106},[362,11247,3501],{"class":1073},[362,11249,1050],{"class":901},[362,11251,11252,11255,11257,11259,11261,11263,11265,11268,11270,11272,11274,11276,11278,11280,11282,11284,11286,11288,11291],{"class":852,"line":1709},[362,11253,11254],{"class":860},"rec_e ",[362,11256,395],{"class":1106},[362,11258,1734],{"class":1066},[362,11260,1070],{"class":901},[362,11262,1739],{"class":1066},[362,11264,933],{"class":901},[362,11266,11267],{"class":1066}," meas_emb",[362,11269,1090],{"class":901},[362,11271,1074],{"class":1073},[362,11273,1244],{"class":901},[362,11275,2380],{"class":1066},[362,11277,902],{"class":901},[362,11279,2385],{"class":1066},[362,11281,1070],{"class":901},[362,11283,3039],{"class":1073},[362,11285,2129],{"class":901},[362,11287,1764],{"class":1106},[362,11289,11290],{"class":1073}," 0.3",[362,11292,1031],{"class":901},[362,11294,11295,11297,11299,11302,11304,11306,11308,11310,11312,11314],{"class":852,"line":1719},[362,11296,7961],{"class":1277},[362,11298,1070],{"class":901},[362,11300,11301],{"class":1066},"meas_emb",[362,11303,3771],{"class":901},[362,11305,3774],{"class":901},[362,11307,2929],{"class":1787},[362,11309,1103],{"class":901},[362,11311,1764],{"class":1106},[362,11313,3783],{"class":1066},[362,11315,1050],{"class":901},[362,11317,11318,11321,11323,11325,11327,11329,11331,11333,11335,11337,11339,11341,11343,11345,11347,11349,11352],{"class":852,"line":1724},[362,11319,11320],{"class":860},"post_e ",[362,11322,395],{"class":1106},[362,11324,2380],{"class":860},[362,11326,902],{"class":901},[362,11328,3464],{"class":1066},[362,11330,1238],{"class":901},[362,11332,3803],{"class":1066},[362,11334,1090],{"class":901},[362,11336,1094],{"class":1093},[362,11338,2652],{"class":1097},[362,11340,1094],{"class":1093},[362,11342,1103],{"class":901},[362,11344,3820],{"class":856},[362,11346,3823],{"class":1066},[362,11348,2014],{"class":856},[362,11350,11351],{"class":1066}," rec_e",[362,11353,2605],{"class":901},[842,11355,11357],{"className":844,"code":11356,"language":846,"meta":847,"style":847},"fig, ax = plt.subplots(figsize=(7, 6))\nax.plot(true_emb[:, 0], true_emb[:, 1], \"-\", color=\"0.55\", lw=2,\n        label=\"true appearance drift\")\nax.scatter(meas_emb[:, 0], meas_emb[:, 1], marker=\"x\", color=\"tab:red\",\n           s=35, alpha=0.7, label=\"noisy embeddings\")\nax.plot(post_e[:, 0], post_e[:, 1], \"o-\", color=\"tab:blue\", ms=3,\n        label=\"Kalman-smoothed embedding\")\nfor k in range(2, T, 5):\n    mu, S = predictive_xy(rec_e[k], proc.r)\n    cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=1.2)\nax.plot([], [], color=\"tab:green\", lw=1.2, label=\"2σ predicted embedding\")\nax.set_title(\"Appearance space: a random-walk Kalman smooths a drifting kernel\")\nax.set_xlabel(\"embedding dim 0\"); ax.set_ylabel(\"embedding dim 1\")\nax.legend(fontsize=8); ax.set_aspect(\"equal\"); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,11358,11359,11391,11447,11462,11512,11546,11602,11617,11641,11672,11718,11763,11782,11818,11868],{"__ignoreMap":847},[362,11360,11361,11363,11365,11367,11369,11371,11373,11375,11377,11379,11381,11383,11385,11387,11389],{"class":852,"line":853},[362,11362,3839],{"class":860},[362,11364,933],{"class":901},[362,11366,3844],{"class":860},[362,11368,395],{"class":1106},[362,11370,3335],{"class":860},[362,11372,902],{"class":901},[362,11374,3853],{"class":1066},[362,11376,1070],{"class":901},[362,11378,3858],{"class":1225},[362,11380,395],{"class":1106},[362,11382,1070],{"class":901},[362,11384,1113],{"class":1073},[362,11386,933],{"class":901},[362,11388,4477],{"class":1073},[362,11390,3145],{"class":901},[362,11392,11393,11395,11397,11399,11401,11404,11406,11408,11410,11413,11415,11417,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437,11439,11441,11443,11445],{"class":852,"line":864},[362,11394,2778],{"class":860},[362,11396,902],{"class":901},[362,11398,3881],{"class":1066},[362,11400,1070],{"class":901},[362,11402,11403],{"class":1066},"true_emb",[362,11405,2956],{"class":901},[362,11407,1607],{"class":1073},[362,11409,1244],{"class":901},[362,11411,11412],{"class":1066}," true_emb",[362,11414,2956],{"class":901},[362,11416,3379],{"class":1073},[362,11418,1244],{"class":901},[362,11420,2233],{"class":1093},[362,11422,2416],{"class":1097},[362,11424,1094],{"class":1093},[362,11426,933],{"class":901},[362,11428,3912],{"class":1225},[362,11430,395],{"class":1106},[362,11432,1094],{"class":1093},[362,11434,3919],{"class":1097},[362,11436,1094],{"class":1093},[362,11438,933],{"class":901},[362,11440,3926],{"class":1225},[362,11442,395],{"class":1106},[362,11444,3039],{"class":1073},[362,11446,1031],{"class":901},[362,11448,11449,11451,11453,11455,11458,11460],{"class":852,"line":871},[362,11450,3937],{"class":1225},[362,11452,395],{"class":1106},[362,11454,1094],{"class":1093},[362,11456,11457],{"class":1097},"true appearance drift",[362,11459,1094],{"class":1093},[362,11461,1050],{"class":901},[362,11463,11464,11466,11468,11470,11472,11474,11476,11478,11480,11482,11484,11486,11488,11490,11492,11494,11496,11498,11500,11502,11504,11506,11508,11510],{"class":852,"line":885},[362,11465,2778],{"class":860},[362,11467,902],{"class":901},[362,11469,3966],{"class":1066},[362,11471,1070],{"class":901},[362,11473,11301],{"class":1066},[362,11475,2956],{"class":901},[362,11477,1607],{"class":1073},[362,11479,1244],{"class":901},[362,11481,11267],{"class":1066},[362,11483,2956],{"class":901},[362,11485,3379],{"class":1073},[362,11487,1244],{"class":901},[362,11489,3988],{"class":1225},[362,11491,395],{"class":1106},[362,11493,1094],{"class":1093},[362,11495,386],{"class":1097},[362,11497,1094],{"class":1093},[362,11499,933],{"class":901},[362,11501,3912],{"class":1225},[362,11503,395],{"class":1106},[362,11505,1094],{"class":1093},[362,11507,4007],{"class":1097},[362,11509,1094],{"class":1093},[362,11511,1031],{"class":901},[362,11513,11514,11517,11519,11522,11524,11526,11528,11531,11533,11535,11537,11539,11542,11544],{"class":852,"line":893},[362,11515,11516],{"class":1225},"           s",[362,11518,395],{"class":1106},[362,11520,11521],{"class":1073},"35",[362,11523,933],{"class":901},[362,11525,6427],{"class":1225},[362,11527,395],{"class":1106},[362,11529,11530],{"class":1073},"0.7",[362,11532,933],{"class":901},[362,11534,4924],{"class":1225},[362,11536,395],{"class":1106},[362,11538,1094],{"class":1093},[362,11540,11541],{"class":1097},"noisy embeddings",[362,11543,1094],{"class":1093},[362,11545,1050],{"class":901},[362,11547,11548,11550,11552,11554,11556,11559,11561,11563,11565,11568,11570,11572,11574,11576,11578,11580,11582,11584,11586,11588,11590,11592,11594,11596,11598,11600],{"class":852,"line":915},[362,11549,2778],{"class":860},[362,11551,902],{"class":901},[362,11553,3881],{"class":1066},[362,11555,1070],{"class":901},[362,11557,11558],{"class":1066},"post_e",[362,11560,2956],{"class":901},[362,11562,1607],{"class":1073},[362,11564,1244],{"class":901},[362,11566,11567],{"class":1066}," post_e",[362,11569,2956],{"class":901},[362,11571,3379],{"class":1073},[362,11573,1244],{"class":901},[362,11575,2233],{"class":1093},[362,11577,4078],{"class":1097},[362,11579,1094],{"class":1093},[362,11581,933],{"class":901},[362,11583,3912],{"class":1225},[362,11585,395],{"class":1106},[362,11587,1094],{"class":1093},[362,11589,4091],{"class":1097},[362,11591,1094],{"class":1093},[362,11593,933],{"class":901},[362,11595,4098],{"class":1225},[362,11597,395],{"class":1106},[362,11599,3535],{"class":1073},[362,11601,1031],{"class":901},[362,11603,11604,11606,11608,11610,11613,11615],{"class":852,"line":939},[362,11605,3937],{"class":1225},[362,11607,395],{"class":1106},[362,11609,1094],{"class":1093},[362,11611,11612],{"class":1097},"Kalman-smoothed embedding",[362,11614,1094],{"class":1093},[362,11616,1050],{"class":901},[362,11618,11619,11621,11623,11625,11627,11629,11631,11633,11635,11637,11639],{"class":852,"line":944},[362,11620,4133],{"class":856},[362,11622,3360],{"class":860},[362,11624,2014],{"class":856},[362,11626,4140],{"class":2017},[362,11628,1070],{"class":901},[362,11630,3039],{"class":1073},[362,11632,933],{"class":901},[362,11634,3783],{"class":1066},[362,11636,933],{"class":901},[362,11638,3870],{"class":1073},[362,11640,1196],{"class":901},[362,11642,11643,11645,11647,11649,11651,11653,11655,11658,11660,11662,11664,11666,11668,11670],{"class":852,"line":977},[362,11644,4159],{"class":860},[362,11646,933],{"class":901},[362,11648,4164],{"class":860},[362,11650,395],{"class":1106},[362,11652,3156],{"class":1066},[362,11654,1070],{"class":901},[362,11656,11657],{"class":1066},"rec_e",[362,11659,1090],{"class":901},[362,11661,2046],{"class":1066},[362,11663,1244],{"class":901},[362,11665,1939],{"class":1066},[362,11667,902],{"class":901},[362,11669,3803],{"class":905},[362,11671,1050],{"class":901},[362,11673,11674,11676,11678,11680,11682,11684,11686,11688,11690,11692,11694,11696,11698,11700,11702,11704,11706,11708,11710,11712,11714,11716],{"class":852,"line":994},[362,11675,4191],{"class":1066},[362,11677,1070],{"class":901},[362,11679,2778],{"class":1066},[362,11681,933],{"class":901},[362,11683,3288],{"class":1066},[362,11685,933],{"class":901},[362,11687,4204],{"class":1066},[362,11689,933],{"class":901},[362,11691,2793],{"class":1225},[362,11693,395],{"class":1106},[362,11695,2798],{"class":1073},[362,11697,933],{"class":901},[362,11699,4217],{"class":1225},[362,11701,395],{"class":1106},[362,11703,1094],{"class":1093},[362,11705,4224],{"class":1097},[362,11707,1094],{"class":1093},[362,11709,933],{"class":901},[362,11711,3926],{"class":1225},[362,11713,395],{"class":1106},[362,11715,6510],{"class":1073},[362,11717,1050],{"class":901},[362,11719,11720,11722,11724,11726,11728,11730,11732,11734,11736,11738,11740,11742,11744,11746,11748,11750,11752,11754,11756,11759,11761],{"class":852,"line":1015},[362,11721,2778],{"class":860},[362,11723,902],{"class":901},[362,11725,3881],{"class":1066},[362,11727,4248],{"class":901},[362,11729,4251],{"class":901},[362,11731,3912],{"class":1225},[362,11733,395],{"class":1106},[362,11735,1094],{"class":1093},[362,11737,4224],{"class":1097},[362,11739,1094],{"class":1093},[362,11741,933],{"class":901},[362,11743,3926],{"class":1225},[362,11745,395],{"class":1106},[362,11747,6510],{"class":1073},[362,11749,933],{"class":901},[362,11751,4924],{"class":1225},[362,11753,395],{"class":1106},[362,11755,1094],{"class":1093},[362,11757,11758],{"class":1097},"2σ predicted embedding",[362,11760,1094],{"class":1093},[362,11762,1050],{"class":901},[362,11764,11765,11767,11769,11771,11773,11775,11778,11780],{"class":852,"line":1034},[362,11766,2778],{"class":860},[362,11768,902],{"class":901},[362,11770,4295],{"class":1066},[362,11772,1070],{"class":901},[362,11774,1094],{"class":1093},[362,11776,11777],{"class":1097},"Appearance space: a random-walk Kalman smooths a drifting kernel",[362,11779,1094],{"class":1093},[362,11781,1050],{"class":901},[362,11783,11784,11786,11788,11790,11792,11794,11797,11799,11801,11803,11805,11807,11809,11811,11814,11816],{"class":852,"line":1047},[362,11785,2778],{"class":860},[362,11787,902],{"class":901},[362,11789,4315],{"class":1066},[362,11791,1070],{"class":901},[362,11793,1094],{"class":1093},[362,11795,11796],{"class":1097},"embedding dim 0",[362,11798,1094],{"class":1093},[362,11800,2129],{"class":901},[362,11802,4328],{"class":860},[362,11804,902],{"class":901},[362,11806,4333],{"class":1066},[362,11808,1070],{"class":901},[362,11810,1094],{"class":1093},[362,11812,11813],{"class":1097},"embedding dim 1",[362,11815,1094],{"class":1093},[362,11817,1050],{"class":901},[362,11819,11820,11822,11824,11826,11828,11830,11832,11834,11836,11838,11840,11842,11844,11846,11848,11850,11852,11854,11856,11858,11860,11862,11864,11866],{"class":852,"line":1053},[362,11821,2778],{"class":860},[362,11823,902],{"class":901},[362,11825,4353],{"class":1066},[362,11827,1070],{"class":901},[362,11829,6831],{"class":1225},[362,11831,395],{"class":1106},[362,11833,4377],{"class":1073},[362,11835,2129],{"class":901},[362,11837,4328],{"class":860},[362,11839,902],{"class":901},[362,11841,6756],{"class":1066},[362,11843,1070],{"class":901},[362,11845,1094],{"class":1093},[362,11847,6763],{"class":1097},[362,11849,1094],{"class":1093},[362,11851,2129],{"class":901},[362,11853,4328],{"class":860},[362,11855,902],{"class":901},[362,11857,4386],{"class":1066},[362,11859,1070],{"class":901},[362,11861,4391],{"class":1225},[362,11863,395],{"class":1106},[362,11865,4396],{"class":1073},[362,11867,1050],{"class":901},[362,11869,11870,11872,11874,11876,11878,11880,11882,11884],{"class":852,"line":1058},[362,11871,1082],{"class":860},[362,11873,902],{"class":901},[362,11875,4407],{"class":1066},[362,11877,4410],{"class":901},[362,11879,4413],{"class":860},[362,11881,902],{"class":901},[362,11883,4418],{"class":1066},[362,11885,1962],{"class":901},[338,11887,11888],{},[4424,11889],{"alt":847,"src":11890},"\u002F_nb\u002F001b6900f96725be.png",[338,11892,11893,11894,11897],{},"A caveat worth stating: a linear-Gaussian filter lives in flat\nEuclidean space, but ReID embeddings usually live on the unit sphere\n(cosine similarity). Smoothing then nudging back onto the sphere\n(re-normalising) is a pragmatic hack, not exact inference — which is\nwhy appearance is the state type where Kalman is ",[342,11895,11896],{},"least"," natural, and\na fixed-rate EMA is often preferred. Use it when the embedding really\ndoes wander slowly and you want uncertainty-aware blending.",[810,11899,11901],{"id":11900},"_6-complex-examples-where-it-works-where-it-breaks","6 — Complex examples: where it works, where it breaks",[338,11903,11904,11905,11908,11909,11912,11913,11915,11916,11919],{},"The Kalman filter is optimal only when its assumptions hold: a\n",[342,11906,11907],{},"linear"," motion model, ",[342,11910,11911],{},"Gaussian"," noise, and noise covariances ",[702,11914,528],{},"\n(process) and ",[702,11917,11918],{},"R"," (measurement) that actually match reality. Tracking\nviolates all three routinely. This section makes the failure modes\nconcrete — each is a situation you will meet in a real video.",[1122,11921,11923],{"id":11922},"_6a-success-heavy-noise-steady-motion","6a — Success: heavy noise, steady motion",[338,11925,11926],{},"The case the filter was made for. Measurement noise is large, but the\nmotion is genuinely constant-velocity, so averaging over time wins:\nthe estimate is far smoother and closer to truth than the raw\ndetections. This is the baseline \"it just works.\"",[842,11928,11930],{"className":844,"code":11929,"language":846,"meta":847,"style":847},"T = 30\nt = torch.arange(T).float()\ntruth = torch.stack([1.5 * t, 0.8 * t], dim=1)\ng = torch.Generator().manual_seed(21)\nnoisy = truth + 3.0 * torch.randn(T, 2, generator=g)\nproc = KalmanCentroid2D(\"centroid\", q=0.02, r=9.0)\nm0 = torch.tensor([float(noisy[0, 0]), float(noisy[0, 1]), 1.5, 0.8])\nrec = run_kalman(proc, m0, torch.eye(4) * 5.0, list(noisy), [True] * T)\nest = torch.stack([r[\"post_mean\"][:2] for r in rec])\nrms_raw = (noisy - truth).pow(2).sum(1).mean().sqrt()\nrms_kf = (est - truth).pow(2).sum(1).mean().sqrt()\n\nfig, ax = plt.subplots(figsize=(8, 4))\nax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2, label=\"truth\")\nax.scatter(noisy[:, 0], noisy[:, 1], marker=\"x\", color=\"tab:red\", s=30,\n           alpha=0.6, label=f\"detections (RMS {rms_raw:.2f})\")\nax.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=3,\n        label=f\"Kalman (RMS {rms_kf:.2f})\")\nax.set_title(\"Success: the filter denoises a constant-velocity track\")\nax.legend(fontsize=8); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\nprint(f\"raw detection RMS error: {rms_raw:.2f}   Kalman RMS error: {rms_kf:.2f}\")\n\n",[702,11931,11932,11941,11963,12003,12026,12066,12102,12159,12216,12257,12301,12342,12346,12378,12444,12503,12538,12594,12618,12637,12671,12689],{"__ignoreMap":847},[362,11933,11934,11936,11938],{"class":852,"line":853},[362,11935,3420],{"class":860},[362,11937,395],{"class":1106},[362,11939,11940],{"class":1073}," 30\n",[362,11942,11943,11945,11947,11949,11951,11953,11955,11957,11959,11961],{"class":852,"line":864},[362,11944,3430],{"class":860},[362,11946,395],{"class":1106},[362,11948,2380],{"class":860},[362,11950,902],{"class":901},[362,11952,3439],{"class":1066},[362,11954,1070],{"class":901},[362,11956,3444],{"class":1066},[362,11958,1489],{"class":901},[362,11960,1492],{"class":1066},[362,11962,1962],{"class":901},[362,11964,11965,11968,11970,11972,11974,11976,11978,11980,11982,11984,11986,11989,11991,11993,11995,11997,11999,12001],{"class":852,"line":871},[362,11966,11967],{"class":860},"truth ",[362,11969,395],{"class":1106},[362,11971,2380],{"class":860},[362,11973,902],{"class":901},[362,11975,3464],{"class":1066},[362,11977,1238],{"class":901},[362,11979,6184],{"class":1073},[362,11981,1764],{"class":1106},[362,11983,3473],{"class":1066},[362,11985,933],{"class":901},[362,11987,11988],{"class":1073}," 0.8",[362,11990,1764],{"class":1106},[362,11992,3473],{"class":1066},[362,11994,1244],{"class":901},[362,11996,3506],{"class":1225},[362,11998,395],{"class":1106},[362,12000,1241],{"class":1073},[362,12002,1050],{"class":901},[362,12004,12005,12007,12009,12011,12013,12015,12017,12019,12021,12024],{"class":852,"line":885},[362,12006,3517],{"class":860},[362,12008,395],{"class":1106},[362,12010,2380],{"class":860},[362,12012,902],{"class":901},[362,12014,3526],{"class":1066},[362,12016,2834],{"class":901},[362,12018,1067],{"class":1066},[362,12020,1070],{"class":901},[362,12022,12023],{"class":1073},"21",[362,12025,1050],{"class":901},[362,12027,12028,12031,12033,12036,12038,12040,12042,12044,12046,12048,12050,12052,12054,12056,12058,12060,12062,12064],{"class":852,"line":893},[362,12029,12030],{"class":860},"noisy ",[362,12032,395],{"class":1106},[362,12034,12035],{"class":860}," truth ",[362,12037,525],{"class":1106},[362,12039,4770],{"class":1073},[362,12041,1764],{"class":1106},[362,12043,2380],{"class":860},[362,12045,902],{"class":901},[362,12047,3571],{"class":1066},[362,12049,1070],{"class":901},[362,12051,3444],{"class":1066},[362,12053,933],{"class":901},[362,12055,3501],{"class":1073},[362,12057,933],{"class":901},[362,12059,3584],{"class":1225},[362,12061,395],{"class":1106},[362,12063,3589],{"class":1066},[362,12065,1050],{"class":901},[362,12067,12068,12070,12072,12074,12076,12078,12080,12082,12084,12086,12088,12091,12093,12095,12097,12100],{"class":852,"line":915},[362,12069,3600],{"class":860},[362,12071,395],{"class":1106},[362,12073,1023],{"class":1066},[362,12075,1070],{"class":901},[362,12077,1094],{"class":1093},[362,12079,294],{"class":1097},[362,12081,1094],{"class":1093},[362,12083,933],{"class":901},[362,12085,3617],{"class":1225},[362,12087,395],{"class":1106},[362,12089,12090],{"class":1073},"0.02",[362,12092,933],{"class":901},[362,12094,3165],{"class":1225},[362,12096,395],{"class":1106},[362,12098,12099],{"class":1073},"9.0",[362,12101,1050],{"class":901},[362,12103,12104,12107,12109,12111,12113,12115,12117,12119,12121,12124,12126,12128,12130,12132,12134,12136,12138,12140,12142,12144,12146,12148,12150,12153,12155,12157],{"class":852,"line":939},[362,12105,12106],{"class":860},"m0 ",[362,12108,395],{"class":1106},[362,12110,2380],{"class":860},[362,12112,902],{"class":901},[362,12114,1235],{"class":1066},[362,12116,1238],{"class":901},[362,12118,1492],{"class":1277},[362,12120,1070],{"class":901},[362,12122,12123],{"class":1066},"noisy",[362,12125,1090],{"class":901},[362,12127,1074],{"class":1073},[362,12129,933],{"class":901},[362,12131,1607],{"class":1073},[362,12133,3005],{"class":901},[362,12135,2036],{"class":1277},[362,12137,1070],{"class":901},[362,12139,12123],{"class":1066},[362,12141,1090],{"class":901},[362,12143,1074],{"class":1073},[362,12145,933],{"class":901},[362,12147,3379],{"class":1073},[362,12149,3005],{"class":901},[362,12151,12152],{"class":1073}," 1.5",[362,12154,933],{"class":901},[362,12156,11988],{"class":1073},[362,12158,2605],{"class":901},[362,12160,12161,12163,12165,12167,12169,12171,12173,12176,12178,12180,12182,12184,12186,12188,12190,12192,12194,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214],{"class":852,"line":944},[362,12162,3743],{"class":860},[362,12164,395],{"class":1106},[362,12166,1734],{"class":1066},[362,12168,1070],{"class":901},[362,12170,1739],{"class":1066},[362,12172,933],{"class":901},[362,12174,12175],{"class":1066}," m0",[362,12177,933],{"class":901},[362,12179,2380],{"class":1066},[362,12181,902],{"class":901},[362,12183,2385],{"class":1066},[362,12185,1070],{"class":901},[362,12187,4103],{"class":1073},[362,12189,2129],{"class":901},[362,12191,1764],{"class":1106},[362,12193,9591],{"class":1073},[362,12195,933],{"class":901},[362,12197,3764],{"class":1277},[362,12199,1070],{"class":901},[362,12201,12123],{"class":1066},[362,12203,3771],{"class":901},[362,12205,3774],{"class":901},[362,12207,2929],{"class":1787},[362,12209,1103],{"class":901},[362,12211,1764],{"class":1106},[362,12213,3783],{"class":1066},[362,12215,1050],{"class":901},[362,12217,12218,12221,12223,12225,12227,12229,12231,12233,12235,12237,12239,12241,12243,12245,12247,12249,12251,12253,12255],{"class":852,"line":977},[362,12219,12220],{"class":860},"est ",[362,12222,395],{"class":1106},[362,12224,2380],{"class":860},[362,12226,902],{"class":901},[362,12228,3464],{"class":1066},[362,12230,1238],{"class":901},[362,12232,3803],{"class":1066},[362,12234,1090],{"class":901},[362,12236,1094],{"class":1093},[362,12238,2652],{"class":1097},[362,12240,1094],{"class":1093},[362,12242,3228],{"class":901},[362,12244,3039],{"class":1073},[362,12246,1103],{"class":901},[362,12248,3820],{"class":856},[362,12250,3823],{"class":1066},[362,12252,2014],{"class":856},[362,12254,2517],{"class":1066},[362,12256,2605],{"class":901},[362,12258,12259,12262,12264,12266,12268,12270,12273,12275,12278,12280,12282,12284,12287,12289,12291,12293,12295,12297,12299],{"class":852,"line":994},[362,12260,12261],{"class":860},"rms_raw ",[362,12263,395],{"class":1106},[362,12265,1110],{"class":901},[362,12267,12030],{"class":860},[362,12269,2416],{"class":1106},[362,12271,12272],{"class":860}," truth",[362,12274,1489],{"class":901},[362,12276,12277],{"class":1066},"pow",[362,12279,1070],{"class":901},[362,12281,3039],{"class":1073},[362,12283,1489],{"class":901},[362,12285,12286],{"class":1066},"sum",[362,12288,1070],{"class":901},[362,12290,1241],{"class":1073},[362,12292,1489],{"class":901},[362,12294,7583],{"class":1066},[362,12296,2834],{"class":901},[362,12298,3054],{"class":1066},[362,12300,1962],{"class":901},[362,12302,12303,12306,12308,12310,12312,12314,12316,12318,12320,12322,12324,12326,12328,12330,12332,12334,12336,12338,12340],{"class":852,"line":1015},[362,12304,12305],{"class":860},"rms_kf ",[362,12307,395],{"class":1106},[362,12309,1110],{"class":901},[362,12311,12220],{"class":860},[362,12313,2416],{"class":1106},[362,12315,12272],{"class":860},[362,12317,1489],{"class":901},[362,12319,12277],{"class":1066},[362,12321,1070],{"class":901},[362,12323,3039],{"class":1073},[362,12325,1489],{"class":901},[362,12327,12286],{"class":1066},[362,12329,1070],{"class":901},[362,12331,1241],{"class":1073},[362,12333,1489],{"class":901},[362,12335,7583],{"class":1066},[362,12337,2834],{"class":901},[362,12339,3054],{"class":1066},[362,12341,1962],{"class":901},[362,12343,12344],{"class":852,"line":1034},[362,12345,868],{"emptyLinePlaceholder":867},[362,12347,12348,12350,12352,12354,12356,12358,12360,12362,12364,12366,12368,12370,12372,12374,12376],{"class":852,"line":1047},[362,12349,3839],{"class":860},[362,12351,933],{"class":901},[362,12353,3844],{"class":860},[362,12355,395],{"class":1106},[362,12357,3335],{"class":860},[362,12359,902],{"class":901},[362,12361,3853],{"class":1066},[362,12363,1070],{"class":901},[362,12365,3858],{"class":1225},[362,12367,395],{"class":1106},[362,12369,1070],{"class":901},[362,12371,4377],{"class":1073},[362,12373,933],{"class":901},[362,12375,1118],{"class":1073},[362,12377,3145],{"class":901},[362,12379,12380,12382,12384,12386,12388,12390,12392,12394,12396,12398,12400,12402,12404,12406,12408,12410,12412,12414,12416,12418,12420,12422,12424,12426,12428,12430,12432,12434,12436,12438,12440,12442],{"class":852,"line":1053},[362,12381,2778],{"class":860},[362,12383,902],{"class":901},[362,12385,3881],{"class":1066},[362,12387,1070],{"class":901},[362,12389,7080],{"class":1066},[362,12391,2956],{"class":901},[362,12393,1607],{"class":1073},[362,12395,1244],{"class":901},[362,12397,12272],{"class":1066},[362,12399,2956],{"class":901},[362,12401,3379],{"class":1073},[362,12403,1244],{"class":901},[362,12405,2233],{"class":1093},[362,12407,2416],{"class":1097},[362,12409,1094],{"class":1093},[362,12411,933],{"class":901},[362,12413,3912],{"class":1225},[362,12415,395],{"class":1106},[362,12417,1094],{"class":1093},[362,12419,3919],{"class":1097},[362,12421,1094],{"class":1093},[362,12423,933],{"class":901},[362,12425,3926],{"class":1225},[362,12427,395],{"class":1106},[362,12429,3039],{"class":1073},[362,12431,933],{"class":901},[362,12433,4924],{"class":1225},[362,12435,395],{"class":1106},[362,12437,1094],{"class":1093},[362,12439,7080],{"class":1097},[362,12441,1094],{"class":1093},[362,12443,1050],{"class":901},[362,12445,12446,12448,12450,12452,12454,12456,12458,12460,12462,12465,12467,12469,12471,12473,12475,12477,12479,12481,12483,12485,12487,12489,12491,12493,12495,12497,12499,12501],{"class":852,"line":1058},[362,12447,2778],{"class":860},[362,12449,902],{"class":901},[362,12451,3966],{"class":1066},[362,12453,1070],{"class":901},[362,12455,12123],{"class":1066},[362,12457,2956],{"class":901},[362,12459,1607],{"class":1073},[362,12461,1244],{"class":901},[362,12463,12464],{"class":1066}," noisy",[362,12466,2956],{"class":901},[362,12468,3379],{"class":1073},[362,12470,1244],{"class":901},[362,12472,3988],{"class":1225},[362,12474,395],{"class":1106},[362,12476,1094],{"class":1093},[362,12478,386],{"class":1097},[362,12480,1094],{"class":1093},[362,12482,933],{"class":901},[362,12484,3912],{"class":1225},[362,12486,395],{"class":1106},[362,12488,1094],{"class":1093},[362,12490,4007],{"class":1097},[362,12492,1094],{"class":1093},[362,12494,933],{"class":901},[362,12496,4014],{"class":1225},[362,12498,395],{"class":1106},[362,12500,7137],{"class":1073},[362,12502,1031],{"class":901},[362,12504,12505,12508,12510,12512,12514,12516,12518,12520,12523,12525,12528,12531,12533,12536],{"class":852,"line":1079},[362,12506,12507],{"class":1225},"           alpha",[362,12509,395],{"class":1106},[362,12511,6125],{"class":1073},[362,12513,933],{"class":901},[362,12515,4924],{"class":1225},[362,12517,395],{"class":1106},[362,12519,10200],{"class":1172},[362,12521,12522],{"class":1097},"\"detections (RMS ",[362,12524,1470],{"class":1073},[362,12526,12527],{"class":1066},"rms_raw",[362,12529,12530],{"class":1172},":.2f",[362,12532,1509],{"class":1073},[362,12534,12535],{"class":1097},")\"",[362,12537,1050],{"class":901},[362,12539,12540,12542,12544,12546,12548,12551,12553,12555,12557,12560,12562,12564,12566,12568,12570,12572,12574,12576,12578,12580,12582,12584,12586,12588,12590,12592],{"class":852,"line":1567},[362,12541,2778],{"class":860},[362,12543,902],{"class":901},[362,12545,3881],{"class":1066},[362,12547,1070],{"class":901},[362,12549,12550],{"class":1066},"est",[362,12552,2956],{"class":901},[362,12554,1607],{"class":1073},[362,12556,1244],{"class":901},[362,12558,12559],{"class":1066}," est",[362,12561,2956],{"class":901},[362,12563,3379],{"class":1073},[362,12565,1244],{"class":901},[362,12567,2233],{"class":1093},[362,12569,4078],{"class":1097},[362,12571,1094],{"class":1093},[362,12573,933],{"class":901},[362,12575,3912],{"class":1225},[362,12577,395],{"class":1106},[362,12579,1094],{"class":1093},[362,12581,4091],{"class":1097},[362,12583,1094],{"class":1093},[362,12585,933],{"class":901},[362,12587,4098],{"class":1225},[362,12589,395],{"class":1106},[362,12591,3535],{"class":1073},[362,12593,1031],{"class":901},[362,12595,12596,12598,12600,12602,12605,12607,12610,12612,12614,12616],{"class":852,"line":1577},[362,12597,3937],{"class":1225},[362,12599,395],{"class":1106},[362,12601,10200],{"class":1172},[362,12603,12604],{"class":1097},"\"Kalman (RMS ",[362,12606,1470],{"class":1073},[362,12608,12609],{"class":1066},"rms_kf",[362,12611,12530],{"class":1172},[362,12613,1509],{"class":1073},[362,12615,12535],{"class":1097},[362,12617,1050],{"class":901},[362,12619,12620,12622,12624,12626,12628,12630,12633,12635],{"class":852,"line":1586},[362,12621,2778],{"class":860},[362,12623,902],{"class":901},[362,12625,4295],{"class":1066},[362,12627,1070],{"class":901},[362,12629,1094],{"class":1093},[362,12631,12632],{"class":1097},"Success: the filter denoises a constant-velocity track",[362,12634,1094],{"class":1093},[362,12636,1050],{"class":901},[362,12638,12639,12641,12643,12645,12647,12649,12651,12653,12655,12657,12659,12661,12663,12665,12667,12669],{"class":852,"line":1625},[362,12640,2778],{"class":860},[362,12642,902],{"class":901},[362,12644,4353],{"class":1066},[362,12646,1070],{"class":901},[362,12648,6831],{"class":1225},[362,12650,395],{"class":1106},[362,12652,4377],{"class":1073},[362,12654,2129],{"class":901},[362,12656,4328],{"class":860},[362,12658,902],{"class":901},[362,12660,4386],{"class":1066},[362,12662,1070],{"class":901},[362,12664,4391],{"class":1225},[362,12666,395],{"class":1106},[362,12668,4396],{"class":1073},[362,12670,1050],{"class":901},[362,12672,12673,12675,12677,12679,12681,12683,12685,12687],{"class":852,"line":1657},[362,12674,1082],{"class":860},[362,12676,902],{"class":901},[362,12678,4407],{"class":1066},[362,12680,4410],{"class":901},[362,12682,4413],{"class":860},[362,12684,902],{"class":901},[362,12686,4418],{"class":1066},[362,12688,1962],{"class":901},[362,12690,12691,12694,12696,12698,12701,12703,12705,12707,12709,12712,12714,12716,12718,12720,12722],{"class":852,"line":1689},[362,12692,12693],{"class":2017},"print",[362,12695,1070],{"class":901},[362,12697,10200],{"class":1172},[362,12699,12700],{"class":1097},"\"raw detection RMS error: ",[362,12702,1470],{"class":1073},[362,12704,12527],{"class":1066},[362,12706,12530],{"class":1172},[362,12708,1509],{"class":1073},[362,12710,12711],{"class":1097},"   Kalman RMS error: ",[362,12713,1470],{"class":1073},[362,12715,12609],{"class":1066},[362,12717,12530],{"class":1172},[362,12719,1509],{"class":1073},[362,12721,1094],{"class":1097},[362,12723,1050],{"class":901},[338,12725,12726],{},[4424,12727],{"alt":847,"src":12728},"\u002F_nb\u002F977aee416aef1bd8.png",[12730,12731],"docyard-notebook-output",{"data":12732,"kind":12733},"cmF3IGRldGVjdGlvbiBSTVMgZXJyb3I6IDMuNzcgICBLYWxtYW4gUk1TIGVycm9yOiAyLjAyCg==","stream",[1122,12735,12737],{"id":12736},"_6b-failure-a-maneuvering-target","6b — Failure: a maneuvering target",[338,12739,12740,12741,12744,12745,12748],{},"A constant-velocity model assumes the object does not accelerate.\nWhen the target makes a hard 90° turn, the filter — still confident\nin the old velocity — overshoots, and for several frames the ",[347,12742,12743],{},"true\nposition falls outside the 2σ predictive ellipse",". In a real\ntracker that is fatal: a Mahalanobis gate would reject the ",[342,12746,12747],{},"correct","\ndetection as too far away, and the track either dies or steals\nsomeone else's detection. The red ✕ marks frames where the truth is\noutside the gate.",[842,12750,12752],{"className":844,"code":12751,"language":846,"meta":847,"style":847},"# An L-shaped path: east for 10 frames, then a sharp turn north.\nleg = torch.arange(10).float()\neast = torch.stack([3.0 * leg, torch.zeros(10)], dim=1)\nnorth = torch.stack([27.0 + torch.zeros(12), 3.0 * torch.arange(1, 13).float()],\n                    dim=1)\ntruth = torch.cat([east, north], dim=0)\nT = truth.shape[0]\ng = torch.Generator().manual_seed(23)\nmeas = truth + 0.6 * torch.randn(T, 2, generator=g)\n\nproc = KalmanCentroid2D(\"centroid\", q=0.05, r=0.4)\nm0 = torch.tensor([0.0, 0.0, 3.0, 0.0])\nrec = run_kalman(proc, m0, torch.eye(4) * 2.0, list(meas), [True] * T)\nest = torch.stack([r[\"post_mean\"][:2] for r in rec])\n\n# Which frames is the truth outside the 2-sigma predictive gate?\noutside = []\nfor k in range(T):\n    mu, S = predictive_xy(rec[k], proc.r)\n    d = (truth[k] - mu).double()\n    md2 = float(d @ torch.linalg.inv(S.double()) @ d)   # squared Mahalanobis\n    outside.append(md2 > 5.991)                          # chi2(2dof, .95)\n\nfig, ax = plt.subplots(figsize=(8, 5))\nax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2, label=\"truth (turns!)\")\nax.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=3, label=\"Kalman estimate\")\nfor k in range(8, T):\n    mu, S = predictive_xy(rec[k], proc.r)\n    col = \"tab:red\" if outside[k] else \"tab:green\"\n    cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=col, lw=1.1, alpha=0.7)\nmiss = torch.tensor(outside)\nax.scatter(truth[miss, 0], truth[miss, 1], marker=\"x\", color=\"tab:red\", s=70,\n           zorder=4, label=\"truth outside 2σ gate\")\nax.plot([], [], color=\"tab:green\", label=\"gate covers truth\")\nax.set_title(\"Failure: CV model lags a maneuver; the gate rejects the truth\")\nax.legend(fontsize=8); ax.grid(alpha=0.3); ax.set_aspect(\"equal\")\nplt.tight_layout(); plt.show()\nprint(f\"frames where truth left the 2σ gate: {int(miss.sum())} \u002F {T}\")\n\n",[702,12753,12754,12759,12783,12828,12886,12897,12930,12948,12971,13009,13013,13047,13078,13134,13174,13178,13183,13192,13208,13238,13265,13311,13335,13339,13371,13438,13504,13524,13554,13587,13638,13658,13726,13750,13787,13806,13856,13874],{"__ignoreMap":847},[362,12755,12756],{"class":852,"line":853},[362,12757,12758],{"class":2132},"# An L-shaped path: east for 10 frames, then a sharp turn north.\n",[362,12760,12761,12764,12766,12768,12770,12772,12774,12777,12779,12781],{"class":852,"line":864},[362,12762,12763],{"class":860},"leg ",[362,12765,395],{"class":1106},[362,12767,2380],{"class":860},[362,12769,902],{"class":901},[362,12771,3439],{"class":1066},[362,12773,1070],{"class":901},[362,12775,12776],{"class":1073},"10",[362,12778,1489],{"class":901},[362,12780,1492],{"class":1066},[362,12782,1962],{"class":901},[362,12784,12785,12788,12790,12792,12794,12796,12798,12801,12803,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824,12826],{"class":852,"line":871},[362,12786,12787],{"class":860},"east ",[362,12789,395],{"class":1106},[362,12791,2380],{"class":860},[362,12793,902],{"class":901},[362,12795,3464],{"class":1066},[362,12797,1238],{"class":901},[362,12799,12800],{"class":1073},"3.0",[362,12802,1764],{"class":1106},[362,12804,12805],{"class":1066}," leg",[362,12807,933],{"class":901},[362,12809,2380],{"class":1066},[362,12811,902],{"class":901},[362,12813,1350],{"class":1066},[362,12815,1070],{"class":901},[362,12817,12776],{"class":1073},[362,12819,1291],{"class":901},[362,12821,3506],{"class":1225},[362,12823,395],{"class":1106},[362,12825,1241],{"class":1073},[362,12827,1050],{"class":901},[362,12829,12830,12833,12835,12837,12839,12841,12843,12846,12848,12850,12852,12854,12856,12858,12860,12862,12864,12866,12868,12870,12872,12874,12876,12879,12881,12883],{"class":852,"line":885},[362,12831,12832],{"class":860},"north ",[362,12834,395],{"class":1106},[362,12836,2380],{"class":860},[362,12838,902],{"class":901},[362,12840,3464],{"class":1066},[362,12842,1238],{"class":901},[362,12844,12845],{"class":1073},"27.0",[362,12847,2377],{"class":1106},[362,12849,2380],{"class":1066},[362,12851,902],{"class":901},[362,12853,1350],{"class":1066},[362,12855,1070],{"class":901},[362,12857,6373],{"class":1073},[362,12859,3771],{"class":901},[362,12861,4770],{"class":1073},[362,12863,1764],{"class":1106},[362,12865,2380],{"class":1066},[362,12867,902],{"class":901},[362,12869,3439],{"class":1066},[362,12871,1070],{"class":901},[362,12873,1241],{"class":1073},[362,12875,933],{"class":901},[362,12877,12878],{"class":1073}," 13",[362,12880,1489],{"class":901},[362,12882,1492],{"class":1066},[362,12884,12885],{"class":901},"()],\n",[362,12887,12888,12891,12893,12895],{"class":852,"line":893},[362,12889,12890],{"class":1225},"                    dim",[362,12892,395],{"class":1106},[362,12894,1241],{"class":1073},[362,12896,1050],{"class":901},[362,12898,12899,12901,12903,12905,12907,12910,12912,12915,12917,12920,12922,12924,12926,12928],{"class":852,"line":915},[362,12900,11967],{"class":860},[362,12902,395],{"class":1106},[362,12904,2380],{"class":860},[362,12906,902],{"class":901},[362,12908,12909],{"class":1066},"cat",[362,12911,1238],{"class":901},[362,12913,12914],{"class":1066},"east",[362,12916,933],{"class":901},[362,12918,12919],{"class":1066}," north",[362,12921,1244],{"class":901},[362,12923,3506],{"class":1225},[362,12925,395],{"class":1106},[362,12927,1074],{"class":1073},[362,12929,1050],{"class":901},[362,12931,12932,12934,12936,12938,12940,12942,12944,12946],{"class":852,"line":939},[362,12933,3420],{"class":860},[362,12935,395],{"class":1106},[362,12937,12272],{"class":860},[362,12939,902],{"class":901},[362,12941,2325],{"class":905},[362,12943,1090],{"class":901},[362,12945,1074],{"class":1073},[362,12947,2332],{"class":901},[362,12949,12950,12952,12954,12956,12958,12960,12962,12964,12966,12969],{"class":852,"line":944},[362,12951,3517],{"class":860},[362,12953,395],{"class":1106},[362,12955,2380],{"class":860},[362,12957,902],{"class":901},[362,12959,3526],{"class":1066},[362,12961,2834],{"class":901},[362,12963,1067],{"class":1066},[362,12965,1070],{"class":901},[362,12967,12968],{"class":1073},"23",[362,12970,1050],{"class":901},[362,12972,12973,12975,12977,12979,12981,12983,12985,12987,12989,12991,12993,12995,12997,12999,13001,13003,13005,13007],{"class":852,"line":977},[362,12974,3552],{"class":860},[362,12976,395],{"class":1106},[362,12978,12035],{"class":860},[362,12980,525],{"class":1106},[362,12982,9661],{"class":1073},[362,12984,1764],{"class":1106},[362,12986,2380],{"class":860},[362,12988,902],{"class":901},[362,12990,3571],{"class":1066},[362,12992,1070],{"class":901},[362,12994,3444],{"class":1066},[362,12996,933],{"class":901},[362,12998,3501],{"class":1073},[362,13000,933],{"class":901},[362,13002,3584],{"class":1225},[362,13004,395],{"class":1106},[362,13006,3589],{"class":1066},[362,13008,1050],{"class":901},[362,13010,13011],{"class":852,"line":994},[362,13012,868],{"emptyLinePlaceholder":867},[362,13014,13015,13017,13019,13021,13023,13025,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045],{"class":852,"line":1015},[362,13016,3600],{"class":860},[362,13018,395],{"class":1106},[362,13020,1023],{"class":1066},[362,13022,1070],{"class":901},[362,13024,1094],{"class":1093},[362,13026,294],{"class":1097},[362,13028,1094],{"class":1093},[362,13030,933],{"class":901},[362,13032,3617],{"class":1225},[362,13034,395],{"class":1106},[362,13036,4669],{"class":1073},[362,13038,933],{"class":901},[362,13040,3165],{"class":1225},[362,13042,395],{"class":1106},[362,13044,8876],{"class":1073},[362,13046,1050],{"class":901},[362,13048,13049,13051,13053,13055,13057,13059,13061,13064,13066,13068,13070,13072,13074,13076],{"class":852,"line":1034},[362,13050,12106],{"class":860},[362,13052,395],{"class":1106},[362,13054,2380],{"class":860},[362,13056,902],{"class":901},[362,13058,1235],{"class":1066},[362,13060,1238],{"class":901},[362,13062,13063],{"class":1073},"0.0",[362,13065,933],{"class":901},[362,13067,3693],{"class":1073},[362,13069,933],{"class":901},[362,13071,4770],{"class":1073},[362,13073,933],{"class":901},[362,13075,3693],{"class":1073},[362,13077,2605],{"class":901},[362,13079,13080,13082,13084,13086,13088,13090,13092,13094,13096,13098,13100,13102,13104,13106,13108,13110,13112,13114,13116,13118,13120,13122,13124,13126,13128,13130,13132],{"class":852,"line":1047},[362,13081,3743],{"class":860},[362,13083,395],{"class":1106},[362,13085,1734],{"class":1066},[362,13087,1070],{"class":901},[362,13089,1739],{"class":1066},[362,13091,933],{"class":901},[362,13093,12175],{"class":1066},[362,13095,933],{"class":901},[362,13097,2380],{"class":1066},[362,13099,902],{"class":901},[362,13101,2385],{"class":1066},[362,13103,1070],{"class":901},[362,13105,4103],{"class":1073},[362,13107,2129],{"class":901},[362,13109,1764],{"class":1106},[362,13111,3688],{"class":1073},[362,13113,933],{"class":901},[362,13115,3764],{"class":1277},[362,13117,1070],{"class":901},[362,13119,3659],{"class":1066},[362,13121,3771],{"class":901},[362,13123,3774],{"class":901},[362,13125,2929],{"class":1787},[362,13127,1103],{"class":901},[362,13129,1764],{"class":1106},[362,13131,3783],{"class":1066},[362,13133,1050],{"class":901},[362,13135,13136,13138,13140,13142,13144,13146,13148,13150,13152,13154,13156,13158,13160,13162,13164,13166,13168,13170,13172],{"class":852,"line":1053},[362,13137,12220],{"class":860},[362,13139,395],{"class":1106},[362,13141,2380],{"class":860},[362,13143,902],{"class":901},[362,13145,3464],{"class":1066},[362,13147,1238],{"class":901},[362,13149,3803],{"class":1066},[362,13151,1090],{"class":901},[362,13153,1094],{"class":1093},[362,13155,2652],{"class":1097},[362,13157,1094],{"class":1093},[362,13159,3228],{"class":901},[362,13161,3039],{"class":1073},[362,13163,1103],{"class":901},[362,13165,3820],{"class":856},[362,13167,3823],{"class":1066},[362,13169,2014],{"class":856},[362,13171,2517],{"class":1066},[362,13173,2605],{"class":901},[362,13175,13176],{"class":852,"line":1058},[362,13177,868],{"emptyLinePlaceholder":867},[362,13179,13180],{"class":852,"line":1079},[362,13181,13182],{"class":2132},"# Which frames is the truth outside the 2-sigma predictive gate?\n",[362,13184,13185,13188,13190],{"class":852,"line":1567},[362,13186,13187],{"class":860},"outside ",[362,13189,395],{"class":1106},[362,13191,1997],{"class":901},[362,13193,13194,13196,13198,13200,13202,13204,13206],{"class":852,"line":1577},[362,13195,4133],{"class":856},[362,13197,3360],{"class":860},[362,13199,2014],{"class":856},[362,13201,4140],{"class":2017},[362,13203,1070],{"class":901},[362,13205,3444],{"class":1066},[362,13207,1196],{"class":901},[362,13209,13210,13212,13214,13216,13218,13220,13222,13224,13226,13228,13230,13232,13234,13236],{"class":852,"line":1586},[362,13211,4159],{"class":860},[362,13213,933],{"class":901},[362,13215,4164],{"class":860},[362,13217,395],{"class":1106},[362,13219,3156],{"class":1066},[362,13221,1070],{"class":901},[362,13223,2742],{"class":1066},[362,13225,1090],{"class":901},[362,13227,2046],{"class":1066},[362,13229,1244],{"class":901},[362,13231,1939],{"class":1066},[362,13233,902],{"class":901},[362,13235,3803],{"class":905},[362,13237,1050],{"class":901},[362,13239,13240,13243,13245,13247,13249,13251,13253,13255,13257,13259,13261,13263],{"class":852,"line":1625},[362,13241,13242],{"class":860},"    d ",[362,13244,395],{"class":1106},[362,13246,1110],{"class":901},[362,13248,7080],{"class":860},[362,13250,1090],{"class":901},[362,13252,2046],{"class":860},[362,13254,1103],{"class":901},[362,13256,9346],{"class":1106},[362,13258,3288],{"class":860},[362,13260,1489],{"class":901},[362,13262,2428],{"class":1066},[362,13264,1962],{"class":901},[362,13266,13267,13270,13272,13274,13276,13279,13281,13283,13285,13287,13289,13291,13293,13295,13297,13299,13301,13303,13306,13308],{"class":852,"line":1657},[362,13268,13269],{"class":860},"    md2 ",[362,13271,395],{"class":1106},[362,13273,2036],{"class":1277},[362,13275,1070],{"class":901},[362,13277,13278],{"class":1066},"d ",[362,13280,2448],{"class":1106},[362,13282,2380],{"class":1066},[362,13284,902],{"class":901},[362,13286,2455],{"class":905},[362,13288,902],{"class":901},[362,13290,2460],{"class":1066},[362,13292,1070],{"class":901},[362,13294,2465],{"class":1066},[362,13296,902],{"class":901},[362,13298,2428],{"class":1066},[362,13300,2472],{"class":901},[362,13302,2475],{"class":1106},[362,13304,13305],{"class":1066}," d",[362,13307,2129],{"class":901},[362,13309,13310],{"class":2132},"   # squared Mahalanobis\n",[362,13312,13313,13316,13318,13320,13322,13325,13327,13330,13332],{"class":852,"line":1689},[362,13314,13315],{"class":860},"    outside",[362,13317,902],{"class":901},[362,13319,2737],{"class":1066},[362,13321,1070],{"class":901},[362,13323,13324],{"class":1066},"md2 ",[362,13326,2504],{"class":1106},[362,13328,13329],{"class":1073}," 5.991",[362,13331,2129],{"class":901},[362,13333,13334],{"class":2132},"                          # chi2(2dof, .95)\n",[362,13336,13337],{"class":852,"line":1709},[362,13338,868],{"emptyLinePlaceholder":867},[362,13340,13341,13343,13345,13347,13349,13351,13353,13355,13357,13359,13361,13363,13365,13367,13369],{"class":852,"line":1719},[362,13342,3839],{"class":860},[362,13344,933],{"class":901},[362,13346,3844],{"class":860},[362,13348,395],{"class":1106},[362,13350,3335],{"class":860},[362,13352,902],{"class":901},[362,13354,3853],{"class":1066},[362,13356,1070],{"class":901},[362,13358,3858],{"class":1225},[362,13360,395],{"class":1106},[362,13362,1070],{"class":901},[362,13364,4377],{"class":1073},[362,13366,933],{"class":901},[362,13368,3870],{"class":1073},[362,13370,3145],{"class":901},[362,13372,13373,13375,13377,13379,13381,13383,13385,13387,13389,13391,13393,13395,13397,13399,13401,13403,13405,13407,13409,13411,13413,13415,13417,13419,13421,13423,13425,13427,13429,13431,13434,13436],{"class":852,"line":1724},[362,13374,2778],{"class":860},[362,13376,902],{"class":901},[362,13378,3881],{"class":1066},[362,13380,1070],{"class":901},[362,13382,7080],{"class":1066},[362,13384,2956],{"class":901},[362,13386,1607],{"class":1073},[362,13388,1244],{"class":901},[362,13390,12272],{"class":1066},[362,13392,2956],{"class":901},[362,13394,3379],{"class":1073},[362,13396,1244],{"class":901},[362,13398,2233],{"class":1093},[362,13400,2416],{"class":1097},[362,13402,1094],{"class":1093},[362,13404,933],{"class":901},[362,13406,3912],{"class":1225},[362,13408,395],{"class":1106},[362,13410,1094],{"class":1093},[362,13412,3919],{"class":1097},[362,13414,1094],{"class":1093},[362,13416,933],{"class":901},[362,13418,3926],{"class":1225},[362,13420,395],{"class":1106},[362,13422,3039],{"class":1073},[362,13424,933],{"class":901},[362,13426,4924],{"class":1225},[362,13428,395],{"class":1106},[362,13430,1094],{"class":1093},[362,13432,13433],{"class":1097},"truth (turns!)",[362,13435,1094],{"class":1093},[362,13437,1050],{"class":901},[362,13439,13440,13442,13444,13446,13448,13450,13452,13454,13456,13458,13460,13462,13464,13466,13468,13470,13472,13474,13476,13478,13480,13482,13484,13486,13488,13490,13492,13494,13496,13498,13500,13502],{"class":852,"line":1729},[362,13441,2778],{"class":860},[362,13443,902],{"class":901},[362,13445,3881],{"class":1066},[362,13447,1070],{"class":901},[362,13449,12550],{"class":1066},[362,13451,2956],{"class":901},[362,13453,1607],{"class":1073},[362,13455,1244],{"class":901},[362,13457,12559],{"class":1066},[362,13459,2956],{"class":901},[362,13461,3379],{"class":1073},[362,13463,1244],{"class":901},[362,13465,2233],{"class":1093},[362,13467,4078],{"class":1097},[362,13469,1094],{"class":1093},[362,13471,933],{"class":901},[362,13473,3912],{"class":1225},[362,13475,395],{"class":1106},[362,13477,1094],{"class":1093},[362,13479,4091],{"class":1097},[362,13481,1094],{"class":1093},[362,13483,933],{"class":901},[362,13485,4098],{"class":1225},[362,13487,395],{"class":1106},[362,13489,3535],{"class":1073},[362,13491,933],{"class":901},[362,13493,4924],{"class":1225},[362,13495,395],{"class":1106},[362,13497,1094],{"class":1093},[362,13499,5104],{"class":1097},[362,13501,1094],{"class":1093},[362,13503,1050],{"class":901},[362,13505,13506,13508,13510,13512,13514,13516,13518,13520,13522],{"class":852,"line":1769},[362,13507,4133],{"class":856},[362,13509,3360],{"class":860},[362,13511,2014],{"class":856},[362,13513,4140],{"class":2017},[362,13515,1070],{"class":901},[362,13517,4377],{"class":1073},[362,13519,933],{"class":901},[362,13521,3783],{"class":1066},[362,13523,1196],{"class":901},[362,13525,13526,13528,13530,13532,13534,13536,13538,13540,13542,13544,13546,13548,13550,13552],{"class":852,"line":1802},[362,13527,4159],{"class":860},[362,13529,933],{"class":901},[362,13531,4164],{"class":860},[362,13533,395],{"class":1106},[362,13535,3156],{"class":1066},[362,13537,1070],{"class":901},[362,13539,2742],{"class":1066},[362,13541,1090],{"class":901},[362,13543,2046],{"class":1066},[362,13545,1244],{"class":901},[362,13547,1939],{"class":1066},[362,13549,902],{"class":901},[362,13551,3803],{"class":905},[362,13553,1050],{"class":901},[362,13555,13556,13559,13561,13563,13565,13567,13569,13572,13574,13576,13578,13580,13582,13584],{"class":852,"line":1808},[362,13557,13558],{"class":860},"    col ",[362,13560,395],{"class":1106},[362,13562,2233],{"class":1093},[362,13564,4007],{"class":1097},[362,13566,1094],{"class":1093},[362,13568,2052],{"class":856},[362,13570,13571],{"class":860}," outside",[362,13573,1090],{"class":901},[362,13575,2046],{"class":860},[362,13577,1103],{"class":901},[362,13579,2067],{"class":856},[362,13581,2233],{"class":1093},[362,13583,4224],{"class":1097},[362,13585,13586],{"class":1093},"\"\n",[362,13588,13589,13591,13593,13595,13597,13599,13601,13603,13605,13607,13609,13611,13613,13615,13617,13619,13621,13623,13625,13628,13630,13632,13634,13636],{"class":852,"line":1814},[362,13590,4191],{"class":1066},[362,13592,1070],{"class":901},[362,13594,2778],{"class":1066},[362,13596,933],{"class":901},[362,13598,3288],{"class":1066},[362,13600,933],{"class":901},[362,13602,4204],{"class":1066},[362,13604,933],{"class":901},[362,13606,2793],{"class":1225},[362,13608,395],{"class":1106},[362,13610,2798],{"class":1073},[362,13612,933],{"class":901},[362,13614,4217],{"class":1225},[362,13616,395],{"class":1106},[362,13618,10189],{"class":1066},[362,13620,933],{"class":901},[362,13622,3926],{"class":1225},[362,13624,395],{"class":1106},[362,13626,13627],{"class":1073},"1.1",[362,13629,933],{"class":901},[362,13631,6427],{"class":1225},[362,13633,395],{"class":1106},[362,13635,11530],{"class":1073},[362,13637,1050],{"class":901},[362,13639,13640,13643,13645,13647,13649,13651,13653,13656],{"class":852,"line":1819},[362,13641,13642],{"class":860},"miss ",[362,13644,395],{"class":1106},[362,13646,2380],{"class":860},[362,13648,902],{"class":901},[362,13650,1235],{"class":1066},[362,13652,1070],{"class":901},[362,13654,13655],{"class":1066},"outside",[362,13657,1050],{"class":901},[362,13659,13660,13662,13664,13666,13668,13670,13672,13675,13677,13679,13681,13683,13685,13687,13689,13691,13693,13695,13697,13699,13701,13703,13705,13707,13709,13711,13713,13715,13717,13719,13721,13724],{"class":852,"line":1825},[362,13661,2778],{"class":860},[362,13663,902],{"class":901},[362,13665,3966],{"class":1066},[362,13667,1070],{"class":901},[362,13669,7080],{"class":1066},[362,13671,1090],{"class":901},[362,13673,13674],{"class":1066},"miss",[362,13676,933],{"class":901},[362,13678,1607],{"class":1073},[362,13680,1244],{"class":901},[362,13682,12272],{"class":1066},[362,13684,1090],{"class":901},[362,13686,13674],{"class":1066},[362,13688,933],{"class":901},[362,13690,3379],{"class":1073},[362,13692,1244],{"class":901},[362,13694,3988],{"class":1225},[362,13696,395],{"class":1106},[362,13698,1094],{"class":1093},[362,13700,386],{"class":1097},[362,13702,1094],{"class":1093},[362,13704,933],{"class":901},[362,13706,3912],{"class":1225},[362,13708,395],{"class":1106},[362,13710,1094],{"class":1093},[362,13712,4007],{"class":1097},[362,13714,1094],{"class":1093},[362,13716,933],{"class":901},[362,13718,4014],{"class":1225},[362,13720,395],{"class":1106},[362,13722,13723],{"class":1073},"70",[362,13725,1031],{"class":901},[362,13727,13728,13731,13733,13735,13737,13739,13741,13743,13746,13748],{"class":852,"line":1831},[362,13729,13730],{"class":1225},"           zorder",[362,13732,395],{"class":1106},[362,13734,4103],{"class":1073},[362,13736,933],{"class":901},[362,13738,4924],{"class":1225},[362,13740,395],{"class":1106},[362,13742,1094],{"class":1093},[362,13744,13745],{"class":1097},"truth outside 2σ gate",[362,13747,1094],{"class":1093},[362,13749,1050],{"class":901},[362,13751,13752,13754,13756,13758,13760,13762,13764,13766,13768,13770,13772,13774,13776,13778,13780,13783,13785],{"class":852,"line":1837},[362,13753,2778],{"class":860},[362,13755,902],{"class":901},[362,13757,3881],{"class":1066},[362,13759,4248],{"class":901},[362,13761,4251],{"class":901},[362,13763,3912],{"class":1225},[362,13765,395],{"class":1106},[362,13767,1094],{"class":1093},[362,13769,4224],{"class":1097},[362,13771,1094],{"class":1093},[362,13773,933],{"class":901},[362,13775,4924],{"class":1225},[362,13777,395],{"class":1106},[362,13779,1094],{"class":1093},[362,13781,13782],{"class":1097},"gate covers truth",[362,13784,1094],{"class":1093},[362,13786,1050],{"class":901},[362,13788,13789,13791,13793,13795,13797,13799,13802,13804],{"class":852,"line":1843},[362,13790,2778],{"class":860},[362,13792,902],{"class":901},[362,13794,4295],{"class":1066},[362,13796,1070],{"class":901},[362,13798,1094],{"class":1093},[362,13800,13801],{"class":1097},"Failure: CV model lags a maneuver; the gate rejects the truth",[362,13803,1094],{"class":1093},[362,13805,1050],{"class":901},[362,13807,13808,13810,13812,13814,13816,13818,13820,13822,13824,13826,13828,13830,13832,13834,13836,13838,13840,13842,13844,13846,13848,13850,13852,13854],{"class":852,"line":1849},[362,13809,2778],{"class":860},[362,13811,902],{"class":901},[362,13813,4353],{"class":1066},[362,13815,1070],{"class":901},[362,13817,6831],{"class":1225},[362,13819,395],{"class":1106},[362,13821,4377],{"class":1073},[362,13823,2129],{"class":901},[362,13825,4328],{"class":860},[362,13827,902],{"class":901},[362,13829,4386],{"class":1066},[362,13831,1070],{"class":901},[362,13833,4391],{"class":1225},[362,13835,395],{"class":1106},[362,13837,4396],{"class":1073},[362,13839,2129],{"class":901},[362,13841,4328],{"class":860},[362,13843,902],{"class":901},[362,13845,6756],{"class":1066},[362,13847,1070],{"class":901},[362,13849,1094],{"class":1093},[362,13851,6763],{"class":1097},[362,13853,1094],{"class":1093},[362,13855,1050],{"class":901},[362,13857,13858,13860,13862,13864,13866,13868,13870,13872],{"class":852,"line":1854},[362,13859,1082],{"class":860},[362,13861,902],{"class":901},[362,13863,4407],{"class":1066},[362,13865,4410],{"class":901},[362,13867,4413],{"class":860},[362,13869,902],{"class":901},[362,13871,4418],{"class":1066},[362,13873,1962],{"class":901},[362,13875,13876,13878,13880,13882,13885,13887,13889,13891,13893,13895,13897,13899,13901,13904,13906,13908,13910,13912],{"class":852,"line":1860},[362,13877,12693],{"class":2017},[362,13879,1070],{"class":901},[362,13881,10200],{"class":1172},[362,13883,13884],{"class":1097},"\"frames where truth left the 2σ gate: ",[362,13886,1470],{"class":1073},[362,13888,1278],{"class":1277},[362,13890,1070],{"class":901},[362,13892,13674],{"class":1066},[362,13894,902],{"class":901},[362,13896,12286],{"class":1066},[362,13898,2472],{"class":901},[362,13900,1509],{"class":1073},[362,13902,13903],{"class":1097}," \u002F ",[362,13905,1470],{"class":1073},[362,13907,3444],{"class":1066},[362,13909,1509],{"class":1073},[362,13911,1094],{"class":1097},[362,13913,1050],{"class":901},[338,13915,13916],{},[4424,13917],{"alt":847,"src":13918},"\u002F_nb\u002F81e79b41a686579f.png",[12730,13920],{"data":13921,"kind":12733},"ZnJhbWVzIHdoZXJlIHRydXRoIGxlZnQgdGhlIDLPgyBnYXRlOiA0IC8gMjIK",[338,13923,13924,13925,13928],{},"The fix in practice is to admit you do not know the acceleration:\nraise ",[702,13926,13927],{},"q"," so the predictive covariance grows fast enough to keep the\ntruth inside the gate. That is the next failure mode — tuning.",[1122,13930,13932,13933,13935],{"id":13931},"_6c-failure-mistuned-noise-q-too-small-vs-too-large","6c — Failure: mistuned noise (",[702,13934,13927],{}," too small vs. too large)",[338,13937,13938,13940,13941,13944,13945,13948,13949,13951,13952,13954],{},[702,13939,13927],{}," encodes \"how much can the object surprise me between frames?\"\nSet it too ",[347,13942,13943],{},"small"," and the filter is overconfident: tight ellipses,\nsluggish to follow the maneuver, the estimate lags badly. Set it too\n",[347,13946,13947],{},"large"," and the filter distrusts its own model, chases every noisy\ndetection, and the estimate is jittery. Only the middle setting both\nfollows the turn ",[342,13950,803],{}," stays smooth — the RMS error is U-shaped in\n",[702,13953,13927],{},". Same L-path as above, now with noisier detections so both\nfailure modes show.",[842,13956,13958],{"className":844,"code":13957,"language":846,"meta":847,"style":847},"g = torch.Generator().manual_seed(31)\nmeas_n = truth + 1.6 * torch.randn(T, 2, generator=g)   # noisier detections\n\nfig, axes = plt.subplots(1, 3, figsize=(13, 4))\nfor ax, q, label in [(axes[0], 0.002, \"q=0.002 (overconfident)\"),\n                     (axes[1], 0.2, \"q=0.2 (balanced)\"),\n                     (axes[2], 40.0, \"q=40 (chases noise)\")]:\n    proc = KalmanCentroid2D(\"centroid\", q=q, r=2.5)\n    rec = run_kalman(proc, torch.tensor([0., 0, 3, 0]),\n                     torch.eye(4) * 2.0, list(meas_n), [True] * T)\n    est = torch.stack([r[\"post_mean\"][:2] for r in rec])\n    rms = (est - truth).pow(2).sum(1).mean().sqrt()\n    ax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.6\", lw=2)\n    ax.scatter(meas_n[:, 0], meas_n[:, 1], marker=\"x\", color=\"tab:red\", s=14,\n               alpha=0.5)\n    ax.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=2.5)\n    for k in range(8, T, 2):\n        mu, S = predictive_xy(rec[k], proc.r)\n        cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=0.9,\n                    alpha=0.6)\n    ax.set_title(f\"{label}\\nRMS={rms:.2f}\", fontsize=9)\n    ax.set_aspect(\"equal\"); ax.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,13959,13960,13983,14025,14029,14069,14110,14137,14163,14199,14240,14282,14323,14364,14418,14478,14489,14543,14567,14597,14644,14655,14703,14737],{"__ignoreMap":847},[362,13961,13962,13964,13966,13968,13970,13972,13974,13976,13978,13981],{"class":852,"line":853},[362,13963,3517],{"class":860},[362,13965,395],{"class":1106},[362,13967,2380],{"class":860},[362,13969,902],{"class":901},[362,13971,3526],{"class":1066},[362,13973,2834],{"class":901},[362,13975,1067],{"class":1066},[362,13977,1070],{"class":901},[362,13979,13980],{"class":1073},"31",[362,13982,1050],{"class":901},[362,13984,13985,13988,13990,13992,13994,13996,13998,14000,14002,14004,14006,14008,14010,14012,14014,14016,14018,14020,14022],{"class":852,"line":864},[362,13986,13987],{"class":860},"meas_n ",[362,13989,395],{"class":1106},[362,13991,12035],{"class":860},[362,13993,525],{"class":1106},[362,13995,5525],{"class":1073},[362,13997,1764],{"class":1106},[362,13999,2380],{"class":860},[362,14001,902],{"class":901},[362,14003,3571],{"class":1066},[362,14005,1070],{"class":901},[362,14007,3444],{"class":1066},[362,14009,933],{"class":901},[362,14011,3501],{"class":1073},[362,14013,933],{"class":901},[362,14015,3584],{"class":1225},[362,14017,395],{"class":1106},[362,14019,3589],{"class":1066},[362,14021,2129],{"class":901},[362,14023,14024],{"class":2132},"   # noisier detections\n",[362,14026,14027],{"class":852,"line":871},[362,14028,868],{"emptyLinePlaceholder":867},[362,14030,14031,14033,14035,14037,14039,14041,14043,14045,14047,14049,14051,14053,14055,14057,14059,14061,14063,14065,14067],{"class":852,"line":885},[362,14032,3839],{"class":860},[362,14034,933],{"class":901},[362,14036,6916],{"class":860},[362,14038,395],{"class":1106},[362,14040,3335],{"class":860},[362,14042,902],{"class":901},[362,14044,3853],{"class":1066},[362,14046,1070],{"class":901},[362,14048,1241],{"class":1073},[362,14050,933],{"class":901},[362,14052,7008],{"class":1073},[362,14054,933],{"class":901},[362,14056,6937],{"class":1225},[362,14058,395],{"class":1106},[362,14060,1070],{"class":901},[362,14062,11144],{"class":1073},[362,14064,933],{"class":901},[362,14066,1118],{"class":1073},[362,14068,3145],{"class":901},[362,14070,14071,14073,14075,14077,14079,14081,14084,14086,14088,14090,14092,14094,14096,14099,14101,14103,14106,14108],{"class":852,"line":893},[362,14072,4133],{"class":856},[362,14074,6958],{"class":860},[362,14076,933],{"class":901},[362,14078,3617],{"class":860},[362,14080,933],{"class":901},[362,14082,14083],{"class":860}," label ",[362,14085,2014],{"class":856},[362,14087,6973],{"class":901},[362,14089,6976],{"class":860},[362,14091,1090],{"class":901},[362,14093,1074],{"class":1073},[362,14095,1244],{"class":901},[362,14097,14098],{"class":1073}," 0.002",[362,14100,933],{"class":901},[362,14102,2233],{"class":1093},[362,14104,14105],{"class":1097},"q=0.002 (overconfident)",[362,14107,1094],{"class":1093},[362,14109,1259],{"class":901},[362,14111,14112,14115,14117,14119,14121,14123,14126,14128,14130,14133,14135],{"class":852,"line":915},[362,14113,14114],{"class":901},"                     (",[362,14116,6976],{"class":860},[362,14118,1090],{"class":901},[362,14120,1241],{"class":1073},[362,14122,1244],{"class":901},[362,14124,14125],{"class":1073}," 0.2",[362,14127,933],{"class":901},[362,14129,2233],{"class":1093},[362,14131,14132],{"class":1097},"q=0.2 (balanced)",[362,14134,1094],{"class":1093},[362,14136,1259],{"class":901},[362,14138,14139,14141,14143,14145,14147,14149,14152,14154,14156,14159,14161],{"class":852,"line":939},[362,14140,14114],{"class":901},[362,14142,6976],{"class":860},[362,14144,1090],{"class":901},[362,14146,3039],{"class":1073},[362,14148,1244],{"class":901},[362,14150,14151],{"class":1073}," 40.0",[362,14153,933],{"class":901},[362,14155,2233],{"class":1093},[362,14157,14158],{"class":1097},"q=40 (chases noise)",[362,14160,1094],{"class":1093},[362,14162,7020],{"class":901},[362,14164,14165,14168,14170,14172,14174,14176,14178,14180,14182,14184,14186,14188,14190,14192,14194,14197],{"class":852,"line":944},[362,14166,14167],{"class":860},"    proc ",[362,14169,395],{"class":1106},[362,14171,1023],{"class":1066},[362,14173,1070],{"class":901},[362,14175,1094],{"class":1093},[362,14177,294],{"class":1097},[362,14179,1094],{"class":1093},[362,14181,933],{"class":901},[362,14183,3617],{"class":1225},[362,14185,395],{"class":1106},[362,14187,13927],{"class":1066},[362,14189,933],{"class":901},[362,14191,3165],{"class":1225},[362,14193,395],{"class":1106},[362,14195,14196],{"class":1073},"2.5",[362,14198,1050],{"class":901},[362,14200,14201,14204,14206,14208,14210,14212,14214,14216,14218,14220,14222,14224,14227,14229,14231,14233,14235,14237],{"class":852,"line":977},[362,14202,14203],{"class":860},"    rec ",[362,14205,395],{"class":1106},[362,14207,1734],{"class":1066},[362,14209,1070],{"class":901},[362,14211,1739],{"class":1066},[362,14213,933],{"class":901},[362,14215,2380],{"class":1066},[362,14217,902],{"class":901},[362,14219,1235],{"class":1066},[362,14221,1238],{"class":901},[362,14223,1074],{"class":1073},[362,14225,14226],{"class":901},".,",[362,14228,1607],{"class":1073},[362,14230,933],{"class":901},[362,14232,7008],{"class":1073},[362,14234,933],{"class":901},[362,14236,1607],{"class":1073},[362,14238,14239],{"class":901},"]),\n",[362,14241,14242,14245,14247,14249,14251,14253,14255,14257,14259,14261,14263,14265,14268,14270,14272,14274,14276,14278,14280],{"class":852,"line":994},[362,14243,14244],{"class":1066},"                     torch",[362,14246,902],{"class":901},[362,14248,2385],{"class":1066},[362,14250,1070],{"class":901},[362,14252,4103],{"class":1073},[362,14254,2129],{"class":901},[362,14256,1764],{"class":1106},[362,14258,3688],{"class":1073},[362,14260,933],{"class":901},[362,14262,3764],{"class":1277},[362,14264,1070],{"class":901},[362,14266,14267],{"class":1066},"meas_n",[362,14269,3771],{"class":901},[362,14271,3774],{"class":901},[362,14273,2929],{"class":1787},[362,14275,1103],{"class":901},[362,14277,1764],{"class":1106},[362,14279,3783],{"class":1066},[362,14281,1050],{"class":901},[362,14283,14284,14287,14289,14291,14293,14295,14297,14299,14301,14303,14305,14307,14309,14311,14313,14315,14317,14319,14321],{"class":852,"line":1015},[362,14285,14286],{"class":860},"    est ",[362,14288,395],{"class":1106},[362,14290,2380],{"class":860},[362,14292,902],{"class":901},[362,14294,3464],{"class":1066},[362,14296,1238],{"class":901},[362,14298,3803],{"class":1066},[362,14300,1090],{"class":901},[362,14302,1094],{"class":1093},[362,14304,2652],{"class":1097},[362,14306,1094],{"class":1093},[362,14308,3228],{"class":901},[362,14310,3039],{"class":1073},[362,14312,1103],{"class":901},[362,14314,3820],{"class":856},[362,14316,3823],{"class":1066},[362,14318,2014],{"class":856},[362,14320,2517],{"class":1066},[362,14322,2605],{"class":901},[362,14324,14325,14328,14330,14332,14334,14336,14338,14340,14342,14344,14346,14348,14350,14352,14354,14356,14358,14360,14362],{"class":852,"line":1034},[362,14326,14327],{"class":860},"    rms ",[362,14329,395],{"class":1106},[362,14331,1110],{"class":901},[362,14333,12220],{"class":860},[362,14335,2416],{"class":1106},[362,14337,12272],{"class":860},[362,14339,1489],{"class":901},[362,14341,12277],{"class":1066},[362,14343,1070],{"class":901},[362,14345,3039],{"class":1073},[362,14347,1489],{"class":901},[362,14349,12286],{"class":1066},[362,14351,1070],{"class":901},[362,14353,1241],{"class":1073},[362,14355,1489],{"class":901},[362,14357,7583],{"class":1066},[362,14359,2834],{"class":901},[362,14361,3054],{"class":1066},[362,14363,1962],{"class":901},[362,14365,14366,14368,14370,14372,14374,14376,14378,14380,14382,14384,14386,14388,14390,14392,14394,14396,14398,14400,14402,14404,14406,14408,14410,14412,14414,14416],{"class":852,"line":1047},[362,14367,3067],{"class":860},[362,14369,902],{"class":901},[362,14371,3881],{"class":1066},[362,14373,1070],{"class":901},[362,14375,7080],{"class":1066},[362,14377,2956],{"class":901},[362,14379,1607],{"class":1073},[362,14381,1244],{"class":901},[362,14383,12272],{"class":1066},[362,14385,2956],{"class":901},[362,14387,3379],{"class":1073},[362,14389,1244],{"class":901},[362,14391,2233],{"class":1093},[362,14393,2416],{"class":1097},[362,14395,1094],{"class":1093},[362,14397,933],{"class":901},[362,14399,3912],{"class":1225},[362,14401,395],{"class":1106},[362,14403,1094],{"class":1093},[362,14405,6125],{"class":1097},[362,14407,1094],{"class":1093},[362,14409,933],{"class":901},[362,14411,3926],{"class":1225},[362,14413,395],{"class":1106},[362,14415,3039],{"class":1073},[362,14417,1050],{"class":901},[362,14419,14420,14422,14424,14426,14428,14430,14432,14434,14436,14439,14441,14443,14445,14447,14449,14451,14453,14455,14457,14459,14461,14463,14465,14467,14469,14471,14473,14476],{"class":852,"line":1053},[362,14421,3067],{"class":860},[362,14423,902],{"class":901},[362,14425,3966],{"class":1066},[362,14427,1070],{"class":901},[362,14429,14267],{"class":1066},[362,14431,2956],{"class":901},[362,14433,1607],{"class":1073},[362,14435,1244],{"class":901},[362,14437,14438],{"class":1066}," meas_n",[362,14440,2956],{"class":901},[362,14442,3379],{"class":1073},[362,14444,1244],{"class":901},[362,14446,3988],{"class":1225},[362,14448,395],{"class":1106},[362,14450,1094],{"class":1093},[362,14452,386],{"class":1097},[362,14454,1094],{"class":1093},[362,14456,933],{"class":901},[362,14458,3912],{"class":1225},[362,14460,395],{"class":1106},[362,14462,1094],{"class":1093},[362,14464,4007],{"class":1097},[362,14466,1094],{"class":1093},[362,14468,933],{"class":901},[362,14470,4014],{"class":1225},[362,14472,395],{"class":1106},[362,14474,14475],{"class":1073},"14",[362,14477,1031],{"class":901},[362,14479,14480,14483,14485,14487],{"class":852,"line":1058},[362,14481,14482],{"class":1225},"               alpha",[362,14484,395],{"class":1106},[362,14486,6422],{"class":1073},[362,14488,1050],{"class":901},[362,14490,14491,14493,14495,14497,14499,14501,14503,14505,14507,14509,14511,14513,14515,14517,14519,14521,14523,14525,14527,14529,14531,14533,14535,14537,14539,14541],{"class":852,"line":1079},[362,14492,3067],{"class":860},[362,14494,902],{"class":901},[362,14496,3881],{"class":1066},[362,14498,1070],{"class":901},[362,14500,12550],{"class":1066},[362,14502,2956],{"class":901},[362,14504,1607],{"class":1073},[362,14506,1244],{"class":901},[362,14508,12559],{"class":1066},[362,14510,2956],{"class":901},[362,14512,3379],{"class":1073},[362,14514,1244],{"class":901},[362,14516,2233],{"class":1093},[362,14518,4078],{"class":1097},[362,14520,1094],{"class":1093},[362,14522,933],{"class":901},[362,14524,3912],{"class":1225},[362,14526,395],{"class":1106},[362,14528,1094],{"class":1093},[362,14530,4091],{"class":1097},[362,14532,1094],{"class":1093},[362,14534,933],{"class":901},[362,14536,4098],{"class":1225},[362,14538,395],{"class":1106},[362,14540,14196],{"class":1073},[362,14542,1050],{"class":901},[362,14544,14545,14547,14549,14551,14553,14555,14557,14559,14561,14563,14565],{"class":852,"line":1567},[362,14546,2003],{"class":856},[362,14548,3360],{"class":860},[362,14550,2014],{"class":856},[362,14552,4140],{"class":2017},[362,14554,1070],{"class":901},[362,14556,4377],{"class":1073},[362,14558,933],{"class":901},[362,14560,3783],{"class":1066},[362,14562,933],{"class":901},[362,14564,3501],{"class":1073},[362,14566,1196],{"class":901},[362,14568,14569,14571,14573,14575,14577,14579,14581,14583,14585,14587,14589,14591,14593,14595],{"class":852,"line":1577},[362,14570,5148],{"class":860},[362,14572,933],{"class":901},[362,14574,4164],{"class":860},[362,14576,395],{"class":1106},[362,14578,3156],{"class":1066},[362,14580,1070],{"class":901},[362,14582,2742],{"class":1066},[362,14584,1090],{"class":901},[362,14586,2046],{"class":1066},[362,14588,1244],{"class":901},[362,14590,1939],{"class":1066},[362,14592,902],{"class":901},[362,14594,3803],{"class":905},[362,14596,1050],{"class":901},[362,14598,14599,14601,14603,14605,14607,14609,14611,14613,14615,14617,14619,14621,14623,14625,14627,14629,14631,14633,14635,14637,14639,14642],{"class":852,"line":1586},[362,14600,5180],{"class":1066},[362,14602,1070],{"class":901},[362,14604,2778],{"class":1066},[362,14606,933],{"class":901},[362,14608,3288],{"class":1066},[362,14610,933],{"class":901},[362,14612,4204],{"class":1066},[362,14614,933],{"class":901},[362,14616,2793],{"class":1225},[362,14618,395],{"class":1106},[362,14620,2798],{"class":1073},[362,14622,933],{"class":901},[362,14624,4217],{"class":1225},[362,14626,395],{"class":1106},[362,14628,1094],{"class":1093},[362,14630,4224],{"class":1097},[362,14632,1094],{"class":1093},[362,14634,933],{"class":901},[362,14636,3926],{"class":1225},[362,14638,395],{"class":1106},[362,14640,14641],{"class":1073},"0.9",[362,14643,1031],{"class":901},[362,14645,14646,14649,14651,14653],{"class":852,"line":1625},[362,14647,14648],{"class":1225},"                    alpha",[362,14650,395],{"class":1106},[362,14652,6125],{"class":1073},[362,14654,1050],{"class":901},[362,14656,14657,14659,14661,14663,14665,14667,14669,14671,14674,14676,14679,14682,14684,14687,14689,14691,14693,14695,14697,14699,14701],{"class":852,"line":1657},[362,14658,3067],{"class":860},[362,14660,902],{"class":901},[362,14662,4295],{"class":1066},[362,14664,1070],{"class":901},[362,14666,10200],{"class":1172},[362,14668,1094],{"class":1097},[362,14670,1470],{"class":1073},[362,14672,14673],{"class":1066},"label",[362,14675,1509],{"class":1073},[362,14677,14678],{"class":10771},"\\n",[362,14680,14681],{"class":1097},"RMS=",[362,14683,1470],{"class":1073},[362,14685,14686],{"class":1066},"rms",[362,14688,12530],{"class":1172},[362,14690,1509],{"class":1073},[362,14692,1094],{"class":1097},[362,14694,933],{"class":901},[362,14696,4372],{"class":1225},[362,14698,395],{"class":1106},[362,14700,3865],{"class":1073},[362,14702,1050],{"class":901},[362,14704,14705,14707,14709,14711,14713,14715,14717,14719,14721,14723,14725,14727,14729,14731,14733,14735],{"class":852,"line":1689},[362,14706,3067],{"class":860},[362,14708,902],{"class":901},[362,14710,6756],{"class":1066},[362,14712,1070],{"class":901},[362,14714,1094],{"class":1093},[362,14716,6763],{"class":1097},[362,14718,1094],{"class":1093},[362,14720,2129],{"class":901},[362,14722,4328],{"class":860},[362,14724,902],{"class":901},[362,14726,4386],{"class":1066},[362,14728,1070],{"class":901},[362,14730,4391],{"class":1225},[362,14732,395],{"class":1106},[362,14734,4396],{"class":1073},[362,14736,1050],{"class":901},[362,14738,14739,14741,14743,14745,14747,14749,14751,14753],{"class":852,"line":1709},[362,14740,1082],{"class":860},[362,14742,902],{"class":901},[362,14744,4407],{"class":1066},[362,14746,4410],{"class":901},[362,14748,4413],{"class":860},[362,14750,902],{"class":901},[362,14752,4418],{"class":1066},[362,14754,1962],{"class":901},[338,14756,14757],{},[4424,14758],{"alt":847,"src":14759},"\u002F_nb\u002F2e0d293eb9633664.png",[1122,14761,14763],{"id":14762},"_6d-failure-crossing-targets-and-ambiguous-gates","6d — Failure: crossing targets and ambiguous gates",[338,14765,14766,14767,14770],{},"Motion prediction alone cannot keep two identities apart when their\npredictive distributions overlap. Two objects cross paths; near the\ncrossing, each filter's 2σ ellipse contains ",[342,14768,14769],{},"both"," detections, so the\nassociation is a coin-flip — this is the classic point at which a\npure-motion tracker swaps IDs. The lesson is structural: Kalman\nmotion is necessary but not sufficient; an appearance cue (section 5)\nis what breaks the tie. The shaded frame marks the ambiguous window.",[842,14772,14774],{"className":844,"code":14773,"language":846,"meta":847,"style":847},"T = 24\nt = torch.arange(T).float()\n# Two targets crossing at the midpoint.\nA = torch.stack([2.0 * t, 1.5 * t], dim=1)\nB = torch.stack([2.0 * t, 36.0 - 1.5 * t], dim=1)\ng = torch.Generator().manual_seed(27)\nmA = A + 0.7 * torch.randn(T, 2, generator=g)\nmB = B + 0.7 * torch.randn(T, 2, generator=g)\n\ndef track(meas, vy):\n    proc = KalmanCentroid2D(\"centroid\", q=0.05, r=0.5)\n    m0 = torch.tensor([float(meas[0, 0]), float(meas[0, 1]), 2.0, vy])\n    return proc, run_kalman(proc, m0, torch.eye(4) * 2.0, list(meas), [True] * T)\n\nprocA, recA = track(mA, 1.5)\nprocB, recB = track(mB, -1.5)\n\n# Find the most ambiguous frame: ellipses closest \u002F most overlapping.\nkx = int(torch.argmin(torch.stack(\n    [(recA[k][\"prior_mean\"][:2] - recB[k][\"prior_mean\"][:2]).norm()\n     for k in range(T)])))\n\nfig, ax = plt.subplots(figsize=(8, 5))\nfor rec_, proc_, col, name in [(recA, procA, \"tab:blue\", \"target A\"),\n                               (recB, procB, \"tab:purple\", \"target B\")]:\n    est = torch.stack([r[\"post_mean\"][:2] for r in rec_])\n    ax.plot(est[:, 0], est[:, 1], \"o-\", color=col, ms=3, label=name)\n    mu, S = predictive_xy(rec_[kx], proc_.r)\n    cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=col, lw=1.6)\nax.scatter([float(mA[kx, 0]), float(mB[kx, 0])],\n           [float(mA[kx, 1]), float(mB[kx, 1])],\n           marker=\"x\", color=\"tab:red\", s=80, zorder=4,\n           label=\"both detections @ crossing\")\nax.set_title(f\"Failure: at the crossing (frame {kx}) each gate covers both detections\")\nax.legend(fontsize=8); ax.grid(alpha=0.3); ax.set_aspect(\"equal\")\nplt.tight_layout(); plt.show()\n\n",[702,14775,14776,14785,14807,14812,14851,14895,14918,14958,14998,15002,15020,15054,15109,15167,15171,15196,15223,15227,15232,15261,15315,15333,15337,15369,15420,15452,15492,15550,15582,15625,15668,15705,15749,15764,15790,15840],{"__ignoreMap":847},[362,14777,14778,14780,14782],{"class":852,"line":853},[362,14779,3420],{"class":860},[362,14781,395],{"class":1106},[362,14783,14784],{"class":1073}," 24\n",[362,14786,14787,14789,14791,14793,14795,14797,14799,14801,14803,14805],{"class":852,"line":864},[362,14788,3430],{"class":860},[362,14790,395],{"class":1106},[362,14792,2380],{"class":860},[362,14794,902],{"class":901},[362,14796,3439],{"class":1066},[362,14798,1070],{"class":901},[362,14800,3444],{"class":1066},[362,14802,1489],{"class":901},[362,14804,1492],{"class":1066},[362,14806,1962],{"class":901},[362,14808,14809],{"class":852,"line":871},[362,14810,14811],{"class":2132},"# Two targets crossing at the midpoint.\n",[362,14813,14814,14817,14819,14821,14823,14825,14827,14829,14831,14833,14835,14837,14839,14841,14843,14845,14847,14849],{"class":852,"line":885},[362,14815,14816],{"class":860},"A ",[362,14818,395],{"class":1106},[362,14820,2380],{"class":860},[362,14822,902],{"class":901},[362,14824,3464],{"class":1066},[362,14826,1238],{"class":901},[362,14828,2798],{"class":1073},[362,14830,1764],{"class":1106},[362,14832,3473],{"class":1066},[362,14834,933],{"class":901},[362,14836,12152],{"class":1073},[362,14838,1764],{"class":1106},[362,14840,3473],{"class":1066},[362,14842,1244],{"class":901},[362,14844,3506],{"class":1225},[362,14846,395],{"class":1106},[362,14848,1241],{"class":1073},[362,14850,1050],{"class":901},[362,14852,14853,14856,14858,14860,14862,14864,14866,14868,14870,14872,14874,14877,14879,14881,14883,14885,14887,14889,14891,14893],{"class":852,"line":893},[362,14854,14855],{"class":860},"B ",[362,14857,395],{"class":1106},[362,14859,2380],{"class":860},[362,14861,902],{"class":901},[362,14863,3464],{"class":1066},[362,14865,1238],{"class":901},[362,14867,2798],{"class":1073},[362,14869,1764],{"class":1106},[362,14871,3473],{"class":1066},[362,14873,933],{"class":901},[362,14875,14876],{"class":1073}," 36.0",[362,14878,9346],{"class":1106},[362,14880,12152],{"class":1073},[362,14882,1764],{"class":1106},[362,14884,3473],{"class":1066},[362,14886,1244],{"class":901},[362,14888,3506],{"class":1225},[362,14890,395],{"class":1106},[362,14892,1241],{"class":1073},[362,14894,1050],{"class":901},[362,14896,14897,14899,14901,14903,14905,14907,14909,14911,14913,14916],{"class":852,"line":915},[362,14898,3517],{"class":860},[362,14900,395],{"class":1106},[362,14902,2380],{"class":860},[362,14904,902],{"class":901},[362,14906,3526],{"class":1066},[362,14908,2834],{"class":901},[362,14910,1067],{"class":1066},[362,14912,1070],{"class":901},[362,14914,14915],{"class":1073},"27",[362,14917,1050],{"class":901},[362,14919,14920,14923,14925,14928,14930,14932,14934,14936,14938,14940,14942,14944,14946,14948,14950,14952,14954,14956],{"class":852,"line":939},[362,14921,14922],{"class":860},"mA ",[362,14924,395],{"class":1106},[362,14926,14927],{"class":860}," A ",[362,14929,525],{"class":1106},[362,14931,3355],{"class":1073},[362,14933,1764],{"class":1106},[362,14935,2380],{"class":860},[362,14937,902],{"class":901},[362,14939,3571],{"class":1066},[362,14941,1070],{"class":901},[362,14943,3444],{"class":1066},[362,14945,933],{"class":901},[362,14947,3501],{"class":1073},[362,14949,933],{"class":901},[362,14951,3584],{"class":1225},[362,14953,395],{"class":1106},[362,14955,3589],{"class":1066},[362,14957,1050],{"class":901},[362,14959,14960,14963,14965,14968,14970,14972,14974,14976,14978,14980,14982,14984,14986,14988,14990,14992,14994,14996],{"class":852,"line":944},[362,14961,14962],{"class":860},"mB ",[362,14964,395],{"class":1106},[362,14966,14967],{"class":860}," B ",[362,14969,525],{"class":1106},[362,14971,3355],{"class":1073},[362,14973,1764],{"class":1106},[362,14975,2380],{"class":860},[362,14977,902],{"class":901},[362,14979,3571],{"class":1066},[362,14981,1070],{"class":901},[362,14983,3444],{"class":1066},[362,14985,933],{"class":901},[362,14987,3501],{"class":1073},[362,14989,933],{"class":901},[362,14991,3584],{"class":1225},[362,14993,395],{"class":1106},[362,14995,3589],{"class":1066},[362,14997,1050],{"class":901},[362,14999,15000],{"class":852,"line":977},[362,15001,868],{"emptyLinePlaceholder":867},[362,15003,15004,15006,15009,15011,15013,15015,15018],{"class":852,"line":994},[362,15005,1173],{"class":1172},[362,15007,15008],{"class":1176}," track",[362,15010,1070],{"class":901},[362,15012,3659],{"class":1182},[362,15014,933],{"class":901},[362,15016,15017],{"class":1182}," vy",[362,15019,1196],{"class":901},[362,15021,15022,15024,15026,15028,15030,15032,15034,15036,15038,15040,15042,15044,15046,15048,15050,15052],{"class":852,"line":1015},[362,15023,14167],{"class":860},[362,15025,395],{"class":1106},[362,15027,1023],{"class":1066},[362,15029,1070],{"class":901},[362,15031,1094],{"class":1093},[362,15033,294],{"class":1097},[362,15035,1094],{"class":1093},[362,15037,933],{"class":901},[362,15039,3617],{"class":1225},[362,15041,395],{"class":1106},[362,15043,4669],{"class":1073},[362,15045,933],{"class":901},[362,15047,3165],{"class":1225},[362,15049,395],{"class":1106},[362,15051,6422],{"class":1073},[362,15053,1050],{"class":901},[362,15055,15056,15059,15061,15063,15065,15067,15069,15071,15073,15075,15077,15079,15081,15083,15085,15087,15089,15091,15093,15095,15097,15099,15101,15103,15105,15107],{"class":852,"line":1034},[362,15057,15058],{"class":860},"    m0 ",[362,15060,395],{"class":1106},[362,15062,2380],{"class":860},[362,15064,902],{"class":901},[362,15066,1235],{"class":1066},[362,15068,1238],{"class":901},[362,15070,1492],{"class":1277},[362,15072,1070],{"class":901},[362,15074,3659],{"class":1066},[362,15076,1090],{"class":901},[362,15078,1074],{"class":1073},[362,15080,933],{"class":901},[362,15082,1607],{"class":1073},[362,15084,3005],{"class":901},[362,15086,2036],{"class":1277},[362,15088,1070],{"class":901},[362,15090,3659],{"class":1066},[362,15092,1090],{"class":901},[362,15094,1074],{"class":1073},[362,15096,933],{"class":901},[362,15098,3379],{"class":1073},[362,15100,3005],{"class":901},[362,15102,3688],{"class":1073},[362,15104,933],{"class":901},[362,15106,15017],{"class":1066},[362,15108,2605],{"class":901},[362,15110,15111,15113,15115,15117,15119,15121,15123,15125,15127,15129,15131,15133,15135,15137,15139,15141,15143,15145,15147,15149,15151,15153,15155,15157,15159,15161,15163,15165],{"class":852,"line":1047},[362,15112,1214],{"class":856},[362,15114,1939],{"class":860},[362,15116,933],{"class":901},[362,15118,1734],{"class":1066},[362,15120,1070],{"class":901},[362,15122,1739],{"class":1066},[362,15124,933],{"class":901},[362,15126,12175],{"class":1066},[362,15128,933],{"class":901},[362,15130,2380],{"class":1066},[362,15132,902],{"class":901},[362,15134,2385],{"class":1066},[362,15136,1070],{"class":901},[362,15138,4103],{"class":1073},[362,15140,2129],{"class":901},[362,15142,1764],{"class":1106},[362,15144,3688],{"class":1073},[362,15146,933],{"class":901},[362,15148,3764],{"class":1277},[362,15150,1070],{"class":901},[362,15152,3659],{"class":1066},[362,15154,3771],{"class":901},[362,15156,3774],{"class":901},[362,15158,2929],{"class":1787},[362,15160,1103],{"class":901},[362,15162,1764],{"class":1106},[362,15164,3783],{"class":1066},[362,15166,1050],{"class":901},[362,15168,15169],{"class":852,"line":1053},[362,15170,868],{"emptyLinePlaceholder":867},[362,15172,15173,15176,15178,15181,15183,15185,15187,15190,15192,15194],{"class":852,"line":1058},[362,15174,15175],{"class":860},"procA",[362,15177,933],{"class":901},[362,15179,15180],{"class":860}," recA ",[362,15182,395],{"class":1106},[362,15184,15008],{"class":1066},[362,15186,1070],{"class":901},[362,15188,15189],{"class":1066},"mA",[362,15191,933],{"class":901},[362,15193,12152],{"class":1073},[362,15195,1050],{"class":901},[362,15197,15198,15201,15203,15206,15208,15210,15212,15215,15217,15219,15221],{"class":852,"line":1079},[362,15199,15200],{"class":860},"procB",[362,15202,933],{"class":901},[362,15204,15205],{"class":860}," recB ",[362,15207,395],{"class":1106},[362,15209,15008],{"class":1066},[362,15211,1070],{"class":901},[362,15213,15214],{"class":1066},"mB",[362,15216,933],{"class":901},[362,15218,9346],{"class":1106},[362,15220,6184],{"class":1073},[362,15222,1050],{"class":901},[362,15224,15225],{"class":852,"line":1567},[362,15226,868],{"emptyLinePlaceholder":867},[362,15228,15229],{"class":852,"line":1577},[362,15230,15231],{"class":2132},"# Find the most ambiguous frame: ellipses closest \u002F most overlapping.\n",[362,15233,15234,15237,15239,15242,15244,15246,15248,15251,15253,15255,15257,15259],{"class":852,"line":1586},[362,15235,15236],{"class":860},"kx ",[362,15238,395],{"class":1106},[362,15240,15241],{"class":1277}," int",[362,15243,1070],{"class":901},[362,15245,1061],{"class":1066},[362,15247,902],{"class":901},[362,15249,15250],{"class":1066},"argmin",[362,15252,1070],{"class":901},[362,15254,1061],{"class":1066},[362,15256,902],{"class":901},[362,15258,3464],{"class":1066},[362,15260,1220],{"class":901},[362,15262,15263,15266,15269,15271,15273,15275,15277,15279,15281,15283,15285,15287,15289,15292,15294,15296,15298,15300,15302,15304,15306,15308,15310,15313],{"class":852,"line":1625},[362,15264,15265],{"class":901},"    [(",[362,15267,15268],{"class":1066},"recA",[362,15270,1090],{"class":901},[362,15272,2046],{"class":1066},[362,15274,6157],{"class":901},[362,15276,1094],{"class":1093},[362,15278,2221],{"class":1097},[362,15280,1094],{"class":1093},[362,15282,3228],{"class":901},[362,15284,3039],{"class":1073},[362,15286,1103],{"class":901},[362,15288,9346],{"class":1106},[362,15290,15291],{"class":1066}," recB",[362,15293,1090],{"class":901},[362,15295,2046],{"class":1066},[362,15297,6157],{"class":901},[362,15299,1094],{"class":1093},[362,15301,2221],{"class":1097},[362,15303,1094],{"class":1093},[362,15305,3228],{"class":901},[362,15307,3039],{"class":1073},[362,15309,2425],{"class":901},[362,15311,15312],{"class":1066},"norm",[362,15314,1962],{"class":901},[362,15316,15317,15320,15322,15324,15326,15328,15330],{"class":852,"line":1657},[362,15318,15319],{"class":856},"     for",[362,15321,3360],{"class":1066},[362,15323,2014],{"class":856},[362,15325,4140],{"class":2017},[362,15327,1070],{"class":901},[362,15329,3444],{"class":1066},[362,15331,15332],{"class":901},")])))\n",[362,15334,15335],{"class":852,"line":1689},[362,15336,868],{"emptyLinePlaceholder":867},[362,15338,15339,15341,15343,15345,15347,15349,15351,15353,15355,15357,15359,15361,15363,15365,15367],{"class":852,"line":1709},[362,15340,3839],{"class":860},[362,15342,933],{"class":901},[362,15344,3844],{"class":860},[362,15346,395],{"class":1106},[362,15348,3335],{"class":860},[362,15350,902],{"class":901},[362,15352,3853],{"class":1066},[362,15354,1070],{"class":901},[362,15356,3858],{"class":1225},[362,15358,395],{"class":1106},[362,15360,1070],{"class":901},[362,15362,4377],{"class":1073},[362,15364,933],{"class":901},[362,15366,3870],{"class":1073},[362,15368,3145],{"class":901},[362,15370,15371,15373,15376,15378,15381,15383,15386,15388,15390,15392,15394,15396,15398,15401,15403,15405,15407,15409,15411,15413,15416,15418],{"class":852,"line":1719},[362,15372,4133],{"class":856},[362,15374,15375],{"class":860}," rec_",[362,15377,933],{"class":901},[362,15379,15380],{"class":860}," proc_",[362,15382,933],{"class":901},[362,15384,15385],{"class":860}," col",[362,15387,933],{"class":901},[362,15389,6968],{"class":860},[362,15391,2014],{"class":856},[362,15393,6973],{"class":901},[362,15395,15268],{"class":860},[362,15397,933],{"class":901},[362,15399,15400],{"class":860}," procA",[362,15402,933],{"class":901},[362,15404,2233],{"class":1093},[362,15406,4091],{"class":1097},[362,15408,1094],{"class":1093},[362,15410,933],{"class":901},[362,15412,2233],{"class":1093},[362,15414,15415],{"class":1097},"target A",[362,15417,1094],{"class":1093},[362,15419,1259],{"class":901},[362,15421,15422,15425,15428,15430,15433,15435,15437,15439,15441,15443,15445,15448,15450],{"class":852,"line":1724},[362,15423,15424],{"class":901},"                               (",[362,15426,15427],{"class":860},"recB",[362,15429,933],{"class":901},[362,15431,15432],{"class":860}," procB",[362,15434,933],{"class":901},[362,15436,2233],{"class":1093},[362,15438,10072],{"class":1097},[362,15440,1094],{"class":1093},[362,15442,933],{"class":901},[362,15444,2233],{"class":1093},[362,15446,15447],{"class":1097},"target B",[362,15449,1094],{"class":1093},[362,15451,7020],{"class":901},[362,15453,15454,15456,15458,15460,15462,15464,15466,15468,15470,15472,15474,15476,15478,15480,15482,15484,15486,15488,15490],{"class":852,"line":1729},[362,15455,14286],{"class":860},[362,15457,395],{"class":1106},[362,15459,2380],{"class":860},[362,15461,902],{"class":901},[362,15463,3464],{"class":1066},[362,15465,1238],{"class":901},[362,15467,3803],{"class":1066},[362,15469,1090],{"class":901},[362,15471,1094],{"class":1093},[362,15473,2652],{"class":1097},[362,15475,1094],{"class":1093},[362,15477,3228],{"class":901},[362,15479,3039],{"class":1073},[362,15481,1103],{"class":901},[362,15483,3820],{"class":856},[362,15485,3823],{"class":1066},[362,15487,2014],{"class":856},[362,15489,15375],{"class":1066},[362,15491,2605],{"class":901},[362,15493,15494,15496,15498,15500,15502,15504,15506,15508,15510,15512,15514,15516,15518,15520,15522,15524,15526,15528,15530,15532,15534,15536,15538,15540,15542,15544,15546,15548],{"class":852,"line":1769},[362,15495,3067],{"class":860},[362,15497,902],{"class":901},[362,15499,3881],{"class":1066},[362,15501,1070],{"class":901},[362,15503,12550],{"class":1066},[362,15505,2956],{"class":901},[362,15507,1607],{"class":1073},[362,15509,1244],{"class":901},[362,15511,12559],{"class":1066},[362,15513,2956],{"class":901},[362,15515,3379],{"class":1073},[362,15517,1244],{"class":901},[362,15519,2233],{"class":1093},[362,15521,4078],{"class":1097},[362,15523,1094],{"class":1093},[362,15525,933],{"class":901},[362,15527,3912],{"class":1225},[362,15529,395],{"class":1106},[362,15531,10189],{"class":1066},[362,15533,933],{"class":901},[362,15535,4098],{"class":1225},[362,15537,395],{"class":1106},[362,15539,3535],{"class":1073},[362,15541,933],{"class":901},[362,15543,4924],{"class":1225},[362,15545,395],{"class":1106},[362,15547,7232],{"class":1066},[362,15549,1050],{"class":901},[362,15551,15552,15554,15556,15558,15560,15562,15564,15567,15569,15572,15574,15576,15578,15580],{"class":852,"line":1802},[362,15553,4159],{"class":860},[362,15555,933],{"class":901},[362,15557,4164],{"class":860},[362,15559,395],{"class":1106},[362,15561,3156],{"class":1066},[362,15563,1070],{"class":901},[362,15565,15566],{"class":1066},"rec_",[362,15568,1090],{"class":901},[362,15570,15571],{"class":1066},"kx",[362,15573,1244],{"class":901},[362,15575,15380],{"class":1066},[362,15577,902],{"class":901},[362,15579,3803],{"class":905},[362,15581,1050],{"class":901},[362,15583,15584,15586,15588,15590,15592,15594,15596,15598,15600,15602,15604,15606,15608,15610,15612,15614,15616,15618,15620,15623],{"class":852,"line":1808},[362,15585,4191],{"class":1066},[362,15587,1070],{"class":901},[362,15589,2778],{"class":1066},[362,15591,933],{"class":901},[362,15593,3288],{"class":1066},[362,15595,933],{"class":901},[362,15597,4204],{"class":1066},[362,15599,933],{"class":901},[362,15601,2793],{"class":1225},[362,15603,395],{"class":1106},[362,15605,2798],{"class":1073},[362,15607,933],{"class":901},[362,15609,4217],{"class":1225},[362,15611,395],{"class":1106},[362,15613,10189],{"class":1066},[362,15615,933],{"class":901},[362,15617,3926],{"class":1225},[362,15619,395],{"class":1106},[362,15621,15622],{"class":1073},"1.6",[362,15624,1050],{"class":901},[362,15626,15627,15629,15631,15633,15635,15637,15639,15641,15643,15645,15647,15649,15651,15653,15655,15657,15659,15661,15663,15665],{"class":852,"line":1814},[362,15628,2778],{"class":860},[362,15630,902],{"class":901},[362,15632,3966],{"class":1066},[362,15634,1238],{"class":901},[362,15636,1492],{"class":1277},[362,15638,1070],{"class":901},[362,15640,15189],{"class":1066},[362,15642,1090],{"class":901},[362,15644,15571],{"class":1066},[362,15646,933],{"class":901},[362,15648,1607],{"class":1073},[362,15650,3005],{"class":901},[362,15652,2036],{"class":1277},[362,15654,1070],{"class":901},[362,15656,15214],{"class":1066},[362,15658,1090],{"class":901},[362,15660,15571],{"class":1066},[362,15662,933],{"class":901},[362,15664,1607],{"class":1073},[362,15666,15667],{"class":901},"])],\n",[362,15669,15670,15673,15675,15677,15679,15681,15683,15685,15687,15689,15691,15693,15695,15697,15699,15701,15703],{"class":852,"line":1819},[362,15671,15672],{"class":901},"           [",[362,15674,1492],{"class":1277},[362,15676,1070],{"class":901},[362,15678,15189],{"class":1066},[362,15680,1090],{"class":901},[362,15682,15571],{"class":1066},[362,15684,933],{"class":901},[362,15686,3379],{"class":1073},[362,15688,3005],{"class":901},[362,15690,2036],{"class":1277},[362,15692,1070],{"class":901},[362,15694,15214],{"class":1066},[362,15696,1090],{"class":901},[362,15698,15571],{"class":1066},[362,15700,933],{"class":901},[362,15702,3379],{"class":1073},[362,15704,15667],{"class":901},[362,15706,15707,15710,15712,15714,15716,15718,15720,15722,15724,15726,15728,15730,15732,15734,15736,15739,15741,15743,15745,15747],{"class":852,"line":1825},[362,15708,15709],{"class":1225},"           marker",[362,15711,395],{"class":1106},[362,15713,1094],{"class":1093},[362,15715,386],{"class":1097},[362,15717,1094],{"class":1093},[362,15719,933],{"class":901},[362,15721,3912],{"class":1225},[362,15723,395],{"class":1106},[362,15725,1094],{"class":1093},[362,15727,4007],{"class":1097},[362,15729,1094],{"class":1093},[362,15731,933],{"class":901},[362,15733,4014],{"class":1225},[362,15735,395],{"class":1106},[362,15737,15738],{"class":1073},"80",[362,15740,933],{"class":901},[362,15742,3951],{"class":1225},[362,15744,395],{"class":1106},[362,15746,4103],{"class":1073},[362,15748,1031],{"class":901},[362,15750,15751,15753,15755,15757,15760,15762],{"class":852,"line":1831},[362,15752,4026],{"class":1225},[362,15754,395],{"class":1106},[362,15756,1094],{"class":1093},[362,15758,15759],{"class":1097},"both detections @ crossing",[362,15761,1094],{"class":1093},[362,15763,1050],{"class":901},[362,15765,15766,15768,15770,15772,15774,15776,15779,15781,15783,15785,15788],{"class":852,"line":1837},[362,15767,2778],{"class":860},[362,15769,902],{"class":901},[362,15771,4295],{"class":1066},[362,15773,1070],{"class":901},[362,15775,10200],{"class":1172},[362,15777,15778],{"class":1097},"\"Failure: at the crossing (frame ",[362,15780,1470],{"class":1073},[362,15782,15571],{"class":1066},[362,15784,1509],{"class":1073},[362,15786,15787],{"class":1097},") each gate covers both detections\"",[362,15789,1050],{"class":901},[362,15791,15792,15794,15796,15798,15800,15802,15804,15806,15808,15810,15812,15814,15816,15818,15820,15822,15824,15826,15828,15830,15832,15834,15836,15838],{"class":852,"line":1843},[362,15793,2778],{"class":860},[362,15795,902],{"class":901},[362,15797,4353],{"class":1066},[362,15799,1070],{"class":901},[362,15801,6831],{"class":1225},[362,15803,395],{"class":1106},[362,15805,4377],{"class":1073},[362,15807,2129],{"class":901},[362,15809,4328],{"class":860},[362,15811,902],{"class":901},[362,15813,4386],{"class":1066},[362,15815,1070],{"class":901},[362,15817,4391],{"class":1225},[362,15819,395],{"class":1106},[362,15821,4396],{"class":1073},[362,15823,2129],{"class":901},[362,15825,4328],{"class":860},[362,15827,902],{"class":901},[362,15829,6756],{"class":1066},[362,15831,1070],{"class":901},[362,15833,1094],{"class":1093},[362,15835,6763],{"class":1097},[362,15837,1094],{"class":1093},[362,15839,1050],{"class":901},[362,15841,15842,15844,15846,15848,15850,15852,15854,15856],{"class":852,"line":1849},[362,15843,1082],{"class":860},[362,15845,902],{"class":901},[362,15847,4407],{"class":1066},[362,15849,4410],{"class":901},[362,15851,4413],{"class":860},[362,15853,902],{"class":901},[362,15855,4418],{"class":1066},[362,15857,1962],{"class":901},[338,15859,15860],{},[4424,15861],{"alt":847,"src":15862},"\u002F_nb\u002F1982c7f2422bc805.png",[1122,15864,15866],{"id":15865},"_6e-success-estimating-a-state-you-never-measure","6e — Success: estimating a state you never measure",[338,15868,15869,15870,15873,15874,15876,15877,15880,15881,15884],{},"The detector reports only position, yet the filter needs ",[342,15871,15872],{},"velocity","\nto predict. The Kalman filter infers it: velocity is an unobserved\npart of the state, and the correlations ",[702,15875,398],{}," induces between position\nand velocity let measurements of position update the velocity belief\ntoo. Below we deliberately initialise velocity at ",[347,15878,15879],{},"zero"," (wrong);\nwithin a handful of frames the estimated ",[702,15882,15883],{},"(vx, vy)"," lock onto the\ntrue values, and the ±2σ band — read straight off the covariance —\nshrinks as confidence grows. Nothing ever measured velocity directly.",[842,15886,15888],{"className":844,"code":15887,"language":846,"meta":847,"style":847},"T = 30\nt = torch.arange(T).float()\ntrue_v = torch.tensor([1.8, 0.7])\ntruth = t[:, None] * true_v                       # constant velocity\ng = torch.Generator().manual_seed(33)\nmeas = truth + 1.2 * torch.randn(T, 2, generator=g)\n\nproc = KalmanCentroid2D(\"centroid\", q=0.02, r=1.44)\nm0 = torch.tensor([0.0, 0.0, 0.0, 0.0])           # WRONG: zero velocity\nrec = run_kalman(proc, m0, torch.eye(4) * 5.0, list(meas), [True] * T)\n\nest = torch.stack([r[\"post_mean\"] for r in rec])   # [x, y, vx, vy]\nstd = torch.stack([r[\"post_cov\"].diagonal().clamp(min=0).sqrt() for r in rec])\n\nfig, (axp, axv) = plt.subplots(1, 2, figsize=(12, 4))\naxp.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2, label=\"truth\")\naxp.scatter(meas[:, 0], meas[:, 1], marker=\"x\", color=\"tab:red\", s=25,\n            alpha=0.6, label=\"position detections\")\naxp.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=3, label=\"estimate\")\naxp.set_title(\"Position (measured)\"); axp.legend(fontsize=8); axp.grid(alpha=0.3)\naxp.set_xlabel(\"x\"); axp.set_ylabel(\"y\")\n\nfor j, name, col in [(2, \"vx\", \"tab:blue\"), (3, \"vy\", \"tab:green\")]:\n    axv.plot(t, est[:, j], \"-\", color=col, label=f\"est {name}\")\n    axv.fill_between(t, est[:, j] - 2 * std[:, j], est[:, j] + 2 * std[:, j],\n                     color=col, alpha=0.15)\n    axv.axhline(float(true_v[j - 2]), ls=\"--\", color=col, lw=1)\naxv.set_title(\"Velocity (never measured) converges to truth\\n(dashed = true, band = ±2σ)\")\naxv.set_xlabel(\"frame\"); axv.set_ylabel(\"velocity\"); axv.legend(fontsize=8)\naxv.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,15889,15890,15898,15920,15944,15966,15989,16027,16031,16066,16099,16155,16159,16198,16256,16260,16310,16376,16435,16459,16525,16577,16611,16615,16678,16736,16796,16816,16873,16898,16949,16967],{"__ignoreMap":847},[362,15891,15892,15894,15896],{"class":852,"line":853},[362,15893,3420],{"class":860},[362,15895,395],{"class":1106},[362,15897,11940],{"class":1073},[362,15899,15900,15902,15904,15906,15908,15910,15912,15914,15916,15918],{"class":852,"line":864},[362,15901,3430],{"class":860},[362,15903,395],{"class":1106},[362,15905,2380],{"class":860},[362,15907,902],{"class":901},[362,15909,3439],{"class":1066},[362,15911,1070],{"class":901},[362,15913,3444],{"class":1066},[362,15915,1489],{"class":901},[362,15917,1492],{"class":1066},[362,15919,1962],{"class":901},[362,15921,15922,15925,15927,15929,15931,15933,15935,15938,15940,15942],{"class":852,"line":871},[362,15923,15924],{"class":860},"true_v ",[362,15926,395],{"class":1106},[362,15928,2380],{"class":860},[362,15930,902],{"class":901},[362,15932,1235],{"class":1066},[362,15934,1238],{"class":901},[362,15936,15937],{"class":1073},"1.8",[362,15939,933],{"class":901},[362,15941,3355],{"class":1073},[362,15943,2605],{"class":901},[362,15945,15946,15948,15950,15952,15954,15956,15958,15960,15963],{"class":852,"line":885},[362,15947,11967],{"class":860},[362,15949,395],{"class":1106},[362,15951,3473],{"class":860},[362,15953,2956],{"class":901},[362,15955,2064],{"class":1787},[362,15957,1103],{"class":901},[362,15959,1764],{"class":1106},[362,15961,15962],{"class":860}," true_v                       ",[362,15964,15965],{"class":2132},"# constant velocity\n",[362,15967,15968,15970,15972,15974,15976,15978,15980,15982,15984,15987],{"class":852,"line":893},[362,15969,3517],{"class":860},[362,15971,395],{"class":1106},[362,15973,2380],{"class":860},[362,15975,902],{"class":901},[362,15977,3526],{"class":1066},[362,15979,2834],{"class":901},[362,15981,1067],{"class":1066},[362,15983,1070],{"class":901},[362,15985,15986],{"class":1073},"33",[362,15988,1050],{"class":901},[362,15990,15991,15993,15995,15997,15999,16001,16003,16005,16007,16009,16011,16013,16015,16017,16019,16021,16023,16025],{"class":852,"line":915},[362,15992,3552],{"class":860},[362,15994,395],{"class":1106},[362,15996,12035],{"class":860},[362,15998,525],{"class":1106},[362,16000,4562],{"class":1073},[362,16002,1764],{"class":1106},[362,16004,2380],{"class":860},[362,16006,902],{"class":901},[362,16008,3571],{"class":1066},[362,16010,1070],{"class":901},[362,16012,3444],{"class":1066},[362,16014,933],{"class":901},[362,16016,3501],{"class":1073},[362,16018,933],{"class":901},[362,16020,3584],{"class":1225},[362,16022,395],{"class":1106},[362,16024,3589],{"class":1066},[362,16026,1050],{"class":901},[362,16028,16029],{"class":852,"line":939},[362,16030,868],{"emptyLinePlaceholder":867},[362,16032,16033,16035,16037,16039,16041,16043,16045,16047,16049,16051,16053,16055,16057,16059,16061,16064],{"class":852,"line":944},[362,16034,3600],{"class":860},[362,16036,395],{"class":1106},[362,16038,1023],{"class":1066},[362,16040,1070],{"class":901},[362,16042,1094],{"class":1093},[362,16044,294],{"class":1097},[362,16046,1094],{"class":1093},[362,16048,933],{"class":901},[362,16050,3617],{"class":1225},[362,16052,395],{"class":1106},[362,16054,12090],{"class":1073},[362,16056,933],{"class":901},[362,16058,3165],{"class":1225},[362,16060,395],{"class":1106},[362,16062,16063],{"class":1073},"1.44",[362,16065,1050],{"class":901},[362,16067,16068,16070,16072,16074,16076,16078,16080,16082,16084,16086,16088,16090,16092,16094,16096],{"class":852,"line":977},[362,16069,12106],{"class":860},[362,16071,395],{"class":1106},[362,16073,2380],{"class":860},[362,16075,902],{"class":901},[362,16077,1235],{"class":1066},[362,16079,1238],{"class":901},[362,16081,13063],{"class":1073},[362,16083,933],{"class":901},[362,16085,3693],{"class":1073},[362,16087,933],{"class":901},[362,16089,3693],{"class":1073},[362,16091,933],{"class":901},[362,16093,3693],{"class":1073},[362,16095,2049],{"class":901},[362,16097,16098],{"class":2132},"           # WRONG: zero velocity\n",[362,16100,16101,16103,16105,16107,16109,16111,16113,16115,16117,16119,16121,16123,16125,16127,16129,16131,16133,16135,16137,16139,16141,16143,16145,16147,16149,16151,16153],{"class":852,"line":994},[362,16102,3743],{"class":860},[362,16104,395],{"class":1106},[362,16106,1734],{"class":1066},[362,16108,1070],{"class":901},[362,16110,1739],{"class":1066},[362,16112,933],{"class":901},[362,16114,12175],{"class":1066},[362,16116,933],{"class":901},[362,16118,2380],{"class":1066},[362,16120,902],{"class":901},[362,16122,2385],{"class":1066},[362,16124,1070],{"class":901},[362,16126,4103],{"class":1073},[362,16128,2129],{"class":901},[362,16130,1764],{"class":1106},[362,16132,9591],{"class":1073},[362,16134,933],{"class":901},[362,16136,3764],{"class":1277},[362,16138,1070],{"class":901},[362,16140,3659],{"class":1066},[362,16142,3771],{"class":901},[362,16144,3774],{"class":901},[362,16146,2929],{"class":1787},[362,16148,1103],{"class":901},[362,16150,1764],{"class":1106},[362,16152,3783],{"class":1066},[362,16154,1050],{"class":901},[362,16156,16157],{"class":852,"line":1015},[362,16158,868],{"emptyLinePlaceholder":867},[362,16160,16161,16163,16165,16167,16169,16171,16173,16175,16177,16179,16181,16183,16185,16187,16189,16191,16193,16195],{"class":852,"line":1034},[362,16162,12220],{"class":860},[362,16164,395],{"class":1106},[362,16166,2380],{"class":860},[362,16168,902],{"class":901},[362,16170,3464],{"class":1066},[362,16172,1238],{"class":901},[362,16174,3803],{"class":1066},[362,16176,1090],{"class":901},[362,16178,1094],{"class":1093},[362,16180,2652],{"class":1097},[362,16182,1094],{"class":1093},[362,16184,1103],{"class":901},[362,16186,3820],{"class":856},[362,16188,3823],{"class":1066},[362,16190,2014],{"class":856},[362,16192,2517],{"class":1066},[362,16194,2049],{"class":901},[362,16196,16197],{"class":2132},"   # [x, y, vx, vy]\n",[362,16199,16200,16203,16205,16207,16209,16211,16213,16215,16217,16219,16221,16223,16225,16228,16230,16232,16234,16236,16238,16240,16242,16244,16246,16248,16250,16252,16254],{"class":852,"line":1047},[362,16201,16202],{"class":860},"std ",[362,16204,395],{"class":1106},[362,16206,2380],{"class":860},[362,16208,902],{"class":901},[362,16210,3464],{"class":1066},[362,16212,1238],{"class":901},[362,16214,3803],{"class":1066},[362,16216,1090],{"class":901},[362,16218,1094],{"class":1093},[362,16220,2690],{"class":1097},[362,16222,1094],{"class":1093},[362,16224,2161],{"class":901},[362,16226,16227],{"class":1066},"diagonal",[362,16229,2834],{"class":901},[362,16231,2888],{"class":1066},[362,16233,1070],{"class":901},[362,16235,2893],{"class":1225},[362,16237,395],{"class":1106},[362,16239,1074],{"class":1073},[362,16241,1489],{"class":901},[362,16243,3054],{"class":1066},[362,16245,4410],{"class":901},[362,16247,3820],{"class":856},[362,16249,3823],{"class":1066},[362,16251,2014],{"class":856},[362,16253,2517],{"class":1066},[362,16255,2605],{"class":901},[362,16257,16258],{"class":852,"line":1053},[362,16259,868],{"emptyLinePlaceholder":867},[362,16261,16262,16264,16266,16268,16271,16273,16276,16278,16280,16282,16284,16286,16288,16290,16292,16294,16296,16298,16300,16302,16304,16306,16308],{"class":852,"line":1058},[362,16263,3839],{"class":860},[362,16265,933],{"class":901},[362,16267,1110],{"class":901},[362,16269,16270],{"class":860},"axp",[362,16272,933],{"class":901},[362,16274,16275],{"class":860}," axv",[362,16277,2129],{"class":901},[362,16279,1107],{"class":1106},[362,16281,3335],{"class":860},[362,16283,902],{"class":901},[362,16285,3853],{"class":1066},[362,16287,1070],{"class":901},[362,16289,1241],{"class":1073},[362,16291,933],{"class":901},[362,16293,3501],{"class":1073},[362,16295,933],{"class":901},[362,16297,6937],{"class":1225},[362,16299,395],{"class":1106},[362,16301,1070],{"class":901},[362,16303,6373],{"class":1073},[362,16305,933],{"class":901},[362,16307,1118],{"class":1073},[362,16309,3145],{"class":901},[362,16311,16312,16314,16316,16318,16320,16322,16324,16326,16328,16330,16332,16334,16336,16338,16340,16342,16344,16346,16348,16350,16352,16354,16356,16358,16360,16362,16364,16366,16368,16370,16372,16374],{"class":852,"line":1079},[362,16313,16270],{"class":860},[362,16315,902],{"class":901},[362,16317,3881],{"class":1066},[362,16319,1070],{"class":901},[362,16321,7080],{"class":1066},[362,16323,2956],{"class":901},[362,16325,1607],{"class":1073},[362,16327,1244],{"class":901},[362,16329,12272],{"class":1066},[362,16331,2956],{"class":901},[362,16333,3379],{"class":1073},[362,16335,1244],{"class":901},[362,16337,2233],{"class":1093},[362,16339,2416],{"class":1097},[362,16341,1094],{"class":1093},[362,16343,933],{"class":901},[362,16345,3912],{"class":1225},[362,16347,395],{"class":1106},[362,16349,1094],{"class":1093},[362,16351,3919],{"class":1097},[362,16353,1094],{"class":1093},[362,16355,933],{"class":901},[362,16357,3926],{"class":1225},[362,16359,395],{"class":1106},[362,16361,3039],{"class":1073},[362,16363,933],{"class":901},[362,16365,4924],{"class":1225},[362,16367,395],{"class":1106},[362,16369,1094],{"class":1093},[362,16371,7080],{"class":1097},[362,16373,1094],{"class":1093},[362,16375,1050],{"class":901},[362,16377,16378,16380,16382,16384,16386,16388,16390,16392,16394,16396,16398,16400,16402,16404,16406,16408,16410,16412,16414,16416,16418,16420,16422,16424,16426,16428,16430,16433],{"class":852,"line":1567},[362,16379,16270],{"class":860},[362,16381,902],{"class":901},[362,16383,3966],{"class":1066},[362,16385,1070],{"class":901},[362,16387,3659],{"class":1066},[362,16389,2956],{"class":901},[362,16391,1607],{"class":1073},[362,16393,1244],{"class":901},[362,16395,3979],{"class":1066},[362,16397,2956],{"class":901},[362,16399,3379],{"class":1073},[362,16401,1244],{"class":901},[362,16403,3988],{"class":1225},[362,16405,395],{"class":1106},[362,16407,1094],{"class":1093},[362,16409,386],{"class":1097},[362,16411,1094],{"class":1093},[362,16413,933],{"class":901},[362,16415,3912],{"class":1225},[362,16417,395],{"class":1106},[362,16419,1094],{"class":1093},[362,16421,4007],{"class":1097},[362,16423,1094],{"class":1093},[362,16425,933],{"class":901},[362,16427,4014],{"class":1225},[362,16429,395],{"class":1106},[362,16431,16432],{"class":1073},"25",[362,16434,1031],{"class":901},[362,16436,16437,16440,16442,16444,16446,16448,16450,16452,16455,16457],{"class":852,"line":1577},[362,16438,16439],{"class":1225},"            alpha",[362,16441,395],{"class":1106},[362,16443,6125],{"class":1073},[362,16445,933],{"class":901},[362,16447,4924],{"class":1225},[362,16449,395],{"class":1106},[362,16451,1094],{"class":1093},[362,16453,16454],{"class":1097},"position detections",[362,16456,1094],{"class":1093},[362,16458,1050],{"class":901},[362,16460,16461,16463,16465,16467,16469,16471,16473,16475,16477,16479,16481,16483,16485,16487,16489,16491,16493,16495,16497,16499,16501,16503,16505,16507,16509,16511,16513,16515,16517,16519,16521,16523],{"class":852,"line":1586},[362,16462,16270],{"class":860},[362,16464,902],{"class":901},[362,16466,3881],{"class":1066},[362,16468,1070],{"class":901},[362,16470,12550],{"class":1066},[362,16472,2956],{"class":901},[362,16474,1607],{"class":1073},[362,16476,1244],{"class":901},[362,16478,12559],{"class":1066},[362,16480,2956],{"class":901},[362,16482,3379],{"class":1073},[362,16484,1244],{"class":901},[362,16486,2233],{"class":1093},[362,16488,4078],{"class":1097},[362,16490,1094],{"class":1093},[362,16492,933],{"class":901},[362,16494,3912],{"class":1225},[362,16496,395],{"class":1106},[362,16498,1094],{"class":1093},[362,16500,4091],{"class":1097},[362,16502,1094],{"class":1093},[362,16504,933],{"class":901},[362,16506,4098],{"class":1225},[362,16508,395],{"class":1106},[362,16510,3535],{"class":1073},[362,16512,933],{"class":901},[362,16514,4924],{"class":1225},[362,16516,395],{"class":1106},[362,16518,1094],{"class":1093},[362,16520,7215],{"class":1097},[362,16522,1094],{"class":1093},[362,16524,1050],{"class":901},[362,16526,16527,16529,16531,16533,16535,16537,16540,16542,16544,16547,16549,16551,16553,16555,16557,16559,16561,16563,16565,16567,16569,16571,16573,16575],{"class":852,"line":1625},[362,16528,16270],{"class":860},[362,16530,902],{"class":901},[362,16532,4295],{"class":1066},[362,16534,1070],{"class":901},[362,16536,1094],{"class":1093},[362,16538,16539],{"class":1097},"Position (measured)",[362,16541,1094],{"class":1093},[362,16543,2129],{"class":901},[362,16545,16546],{"class":860},"; axp",[362,16548,902],{"class":901},[362,16550,4353],{"class":1066},[362,16552,1070],{"class":901},[362,16554,6831],{"class":1225},[362,16556,395],{"class":1106},[362,16558,4377],{"class":1073},[362,16560,2129],{"class":901},[362,16562,16546],{"class":860},[362,16564,902],{"class":901},[362,16566,4386],{"class":1066},[362,16568,1070],{"class":901},[362,16570,4391],{"class":1225},[362,16572,395],{"class":1106},[362,16574,4396],{"class":1073},[362,16576,1050],{"class":901},[362,16578,16579,16581,16583,16585,16587,16589,16591,16593,16595,16597,16599,16601,16603,16605,16607,16609],{"class":852,"line":1657},[362,16580,16270],{"class":860},[362,16582,902],{"class":901},[362,16584,4315],{"class":1066},[362,16586,1070],{"class":901},[362,16588,1094],{"class":1093},[362,16590,386],{"class":1097},[362,16592,1094],{"class":1093},[362,16594,2129],{"class":901},[362,16596,16546],{"class":860},[362,16598,902],{"class":901},[362,16600,4333],{"class":1066},[362,16602,1070],{"class":901},[362,16604,1094],{"class":1093},[362,16606,4340],{"class":1097},[362,16608,1094],{"class":1093},[362,16610,1050],{"class":901},[362,16612,16613],{"class":852,"line":1689},[362,16614,868],{"emptyLinePlaceholder":867},[362,16616,16617,16619,16621,16623,16626,16628,16630,16632,16634,16636,16638,16640,16643,16645,16647,16649,16651,16653,16655,16657,16659,16661,16663,16666,16668,16670,16672,16674,16676],{"class":852,"line":1709},[362,16618,4133],{"class":856},[362,16620,6963],{"class":860},[362,16622,933],{"class":901},[362,16624,16625],{"class":860}," name",[362,16627,933],{"class":901},[362,16629,10059],{"class":860},[362,16631,2014],{"class":856},[362,16633,6973],{"class":901},[362,16635,3039],{"class":1073},[362,16637,933],{"class":901},[362,16639,2233],{"class":1093},[362,16641,16642],{"class":1097},"vx",[362,16644,1094],{"class":1093},[362,16646,933],{"class":901},[362,16648,2233],{"class":1093},[362,16650,4091],{"class":1097},[362,16652,1094],{"class":1093},[362,16654,3771],{"class":901},[362,16656,1110],{"class":901},[362,16658,3535],{"class":1073},[362,16660,933],{"class":901},[362,16662,2233],{"class":1093},[362,16664,16665],{"class":1097},"vy",[362,16667,1094],{"class":1093},[362,16669,933],{"class":901},[362,16671,2233],{"class":1093},[362,16673,4224],{"class":1097},[362,16675,1094],{"class":1093},[362,16677,7020],{"class":901},[362,16679,16680,16683,16685,16687,16689,16691,16693,16695,16697,16699,16701,16703,16705,16707,16709,16711,16713,16715,16717,16719,16721,16723,16726,16728,16730,16732,16734],{"class":852,"line":1719},[362,16681,16682],{"class":860},"    axv",[362,16684,902],{"class":901},[362,16686,3881],{"class":1066},[362,16688,1070],{"class":901},[362,16690,7033],{"class":1066},[362,16692,933],{"class":901},[362,16694,12559],{"class":1066},[362,16696,2956],{"class":901},[362,16698,6963],{"class":1066},[362,16700,1244],{"class":901},[362,16702,2233],{"class":1093},[362,16704,2416],{"class":1097},[362,16706,1094],{"class":1093},[362,16708,933],{"class":901},[362,16710,3912],{"class":1225},[362,16712,395],{"class":1106},[362,16714,10189],{"class":1066},[362,16716,933],{"class":901},[362,16718,4924],{"class":1225},[362,16720,395],{"class":1106},[362,16722,10200],{"class":1172},[362,16724,16725],{"class":1097},"\"est ",[362,16727,1470],{"class":1073},[362,16729,7232],{"class":1066},[362,16731,1509],{"class":1073},[362,16733,1094],{"class":1097},[362,16735,1050],{"class":901},[362,16737,16738,16740,16742,16745,16747,16749,16751,16753,16755,16757,16759,16761,16763,16765,16768,16770,16772,16774,16776,16778,16780,16782,16784,16786,16788,16790,16792,16794],{"class":852,"line":1724},[362,16739,16682],{"class":860},[362,16741,902],{"class":901},[362,16743,16744],{"class":1066},"fill_between",[362,16746,1070],{"class":901},[362,16748,7033],{"class":1066},[362,16750,933],{"class":901},[362,16752,12559],{"class":1066},[362,16754,2956],{"class":901},[362,16756,6963],{"class":1066},[362,16758,1103],{"class":901},[362,16760,9346],{"class":1106},[362,16762,3501],{"class":1073},[362,16764,1764],{"class":1106},[362,16766,16767],{"class":1066}," std",[362,16769,2956],{"class":901},[362,16771,6963],{"class":1066},[362,16773,1244],{"class":901},[362,16775,12559],{"class":1066},[362,16777,2956],{"class":901},[362,16779,6963],{"class":1066},[362,16781,1103],{"class":901},[362,16783,2377],{"class":1106},[362,16785,3501],{"class":1073},[362,16787,1764],{"class":1106},[362,16789,16767],{"class":1066},[362,16791,2956],{"class":901},[362,16793,6963],{"class":1066},[362,16795,1545],{"class":901},[362,16797,16798,16801,16803,16805,16807,16809,16811,16814],{"class":852,"line":1729},[362,16799,16800],{"class":1225},"                     color",[362,16802,395],{"class":1106},[362,16804,10189],{"class":1066},[362,16806,933],{"class":901},[362,16808,6427],{"class":1225},[362,16810,395],{"class":1106},[362,16812,16813],{"class":1073},"0.15",[362,16815,1050],{"class":901},[362,16817,16818,16820,16822,16825,16827,16829,16831,16834,16836,16839,16841,16843,16845,16847,16849,16851,16853,16855,16857,16859,16861,16863,16865,16867,16869,16871],{"class":852,"line":1769},[362,16819,16682],{"class":860},[362,16821,902],{"class":901},[362,16823,16824],{"class":1066},"axhline",[362,16826,1070],{"class":901},[362,16828,1492],{"class":1277},[362,16830,1070],{"class":901},[362,16832,16833],{"class":1066},"true_v",[362,16835,1090],{"class":901},[362,16837,16838],{"class":1066},"j ",[362,16840,2416],{"class":1106},[362,16842,3501],{"class":1073},[362,16844,3005],{"class":901},[362,16846,6592],{"class":1225},[362,16848,395],{"class":1106},[362,16850,1094],{"class":1093},[362,16852,6198],{"class":1097},[362,16854,1094],{"class":1093},[362,16856,933],{"class":901},[362,16858,3912],{"class":1225},[362,16860,395],{"class":1106},[362,16862,10189],{"class":1066},[362,16864,933],{"class":901},[362,16866,3926],{"class":1225},[362,16868,395],{"class":1106},[362,16870,1241],{"class":1073},[362,16872,1050],{"class":901},[362,16874,16875,16878,16880,16882,16884,16886,16889,16891,16894,16896],{"class":852,"line":1802},[362,16876,16877],{"class":860},"axv",[362,16879,902],{"class":901},[362,16881,4295],{"class":1066},[362,16883,1070],{"class":901},[362,16885,1094],{"class":1093},[362,16887,16888],{"class":1097},"Velocity (never measured) converges to truth",[362,16890,14678],{"class":10771},[362,16892,16893],{"class":1097},"(dashed = true, band = ±2σ)",[362,16895,1094],{"class":1093},[362,16897,1050],{"class":901},[362,16899,16900,16902,16904,16906,16908,16910,16912,16914,16916,16919,16921,16923,16925,16927,16929,16931,16933,16935,16937,16939,16941,16943,16945,16947],{"class":852,"line":1808},[362,16901,16877],{"class":860},[362,16903,902],{"class":901},[362,16905,4315],{"class":1066},[362,16907,1070],{"class":901},[362,16909,1094],{"class":1093},[362,16911,209],{"class":1097},[362,16913,1094],{"class":1093},[362,16915,2129],{"class":901},[362,16917,16918],{"class":860},"; axv",[362,16920,902],{"class":901},[362,16922,4333],{"class":1066},[362,16924,1070],{"class":901},[362,16926,1094],{"class":1093},[362,16928,15872],{"class":1097},[362,16930,1094],{"class":1093},[362,16932,2129],{"class":901},[362,16934,16918],{"class":860},[362,16936,902],{"class":901},[362,16938,4353],{"class":1066},[362,16940,1070],{"class":901},[362,16942,6831],{"class":1225},[362,16944,395],{"class":1106},[362,16946,4377],{"class":1073},[362,16948,1050],{"class":901},[362,16950,16951,16953,16955,16957,16959,16961,16963,16965],{"class":852,"line":1814},[362,16952,16877],{"class":860},[362,16954,902],{"class":901},[362,16956,4386],{"class":1066},[362,16958,1070],{"class":901},[362,16960,4391],{"class":1225},[362,16962,395],{"class":1106},[362,16964,4396],{"class":1073},[362,16966,1050],{"class":901},[362,16968,16969,16971,16973,16975,16977,16979,16981,16983],{"class":852,"line":1819},[362,16970,1082],{"class":860},[362,16972,902],{"class":901},[362,16974,4407],{"class":1066},[362,16976,4410],{"class":901},[362,16978,4413],{"class":860},[362,16980,902],{"class":901},[362,16982,4418],{"class":1066},[362,16984,1962],{"class":901},[338,16986,16987],{},[4424,16988],{"alt":847,"src":16989},"\u002F_nb\u002Ff2599b042a1d02b5.png",[1122,16991,16993],{"id":16992},"_6f-failure-then-fix-a-clutter-detection-outlier","6f — Failure, then fix: a clutter detection (outlier)",[338,16995,16996,16997,16999,17000,17003],{},"Kalman assumes Gaussian noise, so a single gross outlier — a false\npositive, a detection snapped to the wrong object — is wildly\nunlikely under the model, and the filter has no idea it should\ndistrust it. Fused naively, one outlier yanks the estimate off the\ntrack for several frames (left). The standard defense is a ",[347,16998,212],{},":\nreject any detection whose Mahalanobis distance to the predictive\ndistribution is too large (here χ² > 9.21, the 99% bound for 2 dof),\ntreating it as a miss. The same two outliers are now rejected and the\ntrack stays clean (right). This is exactly why association in a real\ntracker runs ",[342,17001,17002],{},"through"," the predictive gate.",[842,17005,17007],{"className":844,"code":17006,"language":846,"meta":847,"style":847},"T = 26\nt = torch.arange(T).float()\ntruth = torch.stack([2.0 * t, 15.0 + torch.zeros(T)], dim=1)\ng = torch.Generator().manual_seed(35)\nmeas = truth + 0.8 * torch.randn(T, 2, generator=g)\nmeas[10] = torch.tensor([20.0, 45.0])             # clutter\nmeas[18] = torch.tensor([36.0, -12.0])            # clutter\n\ndef make_proc():\n    return KalmanCentroid2D(\"centroid\", q=0.05, r=0.7)\nm0 = torch.tensor([0.0, 15.0, 2.0, 0.0])\nrec_no = run_kalman(make_proc(), m0, torch.eye(4) * 2.0, list(meas), [True] * T)\nrec_g = run_kalman(make_proc(), m0, torch.eye(4) * 2.0, list(meas), [True] * T,\n                   gate_chi2=9.21)\n\nfig, axes = plt.subplots(1, 2, figsize=(13, 4))\nfor ax, rec, title in [(axes[0], rec_no, \"No gate: outliers corrupt the track\"),\n                       (axes[1], rec_g, \"Mahalanobis gate: outliers rejected\")]:\n    est = torch.stack([r[\"post_mean\"][:2] for r in rec])\n    ax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.6\", lw=2, label=\"truth\")\n    ax.scatter(meas[:, 0], meas[:, 1], marker=\"x\", color=\"tab:red\", s=30,\n               alpha=0.6, label=\"detections\")\n    ax.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=3, label=\"estimate\")\n    gated = [k for k, r in enumerate(rec) if r[\"gated\"]]\n    if gated:\n        ax.scatter(meas[gated, 0], meas[gated, 1], s=160, facecolors=\"none\",\n                   edgecolors=\"tab:green\", linewidths=2, label=\"rejected\")\n    ax.set_title(title); ax.legend(fontsize=8); ax.grid(alpha=0.3)\n    ax.set_xlabel(\"x\"); ax.set_ylabel(\"y\")\nplt.tight_layout(); plt.show()\n\n",[702,17008,17009,17017,17039,17086,17108,17146,17179,17215,17219,17228,17260,17290,17348,17405,17417,17421,17461,17502,17529,17569,17635,17693,17715,17781,17825,17834,17891,17927,17974,18008],{"__ignoreMap":847},[362,17010,17011,17013,17015],{"class":852,"line":853},[362,17012,3420],{"class":860},[362,17014,395],{"class":1106},[362,17016,11042],{"class":1073},[362,17018,17019,17021,17023,17025,17027,17029,17031,17033,17035,17037],{"class":852,"line":864},[362,17020,3430],{"class":860},[362,17022,395],{"class":1106},[362,17024,2380],{"class":860},[362,17026,902],{"class":901},[362,17028,3439],{"class":1066},[362,17030,1070],{"class":901},[362,17032,3444],{"class":1066},[362,17034,1489],{"class":901},[362,17036,1492],{"class":1066},[362,17038,1962],{"class":901},[362,17040,17041,17043,17045,17047,17049,17051,17053,17055,17057,17059,17061,17064,17066,17068,17070,17072,17074,17076,17078,17080,17082,17084],{"class":852,"line":871},[362,17042,11967],{"class":860},[362,17044,395],{"class":1106},[362,17046,2380],{"class":860},[362,17048,902],{"class":901},[362,17050,3464],{"class":1066},[362,17052,1238],{"class":901},[362,17054,2798],{"class":1073},[362,17056,1764],{"class":1106},[362,17058,3473],{"class":1066},[362,17060,933],{"class":901},[362,17062,17063],{"class":1073}," 15.0",[362,17065,2377],{"class":1106},[362,17067,2380],{"class":1066},[362,17069,902],{"class":901},[362,17071,1350],{"class":1066},[362,17073,1070],{"class":901},[362,17075,3444],{"class":1066},[362,17077,1291],{"class":901},[362,17079,3506],{"class":1225},[362,17081,395],{"class":1106},[362,17083,1241],{"class":1073},[362,17085,1050],{"class":901},[362,17087,17088,17090,17092,17094,17096,17098,17100,17102,17104,17106],{"class":852,"line":885},[362,17089,3517],{"class":860},[362,17091,395],{"class":1106},[362,17093,2380],{"class":860},[362,17095,902],{"class":901},[362,17097,3526],{"class":1066},[362,17099,2834],{"class":901},[362,17101,1067],{"class":1066},[362,17103,1070],{"class":901},[362,17105,11521],{"class":1073},[362,17107,1050],{"class":901},[362,17109,17110,17112,17114,17116,17118,17120,17122,17124,17126,17128,17130,17132,17134,17136,17138,17140,17142,17144],{"class":852,"line":893},[362,17111,3552],{"class":860},[362,17113,395],{"class":1106},[362,17115,12035],{"class":860},[362,17117,525],{"class":1106},[362,17119,11988],{"class":1073},[362,17121,1764],{"class":1106},[362,17123,2380],{"class":860},[362,17125,902],{"class":901},[362,17127,3571],{"class":1066},[362,17129,1070],{"class":901},[362,17131,3444],{"class":1066},[362,17133,933],{"class":901},[362,17135,3501],{"class":1073},[362,17137,933],{"class":901},[362,17139,3584],{"class":1225},[362,17141,395],{"class":1106},[362,17143,3589],{"class":1066},[362,17145,1050],{"class":901},[362,17147,17148,17150,17152,17154,17156,17158,17160,17162,17164,17166,17169,17171,17174,17176],{"class":852,"line":915},[362,17149,3659],{"class":860},[362,17151,1090],{"class":901},[362,17153,12776],{"class":1073},[362,17155,1103],{"class":901},[362,17157,1107],{"class":1106},[362,17159,2380],{"class":860},[362,17161,902],{"class":901},[362,17163,1235],{"class":1066},[362,17165,1238],{"class":901},[362,17167,17168],{"class":1073},"20.0",[362,17170,933],{"class":901},[362,17172,17173],{"class":1073}," 45.0",[362,17175,2049],{"class":901},[362,17177,17178],{"class":2132},"             # clutter\n",[362,17180,17181,17183,17185,17188,17190,17192,17194,17196,17198,17200,17203,17205,17207,17210,17212],{"class":852,"line":939},[362,17182,3659],{"class":860},[362,17184,1090],{"class":901},[362,17186,17187],{"class":1073},"18",[362,17189,1103],{"class":901},[362,17191,1107],{"class":1106},[362,17193,2380],{"class":860},[362,17195,902],{"class":901},[362,17197,1235],{"class":1066},[362,17199,1238],{"class":901},[362,17201,17202],{"class":1073},"36.0",[362,17204,933],{"class":901},[362,17206,9346],{"class":1106},[362,17208,17209],{"class":1073},"12.0",[362,17211,2049],{"class":901},[362,17213,17214],{"class":2132},"            # clutter\n",[362,17216,17217],{"class":852,"line":944},[362,17218,868],{"emptyLinePlaceholder":867},[362,17220,17221,17223,17226],{"class":852,"line":977},[362,17222,1173],{"class":1172},[362,17224,17225],{"class":1176}," make_proc",[362,17227,1564],{"class":901},[362,17229,17230,17232,17234,17236,17238,17240,17242,17244,17246,17248,17250,17252,17254,17256,17258],{"class":852,"line":994},[362,17231,1214],{"class":856},[362,17233,1023],{"class":1066},[362,17235,1070],{"class":901},[362,17237,1094],{"class":1093},[362,17239,294],{"class":1097},[362,17241,1094],{"class":1093},[362,17243,933],{"class":901},[362,17245,3617],{"class":1225},[362,17247,395],{"class":1106},[362,17249,4669],{"class":1073},[362,17251,933],{"class":901},[362,17253,3165],{"class":1225},[362,17255,395],{"class":1106},[362,17257,11530],{"class":1073},[362,17259,1050],{"class":901},[362,17261,17262,17264,17266,17268,17270,17272,17274,17276,17278,17280,17282,17284,17286,17288],{"class":852,"line":1015},[362,17263,12106],{"class":860},[362,17265,395],{"class":1106},[362,17267,2380],{"class":860},[362,17269,902],{"class":901},[362,17271,1235],{"class":1066},[362,17273,1238],{"class":901},[362,17275,13063],{"class":1073},[362,17277,933],{"class":901},[362,17279,17063],{"class":1073},[362,17281,933],{"class":901},[362,17283,3688],{"class":1073},[362,17285,933],{"class":901},[362,17287,3693],{"class":1073},[362,17289,2605],{"class":901},[362,17291,17292,17295,17297,17299,17301,17304,17306,17308,17310,17312,17314,17316,17318,17320,17322,17324,17326,17328,17330,17332,17334,17336,17338,17340,17342,17344,17346],{"class":852,"line":1034},[362,17293,17294],{"class":860},"rec_no ",[362,17296,395],{"class":1106},[362,17298,1734],{"class":1066},[362,17300,1070],{"class":901},[362,17302,17303],{"class":1066},"make_proc",[362,17305,2632],{"class":901},[362,17307,12175],{"class":1066},[362,17309,933],{"class":901},[362,17311,2380],{"class":1066},[362,17313,902],{"class":901},[362,17315,2385],{"class":1066},[362,17317,1070],{"class":901},[362,17319,4103],{"class":1073},[362,17321,2129],{"class":901},[362,17323,1764],{"class":1106},[362,17325,3688],{"class":1073},[362,17327,933],{"class":901},[362,17329,3764],{"class":1277},[362,17331,1070],{"class":901},[362,17333,3659],{"class":1066},[362,17335,3771],{"class":901},[362,17337,3774],{"class":901},[362,17339,2929],{"class":1787},[362,17341,1103],{"class":901},[362,17343,1764],{"class":1106},[362,17345,3783],{"class":1066},[362,17347,1050],{"class":901},[362,17349,17350,17353,17355,17357,17359,17361,17363,17365,17367,17369,17371,17373,17375,17377,17379,17381,17383,17385,17387,17389,17391,17393,17395,17397,17399,17401,17403],{"class":852,"line":1047},[362,17351,17352],{"class":860},"rec_g ",[362,17354,395],{"class":1106},[362,17356,1734],{"class":1066},[362,17358,1070],{"class":901},[362,17360,17303],{"class":1066},[362,17362,2632],{"class":901},[362,17364,12175],{"class":1066},[362,17366,933],{"class":901},[362,17368,2380],{"class":1066},[362,17370,902],{"class":901},[362,17372,2385],{"class":1066},[362,17374,1070],{"class":901},[362,17376,4103],{"class":1073},[362,17378,2129],{"class":901},[362,17380,1764],{"class":1106},[362,17382,3688],{"class":1073},[362,17384,933],{"class":901},[362,17386,3764],{"class":1277},[362,17388,1070],{"class":901},[362,17390,3659],{"class":1066},[362,17392,3771],{"class":901},[362,17394,3774],{"class":901},[362,17396,2929],{"class":1787},[362,17398,1103],{"class":901},[362,17400,1764],{"class":1106},[362,17402,3783],{"class":1066},[362,17404,1031],{"class":901},[362,17406,17407,17410,17412,17415],{"class":852,"line":1053},[362,17408,17409],{"class":1225},"                   gate_chi2",[362,17411,395],{"class":1106},[362,17413,17414],{"class":1073},"9.21",[362,17416,1050],{"class":901},[362,17418,17419],{"class":852,"line":1058},[362,17420,868],{"emptyLinePlaceholder":867},[362,17422,17423,17425,17427,17429,17431,17433,17435,17437,17439,17441,17443,17445,17447,17449,17451,17453,17455,17457,17459],{"class":852,"line":1079},[362,17424,3839],{"class":860},[362,17426,933],{"class":901},[362,17428,6916],{"class":860},[362,17430,395],{"class":1106},[362,17432,3335],{"class":860},[362,17434,902],{"class":901},[362,17436,3853],{"class":1066},[362,17438,1070],{"class":901},[362,17440,1241],{"class":1073},[362,17442,933],{"class":901},[362,17444,3501],{"class":1073},[362,17446,933],{"class":901},[362,17448,6937],{"class":1225},[362,17450,395],{"class":1106},[362,17452,1070],{"class":901},[362,17454,11144],{"class":1073},[362,17456,933],{"class":901},[362,17458,1118],{"class":1073},[362,17460,3145],{"class":901},[362,17462,17463,17465,17467,17469,17471,17473,17476,17478,17480,17482,17484,17486,17488,17491,17493,17495,17498,17500],{"class":852,"line":1567},[362,17464,4133],{"class":856},[362,17466,6958],{"class":860},[362,17468,933],{"class":901},[362,17470,2517],{"class":860},[362,17472,933],{"class":901},[362,17474,17475],{"class":860}," title ",[362,17477,2014],{"class":856},[362,17479,6973],{"class":901},[362,17481,6976],{"class":860},[362,17483,1090],{"class":901},[362,17485,1074],{"class":1073},[362,17487,1244],{"class":901},[362,17489,17490],{"class":860}," rec_no",[362,17492,933],{"class":901},[362,17494,2233],{"class":1093},[362,17496,17497],{"class":1097},"No gate: outliers corrupt the track",[362,17499,1094],{"class":1093},[362,17501,1259],{"class":901},[362,17503,17504,17507,17509,17511,17513,17515,17518,17520,17522,17525,17527],{"class":852,"line":1577},[362,17505,17506],{"class":901},"                       (",[362,17508,6976],{"class":860},[362,17510,1090],{"class":901},[362,17512,1241],{"class":1073},[362,17514,1244],{"class":901},[362,17516,17517],{"class":860}," rec_g",[362,17519,933],{"class":901},[362,17521,2233],{"class":1093},[362,17523,17524],{"class":1097},"Mahalanobis gate: outliers rejected",[362,17526,1094],{"class":1093},[362,17528,7020],{"class":901},[362,17530,17531,17533,17535,17537,17539,17541,17543,17545,17547,17549,17551,17553,17555,17557,17559,17561,17563,17565,17567],{"class":852,"line":1586},[362,17532,14286],{"class":860},[362,17534,395],{"class":1106},[362,17536,2380],{"class":860},[362,17538,902],{"class":901},[362,17540,3464],{"class":1066},[362,17542,1238],{"class":901},[362,17544,3803],{"class":1066},[362,17546,1090],{"class":901},[362,17548,1094],{"class":1093},[362,17550,2652],{"class":1097},[362,17552,1094],{"class":1093},[362,17554,3228],{"class":901},[362,17556,3039],{"class":1073},[362,17558,1103],{"class":901},[362,17560,3820],{"class":856},[362,17562,3823],{"class":1066},[362,17564,2014],{"class":856},[362,17566,2517],{"class":1066},[362,17568,2605],{"class":901},[362,17570,17571,17573,17575,17577,17579,17581,17583,17585,17587,17589,17591,17593,17595,17597,17599,17601,17603,17605,17607,17609,17611,17613,17615,17617,17619,17621,17623,17625,17627,17629,17631,17633],{"class":852,"line":1625},[362,17572,3067],{"class":860},[362,17574,902],{"class":901},[362,17576,3881],{"class":1066},[362,17578,1070],{"class":901},[362,17580,7080],{"class":1066},[362,17582,2956],{"class":901},[362,17584,1607],{"class":1073},[362,17586,1244],{"class":901},[362,17588,12272],{"class":1066},[362,17590,2956],{"class":901},[362,17592,3379],{"class":1073},[362,17594,1244],{"class":901},[362,17596,2233],{"class":1093},[362,17598,2416],{"class":1097},[362,17600,1094],{"class":1093},[362,17602,933],{"class":901},[362,17604,3912],{"class":1225},[362,17606,395],{"class":1106},[362,17608,1094],{"class":1093},[362,17610,6125],{"class":1097},[362,17612,1094],{"class":1093},[362,17614,933],{"class":901},[362,17616,3926],{"class":1225},[362,17618,395],{"class":1106},[362,17620,3039],{"class":1073},[362,17622,933],{"class":901},[362,17624,4924],{"class":1225},[362,17626,395],{"class":1106},[362,17628,1094],{"class":1093},[362,17630,7080],{"class":1097},[362,17632,1094],{"class":1093},[362,17634,1050],{"class":901},[362,17636,17637,17639,17641,17643,17645,17647,17649,17651,17653,17655,17657,17659,17661,17663,17665,17667,17669,17671,17673,17675,17677,17679,17681,17683,17685,17687,17689,17691],{"class":852,"line":1657},[362,17638,3067],{"class":860},[362,17640,902],{"class":901},[362,17642,3966],{"class":1066},[362,17644,1070],{"class":901},[362,17646,3659],{"class":1066},[362,17648,2956],{"class":901},[362,17650,1607],{"class":1073},[362,17652,1244],{"class":901},[362,17654,3979],{"class":1066},[362,17656,2956],{"class":901},[362,17658,3379],{"class":1073},[362,17660,1244],{"class":901},[362,17662,3988],{"class":1225},[362,17664,395],{"class":1106},[362,17666,1094],{"class":1093},[362,17668,386],{"class":1097},[362,17670,1094],{"class":1093},[362,17672,933],{"class":901},[362,17674,3912],{"class":1225},[362,17676,395],{"class":1106},[362,17678,1094],{"class":1093},[362,17680,4007],{"class":1097},[362,17682,1094],{"class":1093},[362,17684,933],{"class":901},[362,17686,4014],{"class":1225},[362,17688,395],{"class":1106},[362,17690,7137],{"class":1073},[362,17692,1031],{"class":901},[362,17694,17695,17697,17699,17701,17703,17705,17707,17709,17711,17713],{"class":852,"line":1689},[362,17696,14482],{"class":1225},[362,17698,395],{"class":1106},[362,17700,6125],{"class":1073},[362,17702,933],{"class":901},[362,17704,4924],{"class":1225},[362,17706,395],{"class":1106},[362,17708,1094],{"class":1093},[362,17710,206],{"class":1097},[362,17712,1094],{"class":1093},[362,17714,1050],{"class":901},[362,17716,17717,17719,17721,17723,17725,17727,17729,17731,17733,17735,17737,17739,17741,17743,17745,17747,17749,17751,17753,17755,17757,17759,17761,17763,17765,17767,17769,17771,17773,17775,17777,17779],{"class":852,"line":1709},[362,17718,3067],{"class":860},[362,17720,902],{"class":901},[362,17722,3881],{"class":1066},[362,17724,1070],{"class":901},[362,17726,12550],{"class":1066},[362,17728,2956],{"class":901},[362,17730,1607],{"class":1073},[362,17732,1244],{"class":901},[362,17734,12559],{"class":1066},[362,17736,2956],{"class":901},[362,17738,3379],{"class":1073},[362,17740,1244],{"class":901},[362,17742,2233],{"class":1093},[362,17744,4078],{"class":1097},[362,17746,1094],{"class":1093},[362,17748,933],{"class":901},[362,17750,3912],{"class":1225},[362,17752,395],{"class":1106},[362,17754,1094],{"class":1093},[362,17756,4091],{"class":1097},[362,17758,1094],{"class":1093},[362,17760,933],{"class":901},[362,17762,4098],{"class":1225},[362,17764,395],{"class":1106},[362,17766,3535],{"class":1073},[362,17768,933],{"class":901},[362,17770,4924],{"class":1225},[362,17772,395],{"class":1106},[362,17774,1094],{"class":1093},[362,17776,7215],{"class":1097},[362,17778,1094],{"class":1093},[362,17780,1050],{"class":901},[362,17782,17783,17786,17788,17790,17793,17795,17797,17799,17801,17803,17805,17807,17809,17811,17813,17815,17817,17819,17821,17823],{"class":852,"line":1719},[362,17784,17785],{"class":860},"    gated ",[362,17787,395],{"class":1106},[362,17789,3774],{"class":901},[362,17791,17792],{"class":860},"k ",[362,17794,4133],{"class":856},[362,17796,2006],{"class":860},[362,17798,933],{"class":901},[362,17800,3823],{"class":860},[362,17802,2014],{"class":856},[362,17804,2018],{"class":2017},[362,17806,1070],{"class":901},[362,17808,2742],{"class":1066},[362,17810,2129],{"class":901},[362,17812,2052],{"class":856},[362,17814,3165],{"class":860},[362,17816,1090],{"class":901},[362,17818,1094],{"class":1093},[362,17820,2268],{"class":1097},[362,17822,1094],{"class":1093},[362,17824,5954],{"class":901},[362,17826,17827,17829,17832],{"class":852,"line":1724},[362,17828,5129],{"class":856},[362,17830,17831],{"class":860}," gated",[362,17833,2289],{"class":901},[362,17835,17836,17839,17841,17843,17845,17847,17849,17851,17853,17855,17857,17859,17861,17863,17865,17867,17869,17871,17873,17875,17877,17880,17882,17884,17887,17889],{"class":852,"line":1729},[362,17837,17838],{"class":860},"        ax",[362,17840,902],{"class":901},[362,17842,3966],{"class":1066},[362,17844,1070],{"class":901},[362,17846,3659],{"class":1066},[362,17848,1090],{"class":901},[362,17850,2268],{"class":1066},[362,17852,933],{"class":901},[362,17854,1607],{"class":1073},[362,17856,1244],{"class":901},[362,17858,3979],{"class":1066},[362,17860,1090],{"class":901},[362,17862,2268],{"class":1066},[362,17864,933],{"class":901},[362,17866,3379],{"class":1073},[362,17868,1244],{"class":901},[362,17870,4014],{"class":1225},[362,17872,395],{"class":1106},[362,17874,9674],{"class":1073},[362,17876,933],{"class":901},[362,17878,17879],{"class":1225}," facecolors",[362,17881,395],{"class":1106},[362,17883,1094],{"class":1093},[362,17885,17886],{"class":1097},"none",[362,17888,1094],{"class":1093},[362,17890,1031],{"class":901},[362,17892,17893,17896,17898,17900,17902,17904,17906,17908,17910,17912,17914,17916,17918,17920,17923,17925],{"class":852,"line":1769},[362,17894,17895],{"class":1225},"                   edgecolors",[362,17897,395],{"class":1106},[362,17899,1094],{"class":1093},[362,17901,4224],{"class":1097},[362,17903,1094],{"class":1093},[362,17905,933],{"class":901},[362,17907,8605],{"class":1225},[362,17909,395],{"class":1106},[362,17911,3039],{"class":1073},[362,17913,933],{"class":901},[362,17915,4924],{"class":1225},[362,17917,395],{"class":1106},[362,17919,1094],{"class":1093},[362,17921,17922],{"class":1097},"rejected",[362,17924,1094],{"class":1093},[362,17926,1050],{"class":901},[362,17928,17929,17931,17933,17935,17937,17940,17942,17944,17946,17948,17950,17952,17954,17956,17958,17960,17962,17964,17966,17968,17970,17972],{"class":852,"line":1802},[362,17930,3067],{"class":860},[362,17932,902],{"class":901},[362,17934,4295],{"class":1066},[362,17936,1070],{"class":901},[362,17938,17939],{"class":1066},"title",[362,17941,2129],{"class":901},[362,17943,4328],{"class":860},[362,17945,902],{"class":901},[362,17947,4353],{"class":1066},[362,17949,1070],{"class":901},[362,17951,6831],{"class":1225},[362,17953,395],{"class":1106},[362,17955,4377],{"class":1073},[362,17957,2129],{"class":901},[362,17959,4328],{"class":860},[362,17961,902],{"class":901},[362,17963,4386],{"class":1066},[362,17965,1070],{"class":901},[362,17967,4391],{"class":1225},[362,17969,395],{"class":1106},[362,17971,4396],{"class":1073},[362,17973,1050],{"class":901},[362,17975,17976,17978,17980,17982,17984,17986,17988,17990,17992,17994,17996,17998,18000,18002,18004,18006],{"class":852,"line":1808},[362,17977,3067],{"class":860},[362,17979,902],{"class":901},[362,17981,4315],{"class":1066},[362,17983,1070],{"class":901},[362,17985,1094],{"class":1093},[362,17987,386],{"class":1097},[362,17989,1094],{"class":1093},[362,17991,2129],{"class":901},[362,17993,4328],{"class":860},[362,17995,902],{"class":901},[362,17997,4333],{"class":1066},[362,17999,1070],{"class":901},[362,18001,1094],{"class":1093},[362,18003,4340],{"class":1097},[362,18005,1094],{"class":1093},[362,18007,1050],{"class":901},[362,18009,18010,18012,18014,18016,18018,18020,18022,18024],{"class":852,"line":1814},[362,18011,1082],{"class":860},[362,18013,902],{"class":901},[362,18015,4407],{"class":1066},[362,18017,4410],{"class":901},[362,18019,4413],{"class":860},[362,18021,902],{"class":901},[362,18023,4418],{"class":1066},[362,18025,1962],{"class":901},[338,18027,18028],{},[4424,18029],{"alt":847,"src":18030},"\u002F_nb\u002F8e446e961845c51f.png",[1122,18032,18034],{"id":18033},"_6g-failure-constant-acceleration-systematic-lag","6g — Failure: constant acceleration → systematic lag",[338,18036,18037,18038,18041,18042,18045,18046,18049,18050,18052,18053,902],{},"Section 6b broke the filter with a ",[342,18039,18040],{},"sharp"," turn. A ",[342,18043,18044],{},"smooth","\nviolation is sneakier: a target under constant acceleration. The\nconstant-velocity model never predicts the speed-up, so its estimate\ntrails the truth by a roughly ",[347,18047,18048],{},"constant lag"," that the update step\ncan shrink but never erase — a persistent bias, not noise. Raising\n",[702,18051,13927],{}," lets the filter believe the velocity can change and cuts the lag,\nbut the principled fix is a constant-acceleration model. The right\npanel shows the lag stays bounded-but-nonzero for low ",[702,18054,13927],{},[842,18056,18058],{"className":844,"code":18057,"language":846,"meta":847,"style":847},"T = 30\nt = torch.arange(T).float()\naccel = 0.14\nx = 0.5 * accel * t ** 2 + 1.0 * t                # accelerating along x\ntruth = torch.stack([x, torch.zeros(T)], dim=1)\ng = torch.Generator().manual_seed(37)\nmeas = truth + 0.5 * torch.randn(T, 2, generator=g)\n\nruns = {}\nfor q, name in [(0.01, \"low q (0.01)\"), (3.0, \"high q (3.0)\")]:\n    proc = KalmanCentroid2D(\"centroid\", q=q, r=0.25)\n    rec = run_kalman(proc, torch.tensor([0.0, 0.0, 1.0, 0.0]),\n                     torch.eye(4) * 2.0, list(meas), [True] * T)\n    runs[name] = torch.stack([r[\"post_mean\"][:2] for r in rec])\n\nfig, (axx, axl) = plt.subplots(1, 2, figsize=(12, 4))\naxx.plot(t, truth[:, 0], \"-\", color=\"0.55\", lw=2, label=\"truth\")\naxx.scatter(t, meas[:, 0], marker=\"x\", color=\"tab:red\", s=18, alpha=0.5,\n            label=\"detections\")\nfor name, est in runs.items():\n    axx.plot(t, est[:, 0], \"o-\", ms=3, label=name)\naxx.set_title(\"x position vs frame (CV model trails an accelerating target)\")\naxx.set_xlabel(\"frame\"); axx.set_ylabel(\"x\"); axx.legend(fontsize=8)\naxx.grid(alpha=0.3)\n\nfor name, est in runs.items():\n    axl.plot(t, (est[:, 0] - truth[:, 0]), \"o-\", ms=3, label=name)\naxl.axhline(0, color=\"0.6\", lw=1)\naxl.set_title(\"Tracking lag (estimate − truth) in x\")\naxl.set_xlabel(\"frame\"); axl.set_ylabel(\"lag\"); axl.legend(fontsize=8)\naxl.grid(alpha=0.3)\nplt.tight_layout(); plt.show()\n\n",[702,18059,18060,18068,18090,18100,18134,18172,18195,18233,18237,18247,18289,18323,18361,18401,18448,18452,18502,18564,18626,18640,18663,18710,18729,18780,18798,18802,18822,18881,18916,18935,18987,19005],{"__ignoreMap":847},[362,18061,18062,18064,18066],{"class":852,"line":853},[362,18063,3420],{"class":860},[362,18065,395],{"class":1106},[362,18067,11940],{"class":1073},[362,18069,18070,18072,18074,18076,18078,18080,18082,18084,18086,18088],{"class":852,"line":864},[362,18071,3430],{"class":860},[362,18073,395],{"class":1106},[362,18075,2380],{"class":860},[362,18077,902],{"class":901},[362,18079,3439],{"class":1066},[362,18081,1070],{"class":901},[362,18083,3444],{"class":1066},[362,18085,1489],{"class":901},[362,18087,1492],{"class":1066},[362,18089,1962],{"class":901},[362,18091,18092,18095,18097],{"class":852,"line":871},[362,18093,18094],{"class":860},"accel ",[362,18096,395],{"class":1106},[362,18098,18099],{"class":1073}," 0.14\n",[362,18101,18102,18104,18106,18108,18110,18113,18115,18118,18120,18122,18124,18126,18128,18131],{"class":852,"line":885},[362,18103,5987],{"class":860},[362,18105,395],{"class":1106},[362,18107,9596],{"class":1073},[362,18109,1764],{"class":1106},[362,18111,18112],{"class":860}," accel ",[362,18114,3047],{"class":1106},[362,18116,18117],{"class":860}," t ",[362,18119,3633],{"class":1106},[362,18121,3501],{"class":1073},[362,18123,2377],{"class":1106},[362,18125,4614],{"class":1073},[362,18127,1764],{"class":1106},[362,18129,18130],{"class":860}," t                ",[362,18132,18133],{"class":2132},"# accelerating along x\n",[362,18135,18136,18138,18140,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162,18164,18166,18168,18170],{"class":852,"line":893},[362,18137,11967],{"class":860},[362,18139,395],{"class":1106},[362,18141,2380],{"class":860},[362,18143,902],{"class":901},[362,18145,3464],{"class":1066},[362,18147,1238],{"class":901},[362,18149,386],{"class":1066},[362,18151,933],{"class":901},[362,18153,2380],{"class":1066},[362,18155,902],{"class":901},[362,18157,1350],{"class":1066},[362,18159,1070],{"class":901},[362,18161,3444],{"class":1066},[362,18163,1291],{"class":901},[362,18165,3506],{"class":1225},[362,18167,395],{"class":1106},[362,18169,1241],{"class":1073},[362,18171,1050],{"class":901},[362,18173,18174,18176,18178,18180,18182,18184,18186,18188,18190,18193],{"class":852,"line":915},[362,18175,3517],{"class":860},[362,18177,395],{"class":1106},[362,18179,2380],{"class":860},[362,18181,902],{"class":901},[362,18183,3526],{"class":1066},[362,18185,2834],{"class":901},[362,18187,1067],{"class":1066},[362,18189,1070],{"class":901},[362,18191,18192],{"class":1073},"37",[362,18194,1050],{"class":901},[362,18196,18197,18199,18201,18203,18205,18207,18209,18211,18213,18215,18217,18219,18221,18223,18225,18227,18229,18231],{"class":852,"line":939},[362,18198,3552],{"class":860},[362,18200,395],{"class":1106},[362,18202,12035],{"class":860},[362,18204,525],{"class":1106},[362,18206,9596],{"class":1073},[362,18208,1764],{"class":1106},[362,18210,2380],{"class":860},[362,18212,902],{"class":901},[362,18214,3571],{"class":1066},[362,18216,1070],{"class":901},[362,18218,3444],{"class":1066},[362,18220,933],{"class":901},[362,18222,3501],{"class":1073},[362,18224,933],{"class":901},[362,18226,3584],{"class":1225},[362,18228,395],{"class":1106},[362,18230,3589],{"class":1066},[362,18232,1050],{"class":901},[362,18234,18235],{"class":852,"line":944},[362,18236,868],{"emptyLinePlaceholder":867},[362,18238,18239,18242,18244],{"class":852,"line":977},[362,18240,18241],{"class":860},"runs ",[362,18243,395],{"class":1106},[362,18245,18246],{"class":901}," {}\n",[362,18248,18249,18251,18253,18255,18257,18259,18261,18263,18265,18267,18270,18272,18274,18276,18278,18280,18282,18285,18287],{"class":852,"line":994},[362,18250,4133],{"class":856},[362,18252,3617],{"class":860},[362,18254,933],{"class":901},[362,18256,6968],{"class":860},[362,18258,2014],{"class":856},[362,18260,6973],{"class":901},[362,18262,11235],{"class":1073},[362,18264,933],{"class":901},[362,18266,2233],{"class":1093},[362,18268,18269],{"class":1097},"low q (0.01)",[362,18271,1094],{"class":1093},[362,18273,3771],{"class":901},[362,18275,1110],{"class":901},[362,18277,12800],{"class":1073},[362,18279,933],{"class":901},[362,18281,2233],{"class":1093},[362,18283,18284],{"class":1097},"high q (3.0)",[362,18286,1094],{"class":1093},[362,18288,7020],{"class":901},[362,18290,18291,18293,18295,18297,18299,18301,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321],{"class":852,"line":1015},[362,18292,14167],{"class":860},[362,18294,395],{"class":1106},[362,18296,1023],{"class":1066},[362,18298,1070],{"class":901},[362,18300,1094],{"class":1093},[362,18302,294],{"class":1097},[362,18304,1094],{"class":1093},[362,18306,933],{"class":901},[362,18308,3617],{"class":1225},[362,18310,395],{"class":1106},[362,18312,13927],{"class":1066},[362,18314,933],{"class":901},[362,18316,3165],{"class":1225},[362,18318,395],{"class":1106},[362,18320,3350],{"class":1073},[362,18322,1050],{"class":901},[362,18324,18325,18327,18329,18331,18333,18335,18337,18339,18341,18343,18345,18347,18349,18351,18353,18355,18357,18359],{"class":852,"line":1034},[362,18326,14203],{"class":860},[362,18328,395],{"class":1106},[362,18330,1734],{"class":1066},[362,18332,1070],{"class":901},[362,18334,1739],{"class":1066},[362,18336,933],{"class":901},[362,18338,2380],{"class":1066},[362,18340,902],{"class":901},[362,18342,1235],{"class":1066},[362,18344,1238],{"class":901},[362,18346,13063],{"class":1073},[362,18348,933],{"class":901},[362,18350,3693],{"class":1073},[362,18352,933],{"class":901},[362,18354,4614],{"class":1073},[362,18356,933],{"class":901},[362,18358,3693],{"class":1073},[362,18360,14239],{"class":901},[362,18362,18363,18365,18367,18369,18371,18373,18375,18377,18379,18381,18383,18385,18387,18389,18391,18393,18395,18397,18399],{"class":852,"line":1047},[362,18364,14244],{"class":1066},[362,18366,902],{"class":901},[362,18368,2385],{"class":1066},[362,18370,1070],{"class":901},[362,18372,4103],{"class":1073},[362,18374,2129],{"class":901},[362,18376,1764],{"class":1106},[362,18378,3688],{"class":1073},[362,18380,933],{"class":901},[362,18382,3764],{"class":1277},[362,18384,1070],{"class":901},[362,18386,3659],{"class":1066},[362,18388,3771],{"class":901},[362,18390,3774],{"class":901},[362,18392,2929],{"class":1787},[362,18394,1103],{"class":901},[362,18396,1764],{"class":1106},[362,18398,3783],{"class":1066},[362,18400,1050],{"class":901},[362,18402,18403,18406,18408,18410,18412,18414,18416,18418,18420,18422,18424,18426,18428,18430,18432,18434,18436,18438,18440,18442,18444,18446],{"class":852,"line":1053},[362,18404,18405],{"class":860},"    runs",[362,18407,1090],{"class":901},[362,18409,7232],{"class":860},[362,18411,1103],{"class":901},[362,18413,1107],{"class":1106},[362,18415,2380],{"class":860},[362,18417,902],{"class":901},[362,18419,3464],{"class":1066},[362,18421,1238],{"class":901},[362,18423,3803],{"class":1066},[362,18425,1090],{"class":901},[362,18427,1094],{"class":1093},[362,18429,2652],{"class":1097},[362,18431,1094],{"class":1093},[362,18433,3228],{"class":901},[362,18435,3039],{"class":1073},[362,18437,1103],{"class":901},[362,18439,3820],{"class":856},[362,18441,3823],{"class":1066},[362,18443,2014],{"class":856},[362,18445,2517],{"class":1066},[362,18447,2605],{"class":901},[362,18449,18450],{"class":852,"line":1058},[362,18451,868],{"emptyLinePlaceholder":867},[362,18453,18454,18456,18458,18460,18463,18465,18468,18470,18472,18474,18476,18478,18480,18482,18484,18486,18488,18490,18492,18494,18496,18498,18500],{"class":852,"line":1079},[362,18455,3839],{"class":860},[362,18457,933],{"class":901},[362,18459,1110],{"class":901},[362,18461,18462],{"class":860},"axx",[362,18464,933],{"class":901},[362,18466,18467],{"class":860}," axl",[362,18469,2129],{"class":901},[362,18471,1107],{"class":1106},[362,18473,3335],{"class":860},[362,18475,902],{"class":901},[362,18477,3853],{"class":1066},[362,18479,1070],{"class":901},[362,18481,1241],{"class":1073},[362,18483,933],{"class":901},[362,18485,3501],{"class":1073},[362,18487,933],{"class":901},[362,18489,6937],{"class":1225},[362,18491,395],{"class":1106},[362,18493,1070],{"class":901},[362,18495,6373],{"class":1073},[362,18497,933],{"class":901},[362,18499,1118],{"class":1073},[362,18501,3145],{"class":901},[362,18503,18504,18506,18508,18510,18512,18514,18516,18518,18520,18522,18524,18526,18528,18530,18532,18534,18536,18538,18540,18542,18544,18546,18548,18550,18552,18554,18556,18558,18560,18562],{"class":852,"line":1567},[362,18505,18462],{"class":860},[362,18507,902],{"class":901},[362,18509,3881],{"class":1066},[362,18511,1070],{"class":901},[362,18513,7033],{"class":1066},[362,18515,933],{"class":901},[362,18517,12272],{"class":1066},[362,18519,2956],{"class":901},[362,18521,1607],{"class":1073},[362,18523,1244],{"class":901},[362,18525,2233],{"class":1093},[362,18527,2416],{"class":1097},[362,18529,1094],{"class":1093},[362,18531,933],{"class":901},[362,18533,3912],{"class":1225},[362,18535,395],{"class":1106},[362,18537,1094],{"class":1093},[362,18539,3919],{"class":1097},[362,18541,1094],{"class":1093},[362,18543,933],{"class":901},[362,18545,3926],{"class":1225},[362,18547,395],{"class":1106},[362,18549,3039],{"class":1073},[362,18551,933],{"class":901},[362,18553,4924],{"class":1225},[362,18555,395],{"class":1106},[362,18557,1094],{"class":1093},[362,18559,7080],{"class":1097},[362,18561,1094],{"class":1093},[362,18563,1050],{"class":901},[362,18565,18566,18568,18570,18572,18574,18576,18578,18580,18582,18584,18586,18588,18590,18592,18594,18596,18598,18600,18602,18604,18606,18608,18610,18612,18614,18616,18618,18620,18622,18624],{"class":852,"line":1577},[362,18567,18462],{"class":860},[362,18569,902],{"class":901},[362,18571,3966],{"class":1066},[362,18573,1070],{"class":901},[362,18575,7033],{"class":1066},[362,18577,933],{"class":901},[362,18579,3979],{"class":1066},[362,18581,2956],{"class":901},[362,18583,1607],{"class":1073},[362,18585,1244],{"class":901},[362,18587,3988],{"class":1225},[362,18589,395],{"class":1106},[362,18591,1094],{"class":1093},[362,18593,386],{"class":1097},[362,18595,1094],{"class":1093},[362,18597,933],{"class":901},[362,18599,3912],{"class":1225},[362,18601,395],{"class":1106},[362,18603,1094],{"class":1093},[362,18605,4007],{"class":1097},[362,18607,1094],{"class":1093},[362,18609,933],{"class":901},[362,18611,4014],{"class":1225},[362,18613,395],{"class":1106},[362,18615,17187],{"class":1073},[362,18617,933],{"class":901},[362,18619,6427],{"class":1225},[362,18621,395],{"class":1106},[362,18623,6422],{"class":1073},[362,18625,1031],{"class":901},[362,18627,18628,18630,18632,18634,18636,18638],{"class":852,"line":1586},[362,18629,8329],{"class":1225},[362,18631,395],{"class":1106},[362,18633,1094],{"class":1093},[362,18635,206],{"class":1097},[362,18637,1094],{"class":1093},[362,18639,1050],{"class":901},[362,18641,18642,18644,18646,18648,18651,18653,18656,18658,18661],{"class":852,"line":1625},[362,18643,4133],{"class":856},[362,18645,16625],{"class":860},[362,18647,933],{"class":901},[362,18649,18650],{"class":860}," est ",[362,18652,2014],{"class":856},[362,18654,18655],{"class":860}," runs",[362,18657,902],{"class":901},[362,18659,18660],{"class":1066},"items",[362,18662,1564],{"class":901},[362,18664,18665,18668,18670,18672,18674,18676,18678,18680,18682,18684,18686,18688,18690,18692,18694,18696,18698,18700,18702,18704,18706,18708],{"class":852,"line":1657},[362,18666,18667],{"class":860},"    axx",[362,18669,902],{"class":901},[362,18671,3881],{"class":1066},[362,18673,1070],{"class":901},[362,18675,7033],{"class":1066},[362,18677,933],{"class":901},[362,18679,12559],{"class":1066},[362,18681,2956],{"class":901},[362,18683,1607],{"class":1073},[362,18685,1244],{"class":901},[362,18687,2233],{"class":1093},[362,18689,4078],{"class":1097},[362,18691,1094],{"class":1093},[362,18693,933],{"class":901},[362,18695,4098],{"class":1225},[362,18697,395],{"class":1106},[362,18699,3535],{"class":1073},[362,18701,933],{"class":901},[362,18703,4924],{"class":1225},[362,18705,395],{"class":1106},[362,18707,7232],{"class":1066},[362,18709,1050],{"class":901},[362,18711,18712,18714,18716,18718,18720,18722,18725,18727],{"class":852,"line":1689},[362,18713,18462],{"class":860},[362,18715,902],{"class":901},[362,18717,4295],{"class":1066},[362,18719,1070],{"class":901},[362,18721,1094],{"class":1093},[362,18723,18724],{"class":1097},"x position vs frame (CV model trails an accelerating target)",[362,18726,1094],{"class":1093},[362,18728,1050],{"class":901},[362,18730,18731,18733,18735,18737,18739,18741,18743,18745,18747,18750,18752,18754,18756,18758,18760,18762,18764,18766,18768,18770,18772,18774,18776,18778],{"class":852,"line":1709},[362,18732,18462],{"class":860},[362,18734,902],{"class":901},[362,18736,4315],{"class":1066},[362,18738,1070],{"class":901},[362,18740,1094],{"class":1093},[362,18742,209],{"class":1097},[362,18744,1094],{"class":1093},[362,18746,2129],{"class":901},[362,18748,18749],{"class":860},"; axx",[362,18751,902],{"class":901},[362,18753,4333],{"class":1066},[362,18755,1070],{"class":901},[362,18757,1094],{"class":1093},[362,18759,386],{"class":1097},[362,18761,1094],{"class":1093},[362,18763,2129],{"class":901},[362,18765,18749],{"class":860},[362,18767,902],{"class":901},[362,18769,4353],{"class":1066},[362,18771,1070],{"class":901},[362,18773,6831],{"class":1225},[362,18775,395],{"class":1106},[362,18777,4377],{"class":1073},[362,18779,1050],{"class":901},[362,18781,18782,18784,18786,18788,18790,18792,18794,18796],{"class":852,"line":1719},[362,18783,18462],{"class":860},[362,18785,902],{"class":901},[362,18787,4386],{"class":1066},[362,18789,1070],{"class":901},[362,18791,4391],{"class":1225},[362,18793,395],{"class":1106},[362,18795,4396],{"class":1073},[362,18797,1050],{"class":901},[362,18799,18800],{"class":852,"line":1724},[362,18801,868],{"emptyLinePlaceholder":867},[362,18803,18804,18806,18808,18810,18812,18814,18816,18818,18820],{"class":852,"line":1729},[362,18805,4133],{"class":856},[362,18807,16625],{"class":860},[362,18809,933],{"class":901},[362,18811,18650],{"class":860},[362,18813,2014],{"class":856},[362,18815,18655],{"class":860},[362,18817,902],{"class":901},[362,18819,18660],{"class":1066},[362,18821,1564],{"class":901},[362,18823,18824,18827,18829,18831,18833,18835,18837,18839,18841,18843,18845,18847,18849,18851,18853,18855,18857,18859,18861,18863,18865,18867,18869,18871,18873,18875,18877,18879],{"class":852,"line":1769},[362,18825,18826],{"class":860},"    axl",[362,18828,902],{"class":901},[362,18830,3881],{"class":1066},[362,18832,1070],{"class":901},[362,18834,7033],{"class":1066},[362,18836,933],{"class":901},[362,18838,1110],{"class":901},[362,18840,12550],{"class":1066},[362,18842,2956],{"class":901},[362,18844,1607],{"class":1073},[362,18846,1103],{"class":901},[362,18848,9346],{"class":1106},[362,18850,12272],{"class":1066},[362,18852,2956],{"class":901},[362,18854,1607],{"class":1073},[362,18856,3005],{"class":901},[362,18858,2233],{"class":1093},[362,18860,4078],{"class":1097},[362,18862,1094],{"class":1093},[362,18864,933],{"class":901},[362,18866,4098],{"class":1225},[362,18868,395],{"class":1106},[362,18870,3535],{"class":1073},[362,18872,933],{"class":901},[362,18874,4924],{"class":1225},[362,18876,395],{"class":1106},[362,18878,7232],{"class":1066},[362,18880,1050],{"class":901},[362,18882,18883,18886,18888,18890,18892,18894,18896,18898,18900,18902,18904,18906,18908,18910,18912,18914],{"class":852,"line":1802},[362,18884,18885],{"class":860},"axl",[362,18887,902],{"class":901},[362,18889,16824],{"class":1066},[362,18891,1070],{"class":901},[362,18893,1074],{"class":1073},[362,18895,933],{"class":901},[362,18897,3912],{"class":1225},[362,18899,395],{"class":1106},[362,18901,1094],{"class":1093},[362,18903,6125],{"class":1097},[362,18905,1094],{"class":1093},[362,18907,933],{"class":901},[362,18909,3926],{"class":1225},[362,18911,395],{"class":1106},[362,18913,1241],{"class":1073},[362,18915,1050],{"class":901},[362,18917,18918,18920,18922,18924,18926,18928,18931,18933],{"class":852,"line":1808},[362,18919,18885],{"class":860},[362,18921,902],{"class":901},[362,18923,4295],{"class":1066},[362,18925,1070],{"class":901},[362,18927,1094],{"class":1093},[362,18929,18930],{"class":1097},"Tracking lag (estimate − truth) in x",[362,18932,1094],{"class":1093},[362,18934,1050],{"class":901},[362,18936,18937,18939,18941,18943,18945,18947,18949,18951,18953,18956,18958,18960,18962,18964,18967,18969,18971,18973,18975,18977,18979,18981,18983,18985],{"class":852,"line":1814},[362,18938,18885],{"class":860},[362,18940,902],{"class":901},[362,18942,4315],{"class":1066},[362,18944,1070],{"class":901},[362,18946,1094],{"class":1093},[362,18948,209],{"class":1097},[362,18950,1094],{"class":1093},[362,18952,2129],{"class":901},[362,18954,18955],{"class":860},"; axl",[362,18957,902],{"class":901},[362,18959,4333],{"class":1066},[362,18961,1070],{"class":901},[362,18963,1094],{"class":1093},[362,18965,18966],{"class":1097},"lag",[362,18968,1094],{"class":1093},[362,18970,2129],{"class":901},[362,18972,18955],{"class":860},[362,18974,902],{"class":901},[362,18976,4353],{"class":1066},[362,18978,1070],{"class":901},[362,18980,6831],{"class":1225},[362,18982,395],{"class":1106},[362,18984,4377],{"class":1073},[362,18986,1050],{"class":901},[362,18988,18989,18991,18993,18995,18997,18999,19001,19003],{"class":852,"line":1819},[362,18990,18885],{"class":860},[362,18992,902],{"class":901},[362,18994,4386],{"class":1066},[362,18996,1070],{"class":901},[362,18998,4391],{"class":1225},[362,19000,395],{"class":1106},[362,19002,4396],{"class":1073},[362,19004,1050],{"class":901},[362,19006,19007,19009,19011,19013,19015,19017,19019,19021],{"class":852,"line":1825},[362,19008,1082],{"class":860},[362,19010,902],{"class":901},[362,19012,4407],{"class":1066},[362,19014,4410],{"class":901},[362,19016,4413],{"class":860},[362,19018,902],{"class":901},[362,19020,4418],{"class":1066},[362,19022,1962],{"class":901},[338,19024,19025],{},[4424,19026],{"alt":847,"src":19027},"\u002F_nb\u002Fe90105c49d9feb90.png",[1122,19029,19031,19032,19035],{"id":19030},"_6h-failure-a-maneuver-during-a-long-occlusion","6h — Failure: a maneuver ",[342,19033,19034],{},"during"," a long occlusion",[338,19037,19038,19039,19042,19043,19046],{},"Two safe situations combine into a dangerous one. Coasting through an\nocclusion is fine if the motion stays constant (section 1); a\nmaneuver is survivable if the object stays ",[342,19040,19041],{},"visible"," so the update can\ncorrect it (section 6b). But if the object turns ",[347,19044,19045],{},"while occluded",",\nthere is no measurement to catch the change: the filter coasts in a\nstraight line, and when the object reappears the detection is nowhere\nnear the prediction. Even with the occlusion-inflated gate, the true\ndetection is rejected — the track is lost or, worse, steals a\nneighbour's detection.",[842,19048,19050],{"className":844,"code":19049,"language":846,"meta":847,"style":847},"# East for 11 frames, then north — but the turn falls inside the gap.\npresent = [True] * 8 + [False] * 7 + [True] * 8        # occluded 8..14\nT = len(present)\ntruth = []\nfor k in range(T):\n    if k \u003C= 10:\n        truth.append([3.0 * k, 0.0])                  # heading east\n    else:\n        truth.append([30.0, 3.0 * (k - 10)])          # turned north\ntruth = torch.tensor(truth)\ng = torch.Generator().manual_seed(39)\nmeas = truth + 0.6 * torch.randn(T, 2, generator=g)\n\n# A gated tracker: a reappearance outside the predictive gate is rejected.\nproc = KalmanCentroid2D(\"centroid\", q=0.05, r=0.4)\nrec = run_kalman(proc, torch.tensor([0.0, 0.0, 3.0, 0.0]),\n                 torch.eye(4) * 2.0, list(meas), present, gate_chi2=9.21)\nest = torch.stack([r[\"post_mean\"][:2] for r in rec])\n\nfig, ax = plt.subplots(figsize=(8, 5))\nax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.55\", lw=2,\n        label=\"truth (turns while occluded)\")\nseen = torch.tensor(present)\nax.scatter(meas[seen, 0], meas[seen, 1], marker=\"x\", color=\"tab:red\", s=35,\n           label=\"detections (visible)\")\nax.plot(est[:, 0], est[:, 1], \"o-\", color=\"tab:blue\", ms=3,\n        label=\"estimate (coasts east, never recovers)\")\nrej = [k for k, r in enumerate(rec) if r[\"gated\"]]\nif rej:\n    ax.scatter(meas[rej, 0], meas[rej, 1], s=150, facecolors=\"none\",\n               edgecolors=\"tab:red\", linewidths=1.5,\n               label=\"detections rejected by gate\")\n# coasting belief through the gap\nfor k in range(T):\n    if not present[k]:\n        mu, S = predictive_xy(rec[k], proc.r)\n        cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:orange\", lw=1.0,\n                    alpha=0.6)\nkf = 15                                               # reappearance frame\nmu, S = predictive_xy(rec[kf], proc.r)\ncov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:red\", lw=2)\nax.scatter([float(meas[kf, 0])], [float(meas[kf, 1])], s=120, color=\"tab:red\",\n           marker=\"*\", zorder=5, label=\"reappearance (outside gate)\")\nax.plot([], [], color=\"tab:orange\", lw=1.0, label=\"2σ belief during occlusion\")\nax.plot([], [], color=\"tab:red\", lw=2, label=\"gate at reappearance\")\nax.set_title(\"Failure: filter coasts straight; the turn happened in the dark\")\nax.legend(fontsize=8); ax.grid(alpha=0.3); ax.set_aspect(\"equal\")\nplt.tight_layout(); plt.show()\n\n",[702,19051,19052,19057,19101,19115,19123,19139,19152,19178,19185,19218,19236,19259,19297,19301,19306,19340,19378,19419,19459,19463,19495,19549,19564,19583,19649,19664,19718,19733,19776,19786,19842,19865,19880,19885,19901,19915,19945,19991,20001,20013,20043,20089,20154,20189,20233,20278,20297,20347],{"__ignoreMap":847},[362,19053,19054],{"class":852,"line":853},[362,19055,19056],{"class":2132},"# East for 11 frames, then north — but the turn falls inside the gap.\n",[362,19058,19059,19061,19063,19065,19067,19069,19071,19074,19076,19078,19080,19082,19084,19086,19088,19090,19092,19094,19096,19098],{"class":852,"line":864},[362,19060,4451],{"class":860},[362,19062,395],{"class":1106},[362,19064,3774],{"class":901},[362,19066,2929],{"class":1787},[362,19068,1103],{"class":901},[362,19070,1764],{"class":1106},[362,19072,19073],{"class":1073}," 8",[362,19075,2377],{"class":1106},[362,19077,3774],{"class":901},[362,19079,3136],{"class":1787},[362,19081,1103],{"class":901},[362,19083,1764],{"class":1106},[362,19085,4464],{"class":1073},[362,19087,2377],{"class":1106},[362,19089,3774],{"class":901},[362,19091,2929],{"class":1787},[362,19093,1103],{"class":901},[362,19095,1764],{"class":1106},[362,19097,19073],{"class":1073},[362,19099,19100],{"class":2132},"        # occluded 8..14\n",[362,19102,19103,19105,19107,19109,19111,19113],{"class":852,"line":871},[362,19104,3420],{"class":860},[362,19106,395],{"class":1106},[362,19108,4500],{"class":2017},[362,19110,1070],{"class":901},[362,19112,2023],{"class":1066},[362,19114,1050],{"class":901},[362,19116,19117,19119,19121],{"class":852,"line":885},[362,19118,11967],{"class":860},[362,19120,395],{"class":1106},[362,19122,1997],{"class":901},[362,19124,19125,19127,19129,19131,19133,19135,19137],{"class":852,"line":893},[362,19126,4133],{"class":856},[362,19128,3360],{"class":860},[362,19130,2014],{"class":856},[362,19132,4140],{"class":2017},[362,19134,1070],{"class":901},[362,19136,3444],{"class":1066},[362,19138,1196],{"class":901},[362,19140,19141,19143,19145,19148,19150],{"class":852,"line":915},[362,19142,5129],{"class":856},[362,19144,3360],{"class":860},[362,19146,19147],{"class":1106},"\u003C=",[362,19149,6742],{"class":1073},[362,19151,2289],{"class":901},[362,19153,19154,19157,19159,19161,19163,19165,19167,19169,19171,19173,19175],{"class":852,"line":939},[362,19155,19156],{"class":860},"        truth",[362,19158,902],{"class":901},[362,19160,2737],{"class":1066},[362,19162,1238],{"class":901},[362,19164,12800],{"class":1073},[362,19166,1764],{"class":1106},[362,19168,2006],{"class":1066},[362,19170,933],{"class":901},[362,19172,3693],{"class":1073},[362,19174,2049],{"class":901},[362,19176,19177],{"class":2132},"                  # heading east\n",[362,19179,19180,19183],{"class":852,"line":944},[362,19181,19182],{"class":856},"    else",[362,19184,2289],{"class":901},[362,19186,19187,19189,19191,19193,19195,19198,19200,19202,19204,19206,19208,19210,19212,19215],{"class":852,"line":977},[362,19188,19156],{"class":860},[362,19190,902],{"class":901},[362,19192,2737],{"class":1066},[362,19194,1238],{"class":901},[362,19196,19197],{"class":1073},"30.0",[362,19199,933],{"class":901},[362,19201,4770],{"class":1073},[362,19203,1764],{"class":1106},[362,19205,1110],{"class":901},[362,19207,17792],{"class":1066},[362,19209,2416],{"class":1106},[362,19211,6742],{"class":1073},[362,19213,19214],{"class":901},")])",[362,19216,19217],{"class":2132},"          # turned north\n",[362,19219,19220,19222,19224,19226,19228,19230,19232,19234],{"class":852,"line":994},[362,19221,11967],{"class":860},[362,19223,395],{"class":1106},[362,19225,2380],{"class":860},[362,19227,902],{"class":901},[362,19229,1235],{"class":1066},[362,19231,1070],{"class":901},[362,19233,7080],{"class":1066},[362,19235,1050],{"class":901},[362,19237,19238,19240,19242,19244,19246,19248,19250,19252,19254,19257],{"class":852,"line":1015},[362,19239,3517],{"class":860},[362,19241,395],{"class":1106},[362,19243,2380],{"class":860},[362,19245,902],{"class":901},[362,19247,3526],{"class":1066},[362,19249,2834],{"class":901},[362,19251,1067],{"class":1066},[362,19253,1070],{"class":901},[362,19255,19256],{"class":1073},"39",[362,19258,1050],{"class":901},[362,19260,19261,19263,19265,19267,19269,19271,19273,19275,19277,19279,19281,19283,19285,19287,19289,19291,19293,19295],{"class":852,"line":1034},[362,19262,3552],{"class":860},[362,19264,395],{"class":1106},[362,19266,12035],{"class":860},[362,19268,525],{"class":1106},[362,19270,9661],{"class":1073},[362,19272,1764],{"class":1106},[362,19274,2380],{"class":860},[362,19276,902],{"class":901},[362,19278,3571],{"class":1066},[362,19280,1070],{"class":901},[362,19282,3444],{"class":1066},[362,19284,933],{"class":901},[362,19286,3501],{"class":1073},[362,19288,933],{"class":901},[362,19290,3584],{"class":1225},[362,19292,395],{"class":1106},[362,19294,3589],{"class":1066},[362,19296,1050],{"class":901},[362,19298,19299],{"class":852,"line":1047},[362,19300,868],{"emptyLinePlaceholder":867},[362,19302,19303],{"class":852,"line":1053},[362,19304,19305],{"class":2132},"# A gated tracker: a reappearance outside the predictive gate is rejected.\n",[362,19307,19308,19310,19312,19314,19316,19318,19320,19322,19324,19326,19328,19330,19332,19334,19336,19338],{"class":852,"line":1058},[362,19309,3600],{"class":860},[362,19311,395],{"class":1106},[362,19313,1023],{"class":1066},[362,19315,1070],{"class":901},[362,19317,1094],{"class":1093},[362,19319,294],{"class":1097},[362,19321,1094],{"class":1093},[362,19323,933],{"class":901},[362,19325,3617],{"class":1225},[362,19327,395],{"class":1106},[362,19329,4669],{"class":1073},[362,19331,933],{"class":901},[362,19333,3165],{"class":1225},[362,19335,395],{"class":1106},[362,19337,8876],{"class":1073},[362,19339,1050],{"class":901},[362,19341,19342,19344,19346,19348,19350,19352,19354,19356,19358,19360,19362,19364,19366,19368,19370,19372,19374,19376],{"class":852,"line":1079},[362,19343,3743],{"class":860},[362,19345,395],{"class":1106},[362,19347,1734],{"class":1066},[362,19349,1070],{"class":901},[362,19351,1739],{"class":1066},[362,19353,933],{"class":901},[362,19355,2380],{"class":1066},[362,19357,902],{"class":901},[362,19359,1235],{"class":1066},[362,19361,1238],{"class":901},[362,19363,13063],{"class":1073},[362,19365,933],{"class":901},[362,19367,3693],{"class":1073},[362,19369,933],{"class":901},[362,19371,4770],{"class":1073},[362,19373,933],{"class":901},[362,19375,3693],{"class":1073},[362,19377,14239],{"class":901},[362,19379,19380,19383,19385,19387,19389,19391,19393,19395,19397,19399,19401,19403,19405,19407,19409,19411,19413,19415,19417],{"class":852,"line":1567},[362,19381,19382],{"class":1066},"                 torch",[362,19384,902],{"class":901},[362,19386,2385],{"class":1066},[362,19388,1070],{"class":901},[362,19390,4103],{"class":1073},[362,19392,2129],{"class":901},[362,19394,1764],{"class":1106},[362,19396,3688],{"class":1073},[362,19398,933],{"class":901},[362,19400,3764],{"class":1277},[362,19402,1070],{"class":901},[362,19404,3659],{"class":1066},[362,19406,3771],{"class":901},[362,19408,1759],{"class":1066},[362,19410,933],{"class":901},[362,19412,1793],{"class":1225},[362,19414,395],{"class":1106},[362,19416,17414],{"class":1073},[362,19418,1050],{"class":901},[362,19420,19421,19423,19425,19427,19429,19431,19433,19435,19437,19439,19441,19443,19445,19447,19449,19451,19453,19455,19457],{"class":852,"line":1577},[362,19422,12220],{"class":860},[362,19424,395],{"class":1106},[362,19426,2380],{"class":860},[362,19428,902],{"class":901},[362,19430,3464],{"class":1066},[362,19432,1238],{"class":901},[362,19434,3803],{"class":1066},[362,19436,1090],{"class":901},[362,19438,1094],{"class":1093},[362,19440,2652],{"class":1097},[362,19442,1094],{"class":1093},[362,19444,3228],{"class":901},[362,19446,3039],{"class":1073},[362,19448,1103],{"class":901},[362,19450,3820],{"class":856},[362,19452,3823],{"class":1066},[362,19454,2014],{"class":856},[362,19456,2517],{"class":1066},[362,19458,2605],{"class":901},[362,19460,19461],{"class":852,"line":1586},[362,19462,868],{"emptyLinePlaceholder":867},[362,19464,19465,19467,19469,19471,19473,19475,19477,19479,19481,19483,19485,19487,19489,19491,19493],{"class":852,"line":1625},[362,19466,3839],{"class":860},[362,19468,933],{"class":901},[362,19470,3844],{"class":860},[362,19472,395],{"class":1106},[362,19474,3335],{"class":860},[362,19476,902],{"class":901},[362,19478,3853],{"class":1066},[362,19480,1070],{"class":901},[362,19482,3858],{"class":1225},[362,19484,395],{"class":1106},[362,19486,1070],{"class":901},[362,19488,4377],{"class":1073},[362,19490,933],{"class":901},[362,19492,3870],{"class":1073},[362,19494,3145],{"class":901},[362,19496,19497,19499,19501,19503,19505,19507,19509,19511,19513,19515,19517,19519,19521,19523,19525,19527,19529,19531,19533,19535,19537,19539,19541,19543,19545,19547],{"class":852,"line":1657},[362,19498,2778],{"class":860},[362,19500,902],{"class":901},[362,19502,3881],{"class":1066},[362,19504,1070],{"class":901},[362,19506,7080],{"class":1066},[362,19508,2956],{"class":901},[362,19510,1607],{"class":1073},[362,19512,1244],{"class":901},[362,19514,12272],{"class":1066},[362,19516,2956],{"class":901},[362,19518,3379],{"class":1073},[362,19520,1244],{"class":901},[362,19522,2233],{"class":1093},[362,19524,2416],{"class":1097},[362,19526,1094],{"class":1093},[362,19528,933],{"class":901},[362,19530,3912],{"class":1225},[362,19532,395],{"class":1106},[362,19534,1094],{"class":1093},[362,19536,3919],{"class":1097},[362,19538,1094],{"class":1093},[362,19540,933],{"class":901},[362,19542,3926],{"class":1225},[362,19544,395],{"class":1106},[362,19546,3039],{"class":1073},[362,19548,1031],{"class":901},[362,19550,19551,19553,19555,19557,19560,19562],{"class":852,"line":1689},[362,19552,3937],{"class":1225},[362,19554,395],{"class":1106},[362,19556,1094],{"class":1093},[362,19558,19559],{"class":1097},"truth (turns while occluded)",[362,19561,1094],{"class":1093},[362,19563,1050],{"class":901},[362,19565,19566,19569,19571,19573,19575,19577,19579,19581],{"class":852,"line":1709},[362,19567,19568],{"class":860},"seen ",[362,19570,395],{"class":1106},[362,19572,2380],{"class":860},[362,19574,902],{"class":901},[362,19576,1235],{"class":1066},[362,19578,1070],{"class":901},[362,19580,2023],{"class":1066},[362,19582,1050],{"class":901},[362,19584,19585,19587,19589,19591,19593,19595,19597,19599,19601,19603,19605,19607,19609,19611,19613,19615,19617,19619,19621,19623,19625,19627,19629,19631,19633,19635,19637,19639,19641,19643,19645,19647],{"class":852,"line":1719},[362,19586,2778],{"class":860},[362,19588,902],{"class":901},[362,19590,3966],{"class":1066},[362,19592,1070],{"class":901},[362,19594,3659],{"class":1066},[362,19596,1090],{"class":901},[362,19598,2254],{"class":1066},[362,19600,933],{"class":901},[362,19602,1607],{"class":1073},[362,19604,1244],{"class":901},[362,19606,3979],{"class":1066},[362,19608,1090],{"class":901},[362,19610,2254],{"class":1066},[362,19612,933],{"class":901},[362,19614,3379],{"class":1073},[362,19616,1244],{"class":901},[362,19618,3988],{"class":1225},[362,19620,395],{"class":1106},[362,19622,1094],{"class":1093},[362,19624,386],{"class":1097},[362,19626,1094],{"class":1093},[362,19628,933],{"class":901},[362,19630,3912],{"class":1225},[362,19632,395],{"class":1106},[362,19634,1094],{"class":1093},[362,19636,4007],{"class":1097},[362,19638,1094],{"class":1093},[362,19640,933],{"class":901},[362,19642,4014],{"class":1225},[362,19644,395],{"class":1106},[362,19646,11521],{"class":1073},[362,19648,1031],{"class":901},[362,19650,19651,19653,19655,19657,19660,19662],{"class":852,"line":1724},[362,19652,4026],{"class":1225},[362,19654,395],{"class":1106},[362,19656,1094],{"class":1093},[362,19658,19659],{"class":1097},"detections (visible)",[362,19661,1094],{"class":1093},[362,19663,1050],{"class":901},[362,19665,19666,19668,19670,19672,19674,19676,19678,19680,19682,19684,19686,19688,19690,19692,19694,19696,19698,19700,19702,19704,19706,19708,19710,19712,19714,19716],{"class":852,"line":1729},[362,19667,2778],{"class":860},[362,19669,902],{"class":901},[362,19671,3881],{"class":1066},[362,19673,1070],{"class":901},[362,19675,12550],{"class":1066},[362,19677,2956],{"class":901},[362,19679,1607],{"class":1073},[362,19681,1244],{"class":901},[362,19683,12559],{"class":1066},[362,19685,2956],{"class":901},[362,19687,3379],{"class":1073},[362,19689,1244],{"class":901},[362,19691,2233],{"class":1093},[362,19693,4078],{"class":1097},[362,19695,1094],{"class":1093},[362,19697,933],{"class":901},[362,19699,3912],{"class":1225},[362,19701,395],{"class":1106},[362,19703,1094],{"class":1093},[362,19705,4091],{"class":1097},[362,19707,1094],{"class":1093},[362,19709,933],{"class":901},[362,19711,4098],{"class":1225},[362,19713,395],{"class":1106},[362,19715,3535],{"class":1073},[362,19717,1031],{"class":901},[362,19719,19720,19722,19724,19726,19729,19731],{"class":852,"line":1769},[362,19721,3937],{"class":1225},[362,19723,395],{"class":1106},[362,19725,1094],{"class":1093},[362,19727,19728],{"class":1097},"estimate (coasts east, never recovers)",[362,19730,1094],{"class":1093},[362,19732,1050],{"class":901},[362,19734,19735,19738,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762,19764,19766,19768,19770,19772,19774],{"class":852,"line":1802},[362,19736,19737],{"class":860},"rej ",[362,19739,395],{"class":1106},[362,19741,3774],{"class":901},[362,19743,17792],{"class":860},[362,19745,4133],{"class":856},[362,19747,2006],{"class":860},[362,19749,933],{"class":901},[362,19751,3823],{"class":860},[362,19753,2014],{"class":856},[362,19755,2018],{"class":2017},[362,19757,1070],{"class":901},[362,19759,2742],{"class":1066},[362,19761,2129],{"class":901},[362,19763,2052],{"class":856},[362,19765,3165],{"class":860},[362,19767,1090],{"class":901},[362,19769,1094],{"class":1093},[362,19771,2268],{"class":1097},[362,19773,1094],{"class":1093},[362,19775,5954],{"class":901},[362,19777,19778,19781,19784],{"class":852,"line":1808},[362,19779,19780],{"class":856},"if",[362,19782,19783],{"class":860}," rej",[362,19785,2289],{"class":901},[362,19787,19788,19790,19792,19794,19796,19798,19800,19803,19805,19807,19809,19811,19813,19815,19817,19819,19821,19823,19825,19828,19830,19832,19834,19836,19838,19840],{"class":852,"line":1814},[362,19789,3067],{"class":860},[362,19791,902],{"class":901},[362,19793,3966],{"class":1066},[362,19795,1070],{"class":901},[362,19797,3659],{"class":1066},[362,19799,1090],{"class":901},[362,19801,19802],{"class":1066},"rej",[362,19804,933],{"class":901},[362,19806,1607],{"class":1073},[362,19808,1244],{"class":901},[362,19810,3979],{"class":1066},[362,19812,1090],{"class":901},[362,19814,19802],{"class":1066},[362,19816,933],{"class":901},[362,19818,3379],{"class":1073},[362,19820,1244],{"class":901},[362,19822,4014],{"class":1225},[362,19824,395],{"class":1106},[362,19826,19827],{"class":1073},"150",[362,19829,933],{"class":901},[362,19831,17879],{"class":1225},[362,19833,395],{"class":1106},[362,19835,1094],{"class":1093},[362,19837,17886],{"class":1097},[362,19839,1094],{"class":1093},[362,19841,1031],{"class":901},[362,19843,19844,19847,19849,19851,19853,19855,19857,19859,19861,19863],{"class":852,"line":1819},[362,19845,19846],{"class":1225},"               edgecolors",[362,19848,395],{"class":1106},[362,19850,1094],{"class":1093},[362,19852,4007],{"class":1097},[362,19854,1094],{"class":1093},[362,19856,933],{"class":901},[362,19858,8605],{"class":1225},[362,19860,395],{"class":1106},[362,19862,6184],{"class":1073},[362,19864,1031],{"class":901},[362,19866,19867,19869,19871,19873,19876,19878],{"class":852,"line":1825},[362,19868,7144],{"class":1225},[362,19870,395],{"class":1106},[362,19872,1094],{"class":1093},[362,19874,19875],{"class":1097},"detections rejected by gate",[362,19877,1094],{"class":1093},[362,19879,1050],{"class":901},[362,19881,19882],{"class":852,"line":1831},[362,19883,19884],{"class":2132},"# coasting belief through the gap\n",[362,19886,19887,19889,19891,19893,19895,19897,19899],{"class":852,"line":1837},[362,19888,4133],{"class":856},[362,19890,3360],{"class":860},[362,19892,2014],{"class":856},[362,19894,4140],{"class":2017},[362,19896,1070],{"class":901},[362,19898,3444],{"class":1066},[362,19900,1196],{"class":901},[362,19902,19903,19905,19907,19909,19911,19913],{"class":852,"line":1843},[362,19904,5129],{"class":856},[362,19906,2061],{"class":1106},[362,19908,1759],{"class":860},[362,19910,1090],{"class":901},[362,19912,2046],{"class":860},[362,19914,2528],{"class":901},[362,19916,19917,19919,19921,19923,19925,19927,19929,19931,19933,19935,19937,19939,19941,19943],{"class":852,"line":1849},[362,19918,5148],{"class":860},[362,19920,933],{"class":901},[362,19922,4164],{"class":860},[362,19924,395],{"class":1106},[362,19926,3156],{"class":1066},[362,19928,1070],{"class":901},[362,19930,2742],{"class":1066},[362,19932,1090],{"class":901},[362,19934,2046],{"class":1066},[362,19936,1244],{"class":901},[362,19938,1939],{"class":1066},[362,19940,902],{"class":901},[362,19942,3803],{"class":905},[362,19944,1050],{"class":901},[362,19946,19947,19949,19951,19953,19955,19957,19959,19961,19963,19965,19967,19969,19971,19973,19975,19977,19979,19981,19983,19985,19987,19989],{"class":852,"line":1854},[362,19948,5180],{"class":1066},[362,19950,1070],{"class":901},[362,19952,2778],{"class":1066},[362,19954,933],{"class":901},[362,19956,3288],{"class":1066},[362,19958,933],{"class":901},[362,19960,4204],{"class":1066},[362,19962,933],{"class":901},[362,19964,2793],{"class":1225},[362,19966,395],{"class":1106},[362,19968,2798],{"class":1073},[362,19970,933],{"class":901},[362,19972,4217],{"class":1225},[362,19974,395],{"class":1106},[362,19976,1094],{"class":1093},[362,19978,5211],{"class":1097},[362,19980,1094],{"class":1093},[362,19982,933],{"class":901},[362,19984,3926],{"class":1225},[362,19986,395],{"class":1106},[362,19988,1777],{"class":1073},[362,19990,1031],{"class":901},[362,19992,19993,19995,19997,19999],{"class":852,"line":1860},[362,19994,14648],{"class":1225},[362,19996,395],{"class":1106},[362,19998,6125],{"class":1073},[362,20000,1050],{"class":901},[362,20002,20003,20005,20007,20010],{"class":852,"line":1866},[362,20004,8424],{"class":860},[362,20006,395],{"class":1106},[362,20008,20009],{"class":1073}," 15",[362,20011,20012],{"class":2132},"                                               # reappearance frame\n",[362,20014,20015,20017,20019,20021,20023,20025,20027,20029,20031,20033,20035,20037,20039,20041],{"class":852,"line":1872},[362,20016,8616],{"class":860},[362,20018,933],{"class":901},[362,20020,4164],{"class":860},[362,20022,395],{"class":1106},[362,20024,3156],{"class":1066},[362,20026,1070],{"class":901},[362,20028,2742],{"class":1066},[362,20030,1090],{"class":901},[362,20032,8504],{"class":1066},[362,20034,1244],{"class":901},[362,20036,1939],{"class":1066},[362,20038,902],{"class":901},[362,20040,3803],{"class":905},[362,20042,1050],{"class":901},[362,20044,20045,20047,20049,20051,20053,20055,20057,20059,20061,20063,20065,20067,20069,20071,20073,20075,20077,20079,20081,20083,20085,20087],{"class":852,"line":1878},[362,20046,8648],{"class":1066},[362,20048,1070],{"class":901},[362,20050,2778],{"class":1066},[362,20052,933],{"class":901},[362,20054,3288],{"class":1066},[362,20056,933],{"class":901},[362,20058,4204],{"class":1066},[362,20060,933],{"class":901},[362,20062,2793],{"class":1225},[362,20064,395],{"class":1106},[362,20066,2798],{"class":1073},[362,20068,933],{"class":901},[362,20070,4217],{"class":1225},[362,20072,395],{"class":1106},[362,20074,1094],{"class":1093},[362,20076,4007],{"class":1097},[362,20078,1094],{"class":1093},[362,20080,933],{"class":901},[362,20082,3926],{"class":1225},[362,20084,395],{"class":1106},[362,20086,3039],{"class":1073},[362,20088,1050],{"class":901},[362,20090,20091,20093,20095,20097,20099,20101,20103,20105,20107,20109,20111,20113,20115,20117,20119,20121,20123,20125,20127,20129,20131,20133,20135,20137,20140,20142,20144,20146,20148,20150,20152],{"class":852,"line":1884},[362,20092,2778],{"class":860},[362,20094,902],{"class":901},[362,20096,3966],{"class":1066},[362,20098,1238],{"class":901},[362,20100,1492],{"class":1277},[362,20102,1070],{"class":901},[362,20104,3659],{"class":1066},[362,20106,1090],{"class":901},[362,20108,8504],{"class":1066},[362,20110,933],{"class":901},[362,20112,1607],{"class":1073},[362,20114,8713],{"class":901},[362,20116,3774],{"class":901},[362,20118,1492],{"class":1277},[362,20120,1070],{"class":901},[362,20122,3659],{"class":1066},[362,20124,1090],{"class":901},[362,20126,8504],{"class":1066},[362,20128,933],{"class":901},[362,20130,3379],{"class":1073},[362,20132,8713],{"class":901},[362,20134,4014],{"class":1225},[362,20136,395],{"class":1106},[362,20138,20139],{"class":1073},"120",[362,20141,933],{"class":901},[362,20143,3912],{"class":1225},[362,20145,395],{"class":1106},[362,20147,1094],{"class":1093},[362,20149,4007],{"class":1097},[362,20151,1094],{"class":1093},[362,20153,1031],{"class":901},[362,20155,20156,20158,20160,20162,20164,20166,20168,20170,20172,20174,20176,20178,20180,20182,20185,20187],{"class":852,"line":1890},[362,20157,15709],{"class":1225},[362,20159,395],{"class":1106},[362,20161,1094],{"class":1093},[362,20163,3047],{"class":1097},[362,20165,1094],{"class":1093},[362,20167,933],{"class":901},[362,20169,3951],{"class":1225},[362,20171,395],{"class":1106},[362,20173,4597],{"class":1073},[362,20175,933],{"class":901},[362,20177,4924],{"class":1225},[362,20179,395],{"class":1106},[362,20181,1094],{"class":1093},[362,20183,20184],{"class":1097},"reappearance (outside gate)",[362,20186,1094],{"class":1093},[362,20188,1050],{"class":901},[362,20190,20191,20193,20195,20197,20199,20201,20203,20205,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225,20227,20229,20231],{"class":852,"line":1896},[362,20192,2778],{"class":860},[362,20194,902],{"class":901},[362,20196,3881],{"class":1066},[362,20198,4248],{"class":901},[362,20200,4251],{"class":901},[362,20202,3912],{"class":1225},[362,20204,395],{"class":1106},[362,20206,1094],{"class":1093},[362,20208,5211],{"class":1097},[362,20210,1094],{"class":1093},[362,20212,933],{"class":901},[362,20214,3926],{"class":1225},[362,20216,395],{"class":1106},[362,20218,1777],{"class":1073},[362,20220,933],{"class":901},[362,20222,4924],{"class":1225},[362,20224,395],{"class":1106},[362,20226,1094],{"class":1093},[362,20228,5265],{"class":1097},[362,20230,1094],{"class":1093},[362,20232,1050],{"class":901},[362,20234,20235,20237,20239,20241,20243,20245,20247,20249,20251,20253,20255,20257,20259,20261,20263,20265,20267,20269,20271,20274,20276],{"class":852,"line":1902},[362,20236,2778],{"class":860},[362,20238,902],{"class":901},[362,20240,3881],{"class":1066},[362,20242,4248],{"class":901},[362,20244,4251],{"class":901},[362,20246,3912],{"class":1225},[362,20248,395],{"class":1106},[362,20250,1094],{"class":1093},[362,20252,4007],{"class":1097},[362,20254,1094],{"class":1093},[362,20256,933],{"class":901},[362,20258,3926],{"class":1225},[362,20260,395],{"class":1106},[362,20262,3039],{"class":1073},[362,20264,933],{"class":901},[362,20266,4924],{"class":1225},[362,20268,395],{"class":1106},[362,20270,1094],{"class":1093},[362,20272,20273],{"class":1097},"gate at reappearance",[362,20275,1094],{"class":1093},[362,20277,1050],{"class":901},[362,20279,20280,20282,20284,20286,20288,20290,20293,20295],{"class":852,"line":1908},[362,20281,2778],{"class":860},[362,20283,902],{"class":901},[362,20285,4295],{"class":1066},[362,20287,1070],{"class":901},[362,20289,1094],{"class":1093},[362,20291,20292],{"class":1097},"Failure: filter coasts straight; the turn happened in the dark",[362,20294,1094],{"class":1093},[362,20296,1050],{"class":901},[362,20298,20299,20301,20303,20305,20307,20309,20311,20313,20315,20317,20319,20321,20323,20325,20327,20329,20331,20333,20335,20337,20339,20341,20343,20345],{"class":852,"line":1914},[362,20300,2778],{"class":860},[362,20302,902],{"class":901},[362,20304,4353],{"class":1066},[362,20306,1070],{"class":901},[362,20308,6831],{"class":1225},[362,20310,395],{"class":1106},[362,20312,4377],{"class":1073},[362,20314,2129],{"class":901},[362,20316,4328],{"class":860},[362,20318,902],{"class":901},[362,20320,4386],{"class":1066},[362,20322,1070],{"class":901},[362,20324,4391],{"class":1225},[362,20326,395],{"class":1106},[362,20328,4396],{"class":1073},[362,20330,2129],{"class":901},[362,20332,4328],{"class":860},[362,20334,902],{"class":901},[362,20336,6756],{"class":1066},[362,20338,1070],{"class":901},[362,20340,1094],{"class":1093},[362,20342,6763],{"class":1097},[362,20344,1094],{"class":1093},[362,20346,1050],{"class":901},[362,20348,20349,20351,20353,20355,20357,20359,20361,20363],{"class":852,"line":1920},[362,20350,1082],{"class":860},[362,20352,902],{"class":901},[362,20354,4407],{"class":1066},[362,20356,4410],{"class":901},[362,20358,4413],{"class":860},[362,20360,902],{"class":901},[362,20362,4418],{"class":1066},[362,20364,1962],{"class":901},[338,20366,20367],{},[4424,20368],{"alt":847,"src":20369},"\u002F_nb\u002Fe45058ecf0104403.png",[1122,20371,20373],{"id":20372},"_6i-success-irregular-frame-rates-dt-aware-prediction","6i — Success: irregular frame rates (dt-aware prediction)",[338,20375,20376,20377,20380,20381,20383,20384,800,20387,20390,20391,20393,20394,20397,20398,20400,20401,20404,20405,20407,20408,20410],{},"Real video is not metronomic: frames drop, sensors run at different\nrates, clips are sampled unevenly. unitrack's Kalman processes take\nthe time step from ",[702,20378,20379],{},"ctx.delta",", so ",[702,20382,398],{}," advances by the ",[342,20385,20386],{},"actual",[702,20388,20389],{},"dt","\nand ",[702,20392,528],{}," injects ",[702,20395,20396],{},"q · dt"," of process noise — predictions and gates stay\ncalibrated across uneven gaps. The left panel passes the true\nper-frame ",[702,20399,20389],{},"; the right wrongly assumes a fixed ",[702,20402,20403],{},"dt = 1",". With the\ntrue ",[702,20406,20389],{}," the one-step predictions (green) land on the next detection;\nwith a fixed ",[702,20409,20389],{}," they undershoot the long gaps and the gate sits\nbehind the object — the kind of silent miscalibration that quietly\nloses tracks.",[842,20412,20414],{"className":844,"code":20413,"language":846,"meta":847,"style":847},"T = 16\ng = torch.Generator().manual_seed(41)\ndts = (0.4 + 1.6 * torch.rand(T, generator=g))        # irregular steps\ntimes = torch.cumsum(dts, 0)\nvel = torch.tensor([2.0, 1.2])\ntruth = times[:, None] * vel                          # CV in continuous time\nmeas = truth + 0.4 * torch.randn(T, 2, generator=g)\n\nm0 = torch.tensor([float(meas[0, 0]), float(meas[0, 1]), 2.0, 1.2])\nrec_ok = run_kalman(KalmanCentroid2D(\"centroid\", q=0.05, r=0.16),\n                    m0, torch.eye(4) * 1.0, list(meas), [True] * T,\n                    dts=list(dts))\nrec_bad = run_kalman(KalmanCentroid2D(\"centroid\", q=0.05, r=0.16),\n                     m0, torch.eye(4) * 1.0, list(meas), [True] * T,\n                     dt=1.0)                            # ignores real dt\n\nfig, axes = plt.subplots(1, 2, figsize=(13, 4))\nfor ax, rec, title in [(axes[0], rec_ok, \"dt-aware (correct): gate hits the next detection\"),\n                       (axes[1], rec_bad, \"fixed dt=1 (wrong): gate undershoots long gaps\")]:\n    ax.plot(truth[:, 0], truth[:, 1], \"-\", color=\"0.6\", lw=1.5, label=\"truth\")\n    ax.scatter(meas[:, 0], meas[:, 1], marker=\"x\", color=\"tab:red\", s=35,\n               label=\"detections\")\n    for k in range(2, T, 3):\n        mu, S = predictive_xy(rec[k], 0.16)\n        cov_ellipse(ax, mu, S, n_std=2.0, edgecolor=\"tab:green\", lw=1.2)\n        ax.scatter([float(mu[0])], [float(mu[1])], color=\"tab:green\", s=18)\n    ax.plot([], [], color=\"tab:green\", lw=1.2, label=\"one-step prediction + 2σ\")\n    ax.set_title(title, fontsize=9); ax.legend(fontsize=8); ax.grid(alpha=0.3)\n    ax.set_xlabel(\"x\"); ax.set_ylabel(\"y\")\nplt.tight_layout(); plt.show()\n\n",[702,20415,20416,20425,20448,20489,20513,20536,20559,20597,20601,20655,20695,20740,20756,20795,20840,20854,20858,20898,20938,20964,21030,21088,21102,21126,21153,21199,21255,21300,21354,21388],{"__ignoreMap":847},[362,20417,20418,20420,20422],{"class":852,"line":853},[362,20419,3420],{"class":860},[362,20421,395],{"class":1106},[362,20423,20424],{"class":1073}," 16\n",[362,20426,20427,20429,20431,20433,20435,20437,20439,20441,20443,20446],{"class":852,"line":864},[362,20428,3517],{"class":860},[362,20430,395],{"class":1106},[362,20432,2380],{"class":860},[362,20434,902],{"class":901},[362,20436,3526],{"class":1066},[362,20438,2834],{"class":901},[362,20440,1067],{"class":1066},[362,20442,1070],{"class":901},[362,20444,20445],{"class":1073},"41",[362,20447,1050],{"class":901},[362,20449,20450,20453,20455,20457,20459,20461,20463,20465,20467,20469,20472,20474,20476,20478,20480,20482,20484,20486],{"class":852,"line":871},[362,20451,20452],{"class":860},"dts ",[362,20454,395],{"class":1106},[362,20456,1110],{"class":901},[362,20458,8876],{"class":1073},[362,20460,2377],{"class":1106},[362,20462,5525],{"class":1073},[362,20464,1764],{"class":1106},[362,20466,2380],{"class":860},[362,20468,902],{"class":901},[362,20470,20471],{"class":1066},"rand",[362,20473,1070],{"class":901},[362,20475,3444],{"class":1066},[362,20477,933],{"class":901},[362,20479,3584],{"class":1225},[362,20481,395],{"class":1106},[362,20483,3589],{"class":1066},[362,20485,7720],{"class":901},[362,20487,20488],{"class":2132},"        # irregular steps\n",[362,20490,20491,20494,20496,20498,20500,20503,20505,20507,20509,20511],{"class":852,"line":885},[362,20492,20493],{"class":860},"times ",[362,20495,395],{"class":1106},[362,20497,2380],{"class":860},[362,20499,902],{"class":901},[362,20501,20502],{"class":1066},"cumsum",[362,20504,1070],{"class":901},[362,20506,2041],{"class":1066},[362,20508,933],{"class":901},[362,20510,1607],{"class":1073},[362,20512,1050],{"class":901},[362,20514,20515,20518,20520,20522,20524,20526,20528,20530,20532,20534],{"class":852,"line":893},[362,20516,20517],{"class":860},"vel ",[362,20519,395],{"class":1106},[362,20521,2380],{"class":860},[362,20523,902],{"class":901},[362,20525,1235],{"class":1066},[362,20527,1238],{"class":901},[362,20529,2798],{"class":1073},[362,20531,933],{"class":901},[362,20533,4562],{"class":1073},[362,20535,2605],{"class":901},[362,20537,20538,20540,20542,20545,20547,20549,20551,20553,20556],{"class":852,"line":915},[362,20539,11967],{"class":860},[362,20541,395],{"class":1106},[362,20543,20544],{"class":860}," times",[362,20546,2956],{"class":901},[362,20548,2064],{"class":1787},[362,20550,1103],{"class":901},[362,20552,1764],{"class":1106},[362,20554,20555],{"class":860}," vel                          ",[362,20557,20558],{"class":2132},"# CV in continuous time\n",[362,20560,20561,20563,20565,20567,20569,20571,20573,20575,20577,20579,20581,20583,20585,20587,20589,20591,20593,20595],{"class":852,"line":939},[362,20562,3552],{"class":860},[362,20564,395],{"class":1106},[362,20566,12035],{"class":860},[362,20568,525],{"class":1106},[362,20570,9582],{"class":1073},[362,20572,1764],{"class":1106},[362,20574,2380],{"class":860},[362,20576,902],{"class":901},[362,20578,3571],{"class":1066},[362,20580,1070],{"class":901},[362,20582,3444],{"class":1066},[362,20584,933],{"class":901},[362,20586,3501],{"class":1073},[362,20588,933],{"class":901},[362,20590,3584],{"class":1225},[362,20592,395],{"class":1106},[362,20594,3589],{"class":1066},[362,20596,1050],{"class":901},[362,20598,20599],{"class":852,"line":944},[362,20600,868],{"emptyLinePlaceholder":867},[362,20602,20603,20605,20607,20609,20611,20613,20615,20617,20619,20621,20623,20625,20627,20629,20631,20633,20635,20637,20639,20641,20643,20645,20647,20649,20651,20653],{"class":852,"line":977},[362,20604,12106],{"class":860},[362,20606,395],{"class":1106},[362,20608,2380],{"class":860},[362,20610,902],{"class":901},[362,20612,1235],{"class":1066},[362,20614,1238],{"class":901},[362,20616,1492],{"class":1277},[362,20618,1070],{"class":901},[362,20620,3659],{"class":1066},[362,20622,1090],{"class":901},[362,20624,1074],{"class":1073},[362,20626,933],{"class":901},[362,20628,1607],{"class":1073},[362,20630,3005],{"class":901},[362,20632,2036],{"class":1277},[362,20634,1070],{"class":901},[362,20636,3659],{"class":1066},[362,20638,1090],{"class":901},[362,20640,1074],{"class":1073},[362,20642,933],{"class":901},[362,20644,3379],{"class":1073},[362,20646,3005],{"class":901},[362,20648,3688],{"class":1073},[362,20650,933],{"class":901},[362,20652,4562],{"class":1073},[362,20654,2605],{"class":901},[362,20656,20657,20660,20662,20664,20666,20668,20670,20672,20674,20676,20678,20680,20682,20684,20686,20688,20690,20693],{"class":852,"line":994},[362,20658,20659],{"class":860},"rec_ok ",[362,20661,395],{"class":1106},[362,20663,1734],{"class":1066},[362,20665,1070],{"class":901},[362,20667,704],{"class":1066},[362,20669,1070],{"class":901},[362,20671,1094],{"class":1093},[362,20673,294],{"class":1097},[362,20675,1094],{"class":1093},[362,20677,933],{"class":901},[362,20679,3617],{"class":1225},[362,20681,395],{"class":1106},[362,20683,4669],{"class":1073},[362,20685,933],{"class":901},[362,20687,3165],{"class":1225},[362,20689,395],{"class":1106},[362,20691,20692],{"class":1073},"0.16",[362,20694,1259],{"class":901},[362,20696,20697,20700,20702,20704,20706,20708,20710,20712,20714,20716,20718,20720,20722,20724,20726,20728,20730,20732,20734,20736,20738],{"class":852,"line":1015},[362,20698,20699],{"class":1066},"                    m0",[362,20701,933],{"class":901},[362,20703,2380],{"class":1066},[362,20705,902],{"class":901},[362,20707,2385],{"class":1066},[362,20709,1070],{"class":901},[362,20711,4103],{"class":1073},[362,20713,2129],{"class":901},[362,20715,1764],{"class":1106},[362,20717,4614],{"class":1073},[362,20719,933],{"class":901},[362,20721,3764],{"class":1277},[362,20723,1070],{"class":901},[362,20725,3659],{"class":1066},[362,20727,3771],{"class":901},[362,20729,3774],{"class":901},[362,20731,2929],{"class":1787},[362,20733,1103],{"class":901},[362,20735,1764],{"class":1106},[362,20737,3783],{"class":1066},[362,20739,1031],{"class":901},[362,20741,20742,20745,20747,20750,20752,20754],{"class":852,"line":1034},[362,20743,20744],{"class":1225},"                    dts",[362,20746,395],{"class":1106},[362,20748,20749],{"class":1277},"list",[362,20751,1070],{"class":901},[362,20753,2041],{"class":1066},[362,20755,3145],{"class":901},[362,20757,20758,20761,20763,20765,20767,20769,20771,20773,20775,20777,20779,20781,20783,20785,20787,20789,20791,20793],{"class":852,"line":1047},[362,20759,20760],{"class":860},"rec_bad ",[362,20762,395],{"class":1106},[362,20764,1734],{"class":1066},[362,20766,1070],{"class":901},[362,20768,704],{"class":1066},[362,20770,1070],{"class":901},[362,20772,1094],{"class":1093},[362,20774,294],{"class":1097},[362,20776,1094],{"class":1093},[362,20778,933],{"class":901},[362,20780,3617],{"class":1225},[362,20782,395],{"class":1106},[362,20784,4669],{"class":1073},[362,20786,933],{"class":901},[362,20788,3165],{"class":1225},[362,20790,395],{"class":1106},[362,20792,20692],{"class":1073},[362,20794,1259],{"class":901},[362,20796,20797,20800,20802,20804,20806,20808,20810,20812,20814,20816,20818,20820,20822,20824,20826,20828,20830,20832,20834,20836,20838],{"class":852,"line":1053},[362,20798,20799],{"class":1066},"                     m0",[362,20801,933],{"class":901},[362,20803,2380],{"class":1066},[362,20805,902],{"class":901},[362,20807,2385],{"class":1066},[362,20809,1070],{"class":901},[362,20811,4103],{"class":1073},[362,20813,2129],{"class":901},[362,20815,1764],{"class":1106},[362,20817,4614],{"class":1073},[362,20819,933],{"class":901},[362,20821,3764],{"class":1277},[362,20823,1070],{"class":901},[362,20825,3659],{"class":1066},[362,20827,3771],{"class":901},[362,20829,3774],{"class":901},[362,20831,2929],{"class":1787},[362,20833,1103],{"class":901},[362,20835,1764],{"class":1106},[362,20837,3783],{"class":1066},[362,20839,1031],{"class":901},[362,20841,20842,20845,20847,20849,20851],{"class":852,"line":1058},[362,20843,20844],{"class":1225},"                     dt",[362,20846,395],{"class":1106},[362,20848,1777],{"class":1073},[362,20850,2129],{"class":901},[362,20852,20853],{"class":2132},"                            # ignores real dt\n",[362,20855,20856],{"class":852,"line":1079},[362,20857,868],{"emptyLinePlaceholder":867},[362,20859,20860,20862,20864,20866,20868,20870,20872,20874,20876,20878,20880,20882,20884,20886,20888,20890,20892,20894,20896],{"class":852,"line":1567},[362,20861,3839],{"class":860},[362,20863,933],{"class":901},[362,20865,6916],{"class":860},[362,20867,395],{"class":1106},[362,20869,3335],{"class":860},[362,20871,902],{"class":901},[362,20873,3853],{"class":1066},[362,20875,1070],{"class":901},[362,20877,1241],{"class":1073},[362,20879,933],{"class":901},[362,20881,3501],{"class":1073},[362,20883,933],{"class":901},[362,20885,6937],{"class":1225},[362,20887,395],{"class":1106},[362,20889,1070],{"class":901},[362,20891,11144],{"class":1073},[362,20893,933],{"class":901},[362,20895,1118],{"class":1073},[362,20897,3145],{"class":901},[362,20899,20900,20902,20904,20906,20908,20910,20912,20914,20916,20918,20920,20922,20924,20927,20929,20931,20934,20936],{"class":852,"line":1577},[362,20901,4133],{"class":856},[362,20903,6958],{"class":860},[362,20905,933],{"class":901},[362,20907,2517],{"class":860},[362,20909,933],{"class":901},[362,20911,17475],{"class":860},[362,20913,2014],{"class":856},[362,20915,6973],{"class":901},[362,20917,6976],{"class":860},[362,20919,1090],{"class":901},[362,20921,1074],{"class":1073},[362,20923,1244],{"class":901},[362,20925,20926],{"class":860}," rec_ok",[362,20928,933],{"class":901},[362,20930,2233],{"class":1093},[362,20932,20933],{"class":1097},"dt-aware (correct): gate hits the next detection",[362,20935,1094],{"class":1093},[362,20937,1259],{"class":901},[362,20939,20940,20942,20944,20946,20948,20950,20953,20955,20957,20960,20962],{"class":852,"line":1586},[362,20941,17506],{"class":901},[362,20943,6976],{"class":860},[362,20945,1090],{"class":901},[362,20947,1241],{"class":1073},[362,20949,1244],{"class":901},[362,20951,20952],{"class":860}," rec_bad",[362,20954,933],{"class":901},[362,20956,2233],{"class":1093},[362,20958,20959],{"class":1097},"fixed dt=1 (wrong): gate undershoots long gaps",[362,20961,1094],{"class":1093},[362,20963,7020],{"class":901},[362,20965,20966,20968,20970,20972,20974,20976,20978,20980,20982,20984,20986,20988,20990,20992,20994,20996,20998,21000,21002,21004,21006,21008,21010,21012,21014,21016,21018,21020,21022,21024,21026,21028],{"class":852,"line":1625},[362,20967,3067],{"class":860},[362,20969,902],{"class":901},[362,20971,3881],{"class":1066},[362,20973,1070],{"class":901},[362,20975,7080],{"class":1066},[362,20977,2956],{"class":901},[362,20979,1607],{"class":1073},[362,20981,1244],{"class":901},[362,20983,12272],{"class":1066},[362,20985,2956],{"class":901},[362,20987,3379],{"class":1073},[362,20989,1244],{"class":901},[362,20991,2233],{"class":1093},[362,20993,2416],{"class":1097},[362,20995,1094],{"class":1093},[362,20997,933],{"class":901},[362,20999,3912],{"class":1225},[362,21001,395],{"class":1106},[362,21003,1094],{"class":1093},[362,21005,6125],{"class":1097},[362,21007,1094],{"class":1093},[362,21009,933],{"class":901},[362,21011,3926],{"class":1225},[362,21013,395],{"class":1106},[362,21015,6184],{"class":1073},[362,21017,933],{"class":901},[362,21019,4924],{"class":1225},[362,21021,395],{"class":1106},[362,21023,1094],{"class":1093},[362,21025,7080],{"class":1097},[362,21027,1094],{"class":1093},[362,21029,1050],{"class":901},[362,21031,21032,21034,21036,21038,21040,21042,21044,21046,21048,21050,21052,21054,21056,21058,21060,21062,21064,21066,21068,21070,21072,21074,21076,21078,21080,21082,21084,21086],{"class":852,"line":1657},[362,21033,3067],{"class":860},[362,21035,902],{"class":901},[362,21037,3966],{"class":1066},[362,21039,1070],{"class":901},[362,21041,3659],{"class":1066},[362,21043,2956],{"class":901},[362,21045,1607],{"class":1073},[362,21047,1244],{"class":901},[362,21049,3979],{"class":1066},[362,21051,2956],{"class":901},[362,21053,3379],{"class":1073},[362,21055,1244],{"class":901},[362,21057,3988],{"class":1225},[362,21059,395],{"class":1106},[362,21061,1094],{"class":1093},[362,21063,386],{"class":1097},[362,21065,1094],{"class":1093},[362,21067,933],{"class":901},[362,21069,3912],{"class":1225},[362,21071,395],{"class":1106},[362,21073,1094],{"class":1093},[362,21075,4007],{"class":1097},[362,21077,1094],{"class":1093},[362,21079,933],{"class":901},[362,21081,4014],{"class":1225},[362,21083,395],{"class":1106},[362,21085,11521],{"class":1073},[362,21087,1031],{"class":901},[362,21089,21090,21092,21094,21096,21098,21100],{"class":852,"line":1689},[362,21091,7144],{"class":1225},[362,21093,395],{"class":1106},[362,21095,1094],{"class":1093},[362,21097,206],{"class":1097},[362,21099,1094],{"class":1093},[362,21101,1050],{"class":901},[362,21103,21104,21106,21108,21110,21112,21114,21116,21118,21120,21122,21124],{"class":852,"line":1709},[362,21105,2003],{"class":856},[362,21107,3360],{"class":860},[362,21109,2014],{"class":856},[362,21111,4140],{"class":2017},[362,21113,1070],{"class":901},[362,21115,3039],{"class":1073},[362,21117,933],{"class":901},[362,21119,3783],{"class":1066},[362,21121,933],{"class":901},[362,21123,7008],{"class":1073},[362,21125,1196],{"class":901},[362,21127,21128,21130,21132,21134,21136,21138,21140,21142,21144,21146,21148,21151],{"class":852,"line":1719},[362,21129,5148],{"class":860},[362,21131,933],{"class":901},[362,21133,4164],{"class":860},[362,21135,395],{"class":1106},[362,21137,3156],{"class":1066},[362,21139,1070],{"class":901},[362,21141,2742],{"class":1066},[362,21143,1090],{"class":901},[362,21145,2046],{"class":1066},[362,21147,1244],{"class":901},[362,21149,21150],{"class":1073}," 0.16",[362,21152,1050],{"class":901},[362,21154,21155,21157,21159,21161,21163,21165,21167,21169,21171,21173,21175,21177,21179,21181,21183,21185,21187,21189,21191,21193,21195,21197],{"class":852,"line":1724},[362,21156,5180],{"class":1066},[362,21158,1070],{"class":901},[362,21160,2778],{"class":1066},[362,21162,933],{"class":901},[362,21164,3288],{"class":1066},[362,21166,933],{"class":901},[362,21168,4204],{"class":1066},[362,21170,933],{"class":901},[362,21172,2793],{"class":1225},[362,21174,395],{"class":1106},[362,21176,2798],{"class":1073},[362,21178,933],{"class":901},[362,21180,4217],{"class":1225},[362,21182,395],{"class":1106},[362,21184,1094],{"class":1093},[362,21186,4224],{"class":1097},[362,21188,1094],{"class":1093},[362,21190,933],{"class":901},[362,21192,3926],{"class":1225},[362,21194,395],{"class":1106},[362,21196,6510],{"class":1073},[362,21198,1050],{"class":901},[362,21200,21201,21203,21205,21207,21209,21211,21213,21215,21217,21219,21221,21223,21225,21227,21229,21231,21233,21235,21237,21239,21241,21243,21245,21247,21249,21251,21253],{"class":852,"line":1729},[362,21202,17838],{"class":860},[362,21204,902],{"class":901},[362,21206,3966],{"class":1066},[362,21208,1238],{"class":901},[362,21210,1492],{"class":1277},[362,21212,1070],{"class":901},[362,21214,8616],{"class":1066},[362,21216,1090],{"class":901},[362,21218,1074],{"class":1073},[362,21220,8713],{"class":901},[362,21222,3774],{"class":901},[362,21224,1492],{"class":1277},[362,21226,1070],{"class":901},[362,21228,8616],{"class":1066},[362,21230,1090],{"class":901},[362,21232,1241],{"class":1073},[362,21234,8713],{"class":901},[362,21236,3912],{"class":1225},[362,21238,395],{"class":1106},[362,21240,1094],{"class":1093},[362,21242,4224],{"class":1097},[362,21244,1094],{"class":1093},[362,21246,933],{"class":901},[362,21248,4014],{"class":1225},[362,21250,395],{"class":1106},[362,21252,17187],{"class":1073},[362,21254,1050],{"class":901},[362,21256,21257,21259,21261,21263,21265,21267,21269,21271,21273,21275,21277,21279,21281,21283,21285,21287,21289,21291,21293,21296,21298],{"class":852,"line":1769},[362,21258,3067],{"class":860},[362,21260,902],{"class":901},[362,21262,3881],{"class":1066},[362,21264,4248],{"class":901},[362,21266,4251],{"class":901},[362,21268,3912],{"class":1225},[362,21270,395],{"class":1106},[362,21272,1094],{"class":1093},[362,21274,4224],{"class":1097},[362,21276,1094],{"class":1093},[362,21278,933],{"class":901},[362,21280,3926],{"class":1225},[362,21282,395],{"class":1106},[362,21284,6510],{"class":1073},[362,21286,933],{"class":901},[362,21288,4924],{"class":1225},[362,21290,395],{"class":1106},[362,21292,1094],{"class":1093},[362,21294,21295],{"class":1097},"one-step prediction + 2σ",[362,21297,1094],{"class":1093},[362,21299,1050],{"class":901},[362,21301,21302,21304,21306,21308,21310,21312,21314,21316,21318,21320,21322,21324,21326,21328,21330,21332,21334,21336,21338,21340,21342,21344,21346,21348,21350,21352],{"class":852,"line":1802},[362,21303,3067],{"class":860},[362,21305,902],{"class":901},[362,21307,4295],{"class":1066},[362,21309,1070],{"class":901},[362,21311,17939],{"class":1066},[362,21313,933],{"class":901},[362,21315,4372],{"class":1225},[362,21317,395],{"class":1106},[362,21319,3865],{"class":1073},[362,21321,2129],{"class":901},[362,21323,4328],{"class":860},[362,21325,902],{"class":901},[362,21327,4353],{"class":1066},[362,21329,1070],{"class":901},[362,21331,6831],{"class":1225},[362,21333,395],{"class":1106},[362,21335,4377],{"class":1073},[362,21337,2129],{"class":901},[362,21339,4328],{"class":860},[362,21341,902],{"class":901},[362,21343,4386],{"class":1066},[362,21345,1070],{"class":901},[362,21347,4391],{"class":1225},[362,21349,395],{"class":1106},[362,21351,4396],{"class":1073},[362,21353,1050],{"class":901},[362,21355,21356,21358,21360,21362,21364,21366,21368,21370,21372,21374,21376,21378,21380,21382,21384,21386],{"class":852,"line":1808},[362,21357,3067],{"class":860},[362,21359,902],{"class":901},[362,21361,4315],{"class":1066},[362,21363,1070],{"class":901},[362,21365,1094],{"class":1093},[362,21367,386],{"class":1097},[362,21369,1094],{"class":1093},[362,21371,2129],{"class":901},[362,21373,4328],{"class":860},[362,21375,902],{"class":901},[362,21377,4333],{"class":1066},[362,21379,1070],{"class":901},[362,21381,1094],{"class":1093},[362,21383,4340],{"class":1097},[362,21385,1094],{"class":1093},[362,21387,1050],{"class":901},[362,21389,21390,21392,21394,21396,21398,21400,21402,21404],{"class":852,"line":1814},[362,21391,1082],{"class":860},[362,21393,902],{"class":901},[362,21395,4407],{"class":1066},[362,21397,4410],{"class":901},[362,21399,4413],{"class":860},[362,21401,902],{"class":901},[362,21403,4418],{"class":1066},[362,21405,1962],{"class":901},[338,21407,21408],{},[4424,21409],{"alt":847,"src":21410},"\u002F_nb\u002F4af890e4235cc037.png",[810,21412,21414],{"id":21413},"takeaways","Takeaways",[352,21416,21417,21427,21444,21458,21469],{},[355,21418,21419,21422,21423,21426],{},[347,21420,21421],{},"Predict + update is the whole filter."," Predict produces a\n",[342,21424,21425],{},"distribution"," over the next measurement; update fuses a detection\nand shrinks it. The ellipses\u002Fellipsoids in every plot are that\npredictive distribution — and they double as the association gate.",[355,21428,21429,21438,21439,820,21441,21443],{},[347,21430,21431,21432,1130,21434,21437],{},"The state type only changes ",[702,21433,398],{},[702,21435,21436],{},"H",", and the measurement.","\nPoints, boxes, mask centroids, 3-D clouds and appearance kernels\nare all the same recursion with different matrices — which is why\nunitrack exposes them as one ",[702,21440,827],{},[702,21442,831],{}," family.",[355,21445,21446,21449,21450,21452,21453,124,21455,21457],{},[347,21447,21448],{},"It excels"," at denoising steady motion, coasting through short\nocclusions, inferring states it never measures (velocity from\nposition alone, 6e), and staying calibrated under irregular frame\nrates via ",[702,21451,20389],{},"-aware ",[702,21454,398],{},[702,21456,528],{}," (6i).",[355,21459,21460,21463,21464,124,21466,21468],{},[347,21461,21462],{},"It breaks"," under maneuvers (model mismatch, 6b), constant\nacceleration (systematic lag, 6g), bad ",[702,21465,13927],{},[702,21467,3803],{}," tuning (6c),\nnon-Gaussian clutter unless you gate (6f), turns hidden inside a\nlong occlusion (6h), and identity ambiguity when predictive gates\noverlap (6d). Tuning fixes some; the rest need a better motion\nmodel, an outlier gate, or an appearance partner.",[355,21470,21471,21474,21475,21478,21479,21457],{},[347,21472,21473],{},"The predictive gate is the workhorse."," Almost every failure\nabove is ",[342,21476,21477],{},"detected"," by asking \"is the detection inside the 2σ\nellipse?\" — the same Mahalanobis test that rejects clutter (6f),\nflags a maneuver (6b), and exposes a miscalibrated ",[702,21480,20389],{},[338,21482,21483,21484,21486,21487,21490,21491,21495],{},"In unitrack you rarely drive the filter by hand as we did here.\nDrop any of these processes into a ",[702,21485,835],{}," via ",[702,21488,21489],{},"state_entries(...)","\nand the predict\u002Fupdate loop, gating, and lifecycle are handled for\nyou — see the ",[21492,21493,21494],"a",{"href":90},"tutorial notebooks","\n(notebook 5 covers states and lifecycle end to end).",[21497,21498,21499],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .s2W-s, html code.shiki .s2W-s{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .sithA, html code.shiki .sithA{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smCYv, html code.shiki .smCYv{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":847,"searchDepth":871,"depth":871,"links":21501},[21502,21505,21508,21509,21510,21511,21512,21525],{"id":812,"depth":864,"text":813,"children":21503},[21504],{"id":1124,"depth":871,"text":1125},{"id":3384,"depth":864,"text":3385,"children":21506},[21507],{"id":4429,"depth":871,"text":4430},{"id":5394,"depth":864,"text":5395},{"id":7314,"depth":864,"text":7315},{"id":9039,"depth":864,"text":9040},{"id":10685,"depth":864,"text":10686},{"id":11900,"depth":864,"text":11901,"children":21513},[21514,21515,21516,21518,21519,21520,21521,21522,21524],{"id":11922,"depth":871,"text":11923},{"id":12736,"depth":871,"text":12737},{"id":13931,"depth":871,"text":21517},"6c — Failure: mistuned noise (q too small vs. too large)",{"id":14762,"depth":871,"text":14763},{"id":15865,"depth":871,"text":15866},{"id":16992,"depth":871,"text":16993},{"id":18033,"depth":871,"text":18034},{"id":19030,"depth":871,"text":21523},"6h — Failure: a maneuver during a long occlusion",{"id":20372,"depth":871,"text":20373},{"id":21413,"depth":864,"text":21414},"A tracker has to answer one question every frame: given everything\nI have seen so far, where is each object now — and how sure am I?\nA Kalman filter answers both at once. It carries, per object, a\nGaussian belief over a latent state (position, velocity, size, …)\nand rolls it forward in two steps:","md",{"notebook":867},{"icon":63},{"title":85,"description":21526},"yDauTCEE7VEoD1dPgC16geq8Dfqy7aQavmRzBD5r3do",{},1785139890006]