[{"data":1,"prerenderedAt":3545},["ShallowReactive",2],{"home-blog":3,"home-notebook":3306},[4,3079],{"id":5,"title":6,"algorithms":7,"author":9,"body":10,"canonical_url":3045,"cover_alt":3046,"cover_image":3046,"demo_url":3046,"description":16,"extension":3047,"featured":2942,"kind":3048,"languages":3049,"learning_objectives":3050,"limitations":3054,"meta":3056,"modified":3057,"navigation":2942,"path":3058,"projects":3059,"published":3057,"relations":3061,"seo":3065,"slug":3066,"source_url":3046,"stem":3067,"summary":3068,"tags":3069,"technologies":3072,"topics":3074,"version":3077,"__hash__":3078},"blog\u002Fblog\u002Fgeometry-of-image-formation.md","The geometry of image formation",[8],"perspective-projection","Lucas Aruodore Adomi",{"type":11,"value":12,"toc":3038},"minimark",[13,17,22,387,679,964,1454,1593,1597,1600,2600,2913,2917,2920,2997,3000,3004,3007,3010,3014,3034],[14,15,16],"p",{},"Computer vision begins with a lossy map. A point in three-dimensional space becomes a point on a two-dimensional sensor, and depth disappears. The familiar projection matrix is compact enough to hide where that loss occurs and which assumptions make the map useful.",[18,19,21],"h2",{"id":20},"four-coordinate-systems-one-observation","Four coordinate systems, one observation",[14,23,24,25,386],{},"Let a world point be ",[26,27,30,109],"span",{"className":28},[29],"katex",[26,31,34],{"className":32},[33],"katex-mathml",[35,36,38],"math",{"xmlns":37},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[39,40,41,104],"semantics",{},[42,43,44,54,58,62,69,73,80,82,89,91,95],"mrow",{},[45,46,47,51],"msub",{},[48,49,50],"mi",{},"P",[48,52,53],{},"w",[55,56,57],"mo",{},"=",[55,59,61],{"stretchy":60},"false","(",[45,63,64,67],{},[48,65,66],{},"X",[48,68,53],{},[55,70,72],{"separator":71},"true",",",[45,74,75,78],{},[48,76,77],{},"Y",[48,79,53],{},[55,81,72],{"separator":71},[45,83,84,87],{},[48,85,86],{},"Z",[48,88,53],{},[55,90,72],{"separator":71},[92,93,94],"mn",{},"1",[96,97,98,101],"msup",{},[55,99,100],{"stretchy":60},")",[48,102,103],{},"T",[105,106,108],"annotation",{"encoding":107},"application\u002Fx-tex","P_w = (X_w, Y_w, Z_w, 1)^T",[26,110,113,194],{"className":111,"ariaHidden":71},[112],"katex-html",[26,114,117,122,182,187,191],{"className":115},[116],"base",[26,118],{"className":119,"style":121},[120],"strut","height:0.8333em;vertical-align:-0.15em;",[26,123,126,131],{"className":124},[125],"mord",[26,127,50],{"className":128,"style":130},[125,129],"mathnormal","margin-right:0.1389em;",[26,132,135],{"className":133},[134],"msupsub",[26,136,140,173],{"className":137},[138,139],"vlist-t","vlist-t2",[26,141,144,168],{"className":142},[143],"vlist-r",[26,145,149],{"className":146,"style":148},[147],"vlist","height:0.1514em;",[26,150,152,157],{"style":151},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[26,153],{"className":154,"style":156},[155],"pstrut","height:2.7em;",[26,158,164],{"className":159},[160,161,162,163],"sizing","reset-size6","size3","mtight",[26,165,53],{"className":166,"style":167},[125,129,163],"margin-right:0.0269em;",[26,169,172],{"className":170},[171],"vlist-s","​",[26,174,176],{"className":175},[143],[26,177,180],{"className":178,"style":179},[147],"height:0.15em;",[26,181],{},[26,183],{"className":184,"style":186},[185],"mspace","margin-right:0.2778em;",[26,188,57],{"className":189},[190],"mrel",[26,192],{"className":193,"style":186},[185],[26,195,197,201,205,247,251,255,297,300,303,345,348,351,354],{"className":196},[116],[26,198],{"className":199,"style":200},[120],"height:1.0913em;vertical-align:-0.25em;",[26,202,61],{"className":203},[204],"mopen",[26,206,208,212],{"className":207},[125],[26,209,66],{"className":210,"style":211},[125,129],"margin-right:0.0785em;",[26,213,215],{"className":214},[134],[26,216,218,239],{"className":217},[138,139],[26,219,221,236],{"className":220},[143],[26,222,224],{"className":223,"style":148},[147],[26,225,227,230],{"style":226},"top:-2.55em;margin-left:-0.0785em;margin-right:0.05em;",[26,228],{"className":229,"style":156},[155],[26,231,233],{"className":232},[160,161,162,163],[26,234,53],{"className":235,"style":167},[125,129,163],[26,237,172],{"className":238},[171],[26,240,242],{"className":241},[143],[26,243,245],{"className":244,"style":179},[147],[26,246],{},[26,248,72],{"className":249},[250],"mpunct",[26,252],{"className":253,"style":254},[185],"margin-right:0.1667em;",[26,256,258,262],{"className":257},[125],[26,259,77],{"className":260,"style":261},[125,129],"margin-right:0.2222em;",[26,263,265],{"className":264},[134],[26,266,268,289],{"className":267},[138,139],[26,269,271,286],{"className":270},[143],[26,272,274],{"className":273,"style":148},[147],[26,275,277,280],{"style":276},"top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;",[26,278],{"className":279,"style":156},[155],[26,281,283],{"className":282},[160,161,162,163],[26,284,53],{"className":285,"style":167},[125,129,163],[26,287,172],{"className":288},[171],[26,290,292],{"className":291},[143],[26,293,295],{"className":294,"style":179},[147],[26,296],{},[26,298,72],{"className":299},[250],[26,301],{"className":302,"style":254},[185],[26,304,306,310],{"className":305},[125],[26,307,86],{"className":308,"style":309},[125,129],"margin-right:0.0715em;",[26,311,313],{"className":312},[134],[26,314,316,337],{"className":315},[138,139],[26,317,319,334],{"className":318},[143],[26,320,322],{"className":321,"style":148},[147],[26,323,325,328],{"style":324},"top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;",[26,326],{"className":327,"style":156},[155],[26,329,331],{"className":330},[160,161,162,163],[26,332,53],{"className":333,"style":167},[125,129,163],[26,335,172],{"className":336},[171],[26,338,340],{"className":339},[143],[26,341,343],{"className":342,"style":179},[147],[26,344],{},[26,346,72],{"className":347},[250],[26,349],{"className":350,"style":254},[185],[26,352,94],{"className":353},[125],[26,355,358,361],{"className":356},[357],"mclose",[26,359,100],{"className":360},[357],[26,362,364],{"className":363},[134],[26,365,367],{"className":366},[138],[26,368,370],{"className":369},[143],[26,371,374],{"className":372,"style":373},[147],"height:0.8413em;",[26,375,377,380],{"style":376},"top:-3.063em;margin-right:0.05em;",[26,378],{"className":379,"style":156},[155],[26,381,383],{"className":382},[160,161,162,163],[26,384,103],{"className":385,"style":130},[125,129,163],". A rigid transform places it in camera coordinates:",[26,388,391],{"className":389},[390],"katex-display",[26,392,394,460],{"className":393},[29],[26,395,397],{"className":396},[33],[35,398,400],{"xmlns":37,"display":399},"block",[39,401,402,457],{},[42,403,404,411,413,447,453],{},[45,405,406,408],{},[48,407,50],{},[48,409,410],{},"c",[55,412,57],{},[42,414,415,418,444],{},[55,416,417],{"fence":71},"[",[419,420,424],"mtable",{"rowspacing":421,"columnalign":422,"columnspacing":423},"0.16em","center center","1em",[425,426,427,437],"mtr",{},[428,429,430],"mtd",{},[431,432,434],"mstyle",{"scriptlevel":433,"displaystyle":60},"0",[48,435,436],{},"R",[428,438,439],{},[431,440,441],{"scriptlevel":433,"displaystyle":60},[48,442,443],{},"t",[55,445,446],{"fence":71},"]",[45,448,449,451],{},[48,450,50],{},[48,452,53],{},[48,454,456],{"mathvariant":455},"normal",".",[105,458,459],{"encoding":107},"P_c = \\begin{bmatrix}R & t\\end{bmatrix}P_w.",[26,461,463,518],{"className":462,"ariaHidden":71},[112],[26,464,466,469,509,512,515],{"className":465},[116],[26,467],{"className":468,"style":121},[120],[26,470,472,475],{"className":471},[125],[26,473,50],{"className":474,"style":130},[125,129],[26,476,478],{"className":477},[134],[26,479,481,501],{"className":480},[138,139],[26,482,484,498],{"className":483},[143],[26,485,487],{"className":486,"style":148},[147],[26,488,489,492],{"style":151},[26,490],{"className":491,"style":156},[155],[26,493,495],{"className":494},[160,161,162,163],[26,496,410],{"className":497},[125,129,163],[26,499,172],{"className":500},[171],[26,502,504],{"className":503},[143],[26,505,507],{"className":506,"style":179},[147],[26,508],{},[26,510],{"className":511,"style":186},[185],[26,513,57],{"className":514},[190],[26,516],{"className":517,"style":186},[185],[26,519,521,525,633,636,676],{"className":520},[116],[26,522],{"className":523,"style":524},[120],"height:1.2em;vertical-align:-0.35em;",[26,526,529,539,627],{"className":527},[528],"minner",[26,530,534],{"className":531,"style":533},[204,532],"delimcenter","top:0em;",[26,535,417],{"className":536},[537,538],"delimsizing","size1",[26,540,542],{"className":541},[125],[26,543,545,585,590,593],{"className":544},[419],[26,546,549],{"className":547},[548],"col-align-c",[26,550,552,576],{"className":551},[138,139],[26,553,555,573],{"className":554},[143],[26,556,559],{"className":557,"style":558},[147],"height:0.85em;",[26,560,562,566],{"style":561},"top:-3.01em;",[26,563],{"className":564,"style":565},[155],"height:3em;",[26,567,569],{"className":568},[125],[26,570,436],{"className":571,"style":572},[125,129],"margin-right:0.0077em;",[26,574,172],{"className":575},[171],[26,577,579],{"className":578},[143],[26,580,583],{"className":581,"style":582},[147],"height:0.35em;",[26,584],{},[26,586],{"className":587,"style":589},[588],"arraycolsep","width:0.5em;",[26,591],{"className":592,"style":589},[588],[26,594,596],{"className":595},[548],[26,597,599,619],{"className":598},[138,139],[26,600,602,616],{"className":601},[143],[26,603,605],{"className":604,"style":558},[147],[26,606,607,610],{"style":561},[26,608],{"className":609,"style":565},[155],[26,611,613],{"className":612},[125],[26,614,443],{"className":615},[125,129],[26,617,172],{"className":618},[171],[26,620,622],{"className":621},[143],[26,623,625],{"className":624,"style":582},[147],[26,626],{},[26,628,630],{"className":629,"style":533},[357,532],[26,631,446],{"className":632},[537,538],[26,634],{"className":635,"style":254},[185],[26,637,639,642],{"className":638},[125],[26,640,50],{"className":641,"style":130},[125,129],[26,643,645],{"className":644},[134],[26,646,648,668],{"className":647},[138,139],[26,649,651,665],{"className":650},[143],[26,652,654],{"className":653,"style":148},[147],[26,655,656,659],{"style":151},[26,657],{"className":658,"style":156},[155],[26,660,662],{"className":661},[160,161,162,163],[26,663,53],{"className":664,"style":167},[125,129,163],[26,666,172],{"className":667},[171],[26,669,671],{"className":670},[143],[26,672,674],{"className":673,"style":179},[147],[26,675],{},[26,677,456],{"className":678},[125],[14,680,681,682,963],{},"Perspective division then maps ",[26,683,685,735],{"className":684},[29],[26,686,688],{"className":687},[33],[35,689,690],{"xmlns":37},[39,691,692,732],{},[42,693,694,700,702,704,710,712,718,720,726],{},[45,695,696,698],{},[48,697,50],{},[48,699,410],{},[55,701,57],{},[55,703,61],{"stretchy":60},[45,705,706,708],{},[48,707,66],{},[48,709,410],{},[55,711,72],{"separator":71},[45,713,714,716],{},[48,715,77],{},[48,717,410],{},[55,719,72],{"separator":71},[45,721,722,724],{},[48,723,86],{},[48,725,410],{},[96,727,728,730],{},[55,729,100],{"stretchy":60},[48,731,103],{},[105,733,734],{"encoding":107},"P_c = (X_c, Y_c, Z_c)^T",[26,736,738,793],{"className":737,"ariaHidden":71},[112],[26,739,741,744,784,787,790],{"className":740},[116],[26,742],{"className":743,"style":121},[120],[26,745,747,750],{"className":746},[125],[26,748,50],{"className":749,"style":130},[125,129],[26,751,753],{"className":752},[134],[26,754,756,776],{"className":755},[138,139],[26,757,759,773],{"className":758},[143],[26,760,762],{"className":761,"style":148},[147],[26,763,764,767],{"style":151},[26,765],{"className":766,"style":156},[155],[26,768,770],{"className":769},[160,161,162,163],[26,771,410],{"className":772},[125,129,163],[26,774,172],{"className":775},[171],[26,777,779],{"className":778},[143],[26,780,782],{"className":781,"style":179},[147],[26,783],{},[26,785],{"className":786,"style":186},[185],[26,788,57],{"className":789},[190],[26,791],{"className":792,"style":186},[185],[26,794,796,799,802,842,845,848,888,891,894,934],{"className":795},[116],[26,797],{"className":798,"style":200},[120],[26,800,61],{"className":801},[204],[26,803,805,808],{"className":804},[125],[26,806,66],{"className":807,"style":211},[125,129],[26,809,811],{"className":810},[134],[26,812,814,834],{"className":813},[138,139],[26,815,817,831],{"className":816},[143],[26,818,820],{"className":819,"style":148},[147],[26,821,822,825],{"style":226},[26,823],{"className":824,"style":156},[155],[26,826,828],{"className":827},[160,161,162,163],[26,829,410],{"className":830},[125,129,163],[26,832,172],{"className":833},[171],[26,835,837],{"className":836},[143],[26,838,840],{"className":839,"style":179},[147],[26,841],{},[26,843,72],{"className":844},[250],[26,846],{"className":847,"style":254},[185],[26,849,851,854],{"className":850},[125],[26,852,77],{"className":853,"style":261},[125,129],[26,855,857],{"className":856},[134],[26,858,860,880],{"className":859},[138,139],[26,861,863,877],{"className":862},[143],[26,864,866],{"className":865,"style":148},[147],[26,867,868,871],{"style":276},[26,869],{"className":870,"style":156},[155],[26,872,874],{"className":873},[160,161,162,163],[26,875,410],{"className":876},[125,129,163],[26,878,172],{"className":879},[171],[26,881,883],{"className":882},[143],[26,884,886],{"className":885,"style":179},[147],[26,887],{},[26,889,72],{"className":890},[250],[26,892],{"className":893,"style":254},[185],[26,895,897,900],{"className":896},[125],[26,898,86],{"className":899,"style":309},[125,129],[26,901,903],{"className":902},[134],[26,904,906,926],{"className":905},[138,139],[26,907,909,923],{"className":908},[143],[26,910,912],{"className":911,"style":148},[147],[26,913,914,917],{"style":324},[26,915],{"className":916,"style":156},[155],[26,918,920],{"className":919},[160,161,162,163],[26,921,410],{"className":922},[125,129,163],[26,924,172],{"className":925},[171],[26,927,929],{"className":928},[143],[26,930,932],{"className":931,"style":179},[147],[26,933],{},[26,935,937,940],{"className":936},[357],[26,938,100],{"className":939},[357],[26,941,943],{"className":942},[134],[26,944,946],{"className":945},[138],[26,947,949],{"className":948},[143],[26,950,952],{"className":951,"style":373},[147],[26,953,954,957],{"style":376},[26,955],{"className":956,"style":156},[155],[26,958,960],{"className":959},[160,161,162,163],[26,961,103],{"className":962,"style":130},[125,129,163]," to the normalized image plane:",[26,965,967],{"className":966},[390],[26,968,970,1037],{"className":969},[29],[26,971,973],{"className":972},[33],[35,974,975],{"xmlns":37,"display":399},[39,976,977,1034],{},[42,978,979,987,989,1004,1006,1009,1016,1018,1032],{},[45,980,981,984],{},[48,982,983],{},"x",[48,985,986],{},"n",[55,988,57],{},[990,991,992,998],"mfrac",{},[45,993,994,996],{},[48,995,66],{},[48,997,410],{},[45,999,1000,1002],{},[48,1001,86],{},[48,1003,410],{},[55,1005,72],{"separator":71},[185,1007],{"width":1008},"2em",[45,1010,1011,1014],{},[48,1012,1013],{},"y",[48,1015,986],{},[55,1017,57],{},[990,1019,1020,1026],{},[45,1021,1022,1024],{},[48,1023,77],{},[48,1025,410],{},[45,1027,1028,1030],{},[48,1029,86],{},[48,1031,410],{},[48,1033,456],{"mathvariant":455},[105,1035,1036],{"encoding":107},"x_n = \\frac{X_c}{Z_c}, \\qquad y_n = \\frac{Y_c}{Z_c}.",[26,1038,1040,1097,1309],{"className":1039,"ariaHidden":71},[112],[26,1041,1043,1047,1088,1091,1094],{"className":1042},[116],[26,1044],{"className":1045,"style":1046},[120],"height:0.5806em;vertical-align:-0.15em;",[26,1048,1050,1053],{"className":1049},[125],[26,1051,983],{"className":1052},[125,129],[26,1054,1056],{"className":1055},[134],[26,1057,1059,1080],{"className":1058},[138,139],[26,1060,1062,1077],{"className":1061},[143],[26,1063,1065],{"className":1064,"style":148},[147],[26,1066,1068,1071],{"style":1067},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[26,1069],{"className":1070,"style":156},[155],[26,1072,1074],{"className":1073},[160,161,162,163],[26,1075,986],{"className":1076},[125,129,163],[26,1078,172],{"className":1079},[171],[26,1081,1083],{"className":1082},[143],[26,1084,1086],{"className":1085,"style":179},[147],[26,1087],{},[26,1089],{"className":1090,"style":186},[185],[26,1092,57],{"className":1093},[190],[26,1095],{"className":1096,"style":186},[185],[26,1098,1100,1104,1248,1251,1255,1258,1300,1303,1306],{"className":1099},[116],[26,1101],{"className":1102,"style":1103},[120],"height:2.1963em;vertical-align:-0.836em;",[26,1105,1107,1111,1245],{"className":1106},[125],[26,1108],{"className":1109},[204,1110],"nulldelimiter",[26,1112,1114],{"className":1113},[990],[26,1115,1117,1236],{"className":1116},[138,139],[26,1118,1120,1233],{"className":1119},[143],[26,1121,1124,1173,1184],{"className":1122,"style":1123},[147],"height:1.3603em;",[26,1125,1127,1130],{"style":1126},"top:-2.314em;",[26,1128],{"className":1129,"style":565},[155],[26,1131,1133],{"className":1132},[125],[26,1134,1136,1139],{"className":1135},[125],[26,1137,86],{"className":1138,"style":309},[125,129],[26,1140,1142],{"className":1141},[134],[26,1143,1145,1165],{"className":1144},[138,139],[26,1146,1148,1162],{"className":1147},[143],[26,1149,1151],{"className":1150,"style":148},[147],[26,1152,1153,1156],{"style":324},[26,1154],{"className":1155,"style":156},[155],[26,1157,1159],{"className":1158},[160,161,162,163],[26,1160,410],{"className":1161},[125,129,163],[26,1163,172],{"className":1164},[171],[26,1166,1168],{"className":1167},[143],[26,1169,1171],{"className":1170,"style":179},[147],[26,1172],{},[26,1174,1176,1179],{"style":1175},"top:-3.23em;",[26,1177],{"className":1178,"style":565},[155],[26,1180],{"className":1181,"style":1183},[1182],"frac-line","border-bottom-width:0.04em;",[26,1185,1187,1190],{"style":1186},"top:-3.677em;",[26,1188],{"className":1189,"style":565},[155],[26,1191,1193],{"className":1192},[125],[26,1194,1196,1199],{"className":1195},[125],[26,1197,66],{"className":1198,"style":211},[125,129],[26,1200,1202],{"className":1201},[134],[26,1203,1205,1225],{"className":1204},[138,139],[26,1206,1208,1222],{"className":1207},[143],[26,1209,1211],{"className":1210,"style":148},[147],[26,1212,1213,1216],{"style":226},[26,1214],{"className":1215,"style":156},[155],[26,1217,1219],{"className":1218},[160,161,162,163],[26,1220,410],{"className":1221},[125,129,163],[26,1223,172],{"className":1224},[171],[26,1226,1228],{"className":1227},[143],[26,1229,1231],{"className":1230,"style":179},[147],[26,1232],{},[26,1234,172],{"className":1235},[171],[26,1237,1239],{"className":1238},[143],[26,1240,1243],{"className":1241,"style":1242},[147],"height:0.836em;",[26,1244],{},[26,1246],{"className":1247},[357,1110],[26,1249,72],{"className":1250},[250],[26,1252],{"className":1253,"style":1254},[185],"margin-right:2em;",[26,1256],{"className":1257,"style":254},[185],[26,1259,1261,1265],{"className":1260},[125],[26,1262,1013],{"className":1263,"style":1264},[125,129],"margin-right:0.0359em;",[26,1266,1268],{"className":1267},[134],[26,1269,1271,1292],{"className":1270},[138,139],[26,1272,1274,1289],{"className":1273},[143],[26,1275,1277],{"className":1276,"style":148},[147],[26,1278,1280,1283],{"style":1279},"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;",[26,1281],{"className":1282,"style":156},[155],[26,1284,1286],{"className":1285},[160,161,162,163],[26,1287,986],{"className":1288},[125,129,163],[26,1290,172],{"className":1291},[171],[26,1293,1295],{"className":1294},[143],[26,1296,1298],{"className":1297,"style":179},[147],[26,1299],{},[26,1301],{"className":1302,"style":186},[185],[26,1304,57],{"className":1305},[190],[26,1307],{"className":1308,"style":186},[185],[26,1310,1312,1315,1451],{"className":1311},[116],[26,1313],{"className":1314,"style":1103},[120],[26,1316,1318,1321,1448],{"className":1317},[125],[26,1319],{"className":1320},[204,1110],[26,1322,1324],{"className":1323},[990],[26,1325,1327,1440],{"className":1326},[138,139],[26,1328,1330,1437],{"className":1329},[143],[26,1331,1333,1381,1389],{"className":1332,"style":1123},[147],[26,1334,1335,1338],{"style":1126},[26,1336],{"className":1337,"style":565},[155],[26,1339,1341],{"className":1340},[125],[26,1342,1344,1347],{"className":1343},[125],[26,1345,86],{"className":1346,"style":309},[125,129],[26,1348,1350],{"className":1349},[134],[26,1351,1353,1373],{"className":1352},[138,139],[26,1354,1356,1370],{"className":1355},[143],[26,1357,1359],{"className":1358,"style":148},[147],[26,1360,1361,1364],{"style":324},[26,1362],{"className":1363,"style":156},[155],[26,1365,1367],{"className":1366},[160,161,162,163],[26,1368,410],{"className":1369},[125,129,163],[26,1371,172],{"className":1372},[171],[26,1374,1376],{"className":1375},[143],[26,1377,1379],{"className":1378,"style":179},[147],[26,1380],{},[26,1382,1383,1386],{"style":1175},[26,1384],{"className":1385,"style":565},[155],[26,1387],{"className":1388,"style":1183},[1182],[26,1390,1391,1394],{"style":1186},[26,1392],{"className":1393,"style":565},[155],[26,1395,1397],{"className":1396},[125],[26,1398,1400,1403],{"className":1399},[125],[26,1401,77],{"className":1402,"style":261},[125,129],[26,1404,1406],{"className":1405},[134],[26,1407,1409,1429],{"className":1408},[138,139],[26,1410,1412,1426],{"className":1411},[143],[26,1413,1415],{"className":1414,"style":148},[147],[26,1416,1417,1420],{"style":276},[26,1418],{"className":1419,"style":156},[155],[26,1421,1423],{"className":1422},[160,161,162,163],[26,1424,410],{"className":1425},[125,129,163],[26,1427,172],{"className":1428},[171],[26,1430,1432],{"className":1431},[143],[26,1433,1435],{"className":1434,"style":179},[147],[26,1436],{},[26,1438,172],{"className":1439},[171],[26,1441,1443],{"className":1442},[143],[26,1444,1446],{"className":1445,"style":1242},[147],[26,1447],{},[26,1449],{"className":1450},[357,1110],[26,1452,456],{"className":1453},[125],[14,1455,1456,1457,1592],{},"This division is the essential operation. Points on the same ray from the camera center share ",[26,1458,1460,1490],{"className":1459},[29],[26,1461,1463],{"className":1462},[33],[35,1464,1465],{"xmlns":37},[39,1466,1467,1487],{},[42,1468,1469,1471,1477,1479,1485],{},[55,1470,61],{"stretchy":60},[45,1472,1473,1475],{},[48,1474,983],{},[48,1476,986],{},[55,1478,72],{"separator":71},[45,1480,1481,1483],{},[48,1482,1013],{},[48,1484,986],{},[55,1486,100],{"stretchy":60},[105,1488,1489],{"encoding":107},"(x_n, y_n)",[26,1491,1493],{"className":1492,"ariaHidden":71},[112],[26,1494,1496,1500,1503,1543,1546,1549,1589],{"className":1495},[116],[26,1497],{"className":1498,"style":1499},[120],"height:1em;vertical-align:-0.25em;",[26,1501,61],{"className":1502},[204],[26,1504,1506,1509],{"className":1505},[125],[26,1507,983],{"className":1508},[125,129],[26,1510,1512],{"className":1511},[134],[26,1513,1515,1535],{"className":1514},[138,139],[26,1516,1518,1532],{"className":1517},[143],[26,1519,1521],{"className":1520,"style":148},[147],[26,1522,1523,1526],{"style":1067},[26,1524],{"className":1525,"style":156},[155],[26,1527,1529],{"className":1528},[160,161,162,163],[26,1530,986],{"className":1531},[125,129,163],[26,1533,172],{"className":1534},[171],[26,1536,1538],{"className":1537},[143],[26,1539,1541],{"className":1540,"style":179},[147],[26,1542],{},[26,1544,72],{"className":1545},[250],[26,1547],{"className":1548,"style":254},[185],[26,1550,1552,1555],{"className":1551},[125],[26,1553,1013],{"className":1554,"style":1264},[125,129],[26,1556,1558],{"className":1557},[134],[26,1559,1561,1581],{"className":1560},[138,139],[26,1562,1564,1578],{"className":1563},[143],[26,1565,1567],{"className":1566,"style":148},[147],[26,1568,1569,1572],{"style":1279},[26,1570],{"className":1571,"style":156},[155],[26,1573,1575],{"className":1574},[160,161,162,163],[26,1576,986],{"className":1577},[125,129,163],[26,1579,172],{"className":1580},[171],[26,1582,1584],{"className":1583},[143],[26,1585,1587],{"className":1586,"style":179},[147],[26,1588],{},[26,1590,100],{"className":1591},[357],", so a single image cannot recover their absolute depth without more information.",[18,1594,1596],{"id":1595},"pixels-are-not-normalized-coordinates","Pixels are not normalized coordinates",[14,1598,1599],{},"The intrinsic matrix converts normalized coordinates into sensor coordinates:",[26,1601,1603],{"className":1602},[390],[26,1604,1606,1784],{"className":1605},[29],[26,1607,1609],{"className":1608},[33],[35,1610,1611],{"xmlns":37,"display":399},[39,1612,1613,1781],{},[42,1614,1615,1650,1652,1739,1779],{},[42,1616,1617,1619,1648],{},[55,1618,417],{"fence":71},[419,1620,1622,1631,1640],{"rowspacing":421,"columnalign":1621,"columnspacing":423},"center",[425,1623,1624],{},[428,1625,1626],{},[431,1627,1628],{"scriptlevel":433,"displaystyle":60},[48,1629,1630],{},"u",[425,1632,1633],{},[428,1634,1635],{},[431,1636,1637],{"scriptlevel":433,"displaystyle":60},[48,1638,1639],{},"v",[425,1641,1642],{},[428,1643,1644],{},[431,1645,1646],{"scriptlevel":433,"displaystyle":60},[92,1647,94],{},[55,1649,446],{"fence":71},[55,1651,57],{},[42,1653,1654,1656,1737],{},[55,1655,417],{"fence":71},[419,1657,1659,1689,1717],{"rowspacing":421,"columnalign":1658,"columnspacing":423},"center center center",[425,1660,1661,1672,1679],{},[428,1662,1663],{},[431,1664,1665],{"scriptlevel":433,"displaystyle":60},[45,1666,1667,1670],{},[48,1668,1669],{},"f",[48,1671,983],{},[428,1673,1674],{},[431,1675,1676],{"scriptlevel":433,"displaystyle":60},[48,1677,1678],{},"s",[428,1680,1681],{},[431,1682,1683],{"scriptlevel":433,"displaystyle":60},[45,1684,1685,1687],{},[48,1686,410],{},[48,1688,983],{},[425,1690,1691,1697,1707],{},[428,1692,1693],{},[431,1694,1695],{"scriptlevel":433,"displaystyle":60},[92,1696,433],{},[428,1698,1699],{},[431,1700,1701],{"scriptlevel":433,"displaystyle":60},[45,1702,1703,1705],{},[48,1704,1669],{},[48,1706,1013],{},[428,1708,1709],{},[431,1710,1711],{"scriptlevel":433,"displaystyle":60},[45,1712,1713,1715],{},[48,1714,410],{},[48,1716,1013],{},[425,1718,1719,1725,1731],{},[428,1720,1721],{},[431,1722,1723],{"scriptlevel":433,"displaystyle":60},[92,1724,433],{},[428,1726,1727],{},[431,1728,1729],{"scriptlevel":433,"displaystyle":60},[92,1730,433],{},[428,1732,1733],{},[431,1734,1735],{"scriptlevel":433,"displaystyle":60},[92,1736,94],{},[55,1738,446],{"fence":71},[42,1740,1741,1743,1777],{},[55,1742,417],{"fence":71},[419,1744,1745,1757,1769],{"rowspacing":421,"columnalign":1621,"columnspacing":423},[425,1746,1747],{},[428,1748,1749],{},[431,1750,1751],{"scriptlevel":433,"displaystyle":60},[45,1752,1753,1755],{},[48,1754,983],{},[48,1756,986],{},[425,1758,1759],{},[428,1760,1761],{},[431,1762,1763],{"scriptlevel":433,"displaystyle":60},[45,1764,1765,1767],{},[48,1766,1013],{},[48,1768,986],{},[425,1770,1771],{},[428,1772,1773],{},[431,1774,1775],{"scriptlevel":433,"displaystyle":60},[92,1776,94],{},[55,1778,446],{"fence":71},[48,1780,456],{"mathvariant":455},[105,1782,1783],{"encoding":107},"\\begin{bmatrix}u\\\\v\\\\1\\end{bmatrix}\n=\n\\begin{bmatrix}\nf_x & s & c_x\\\\\n0 & f_y & c_y\\\\\n0 & 0 & 1\n\\end{bmatrix}\n\\begin{bmatrix}x_n\\\\y_n\\\\1\\end{bmatrix}.",[26,1785,1787,1958],{"className":1786,"ariaHidden":71},[112],[26,1788,1790,1794,1949,1952,1955],{"className":1789},[116],[26,1791],{"className":1792,"style":1793},[120],"height:3.6em;vertical-align:-1.55em;",[26,1795,1797,1847,1911],{"className":1796},[528],[26,1798,1800],{"className":1799},[204],[26,1801,1804],{"className":1802},[537,1803],"mult",[26,1805,1807,1838],{"className":1806},[138,139],[26,1808,1810,1835],{"className":1809},[143],[26,1811,1814],{"className":1812,"style":1813},[147],"height:2.05em;",[26,1815,1817,1821],{"style":1816},"top:-4.05em;",[26,1818],{"className":1819,"style":1820},[155],"height:5.6em;",[26,1822,1824],{"style":1823},"width:0.667em;height:3.6em;",[1825,1826,1831],"svg",{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0.667em","3.6em","0 0 667 3600",[1832,1833],"path",{"d":1834},"M403 1759 V84 H666 V0 H319 V1759 v0 v1759 v84 h347 v-84\nH403z M403 1759 V0 H319 V1759 v0 v1759 v84 h84z",[26,1836,172],{"className":1837},[171],[26,1839,1841],{"className":1840},[143],[26,1842,1845],{"className":1843,"style":1844},[147],"height:1.55em;",[26,1846],{},[26,1848,1850],{"className":1849},[125],[26,1851,1853],{"className":1852},[419],[26,1854,1856],{"className":1855},[548],[26,1857,1859,1903],{"className":1858},[138,139],[26,1860,1862,1900],{"className":1861},[143],[26,1863,1865,1877,1888],{"className":1864,"style":1813},[147],[26,1866,1868,1871],{"style":1867},"top:-4.21em;",[26,1869],{"className":1870,"style":565},[155],[26,1872,1874],{"className":1873},[125],[26,1875,1630],{"className":1876},[125,129],[26,1878,1879,1882],{"style":561},[26,1880],{"className":1881,"style":565},[155],[26,1883,1885],{"className":1884},[125],[26,1886,1639],{"className":1887,"style":1264},[125,129],[26,1889,1891,1894],{"style":1890},"top:-1.81em;",[26,1892],{"className":1893,"style":565},[155],[26,1895,1897],{"className":1896},[125],[26,1898,94],{"className":1899},[125],[26,1901,172],{"className":1902},[171],[26,1904,1906],{"className":1905},[143],[26,1907,1909],{"className":1908,"style":1844},[147],[26,1910],{},[26,1912,1914],{"className":1913},[357],[26,1915,1917],{"className":1916},[537,1803],[26,1918,1920,1941],{"className":1919},[138,139],[26,1921,1923,1938],{"className":1922},[143],[26,1924,1926],{"className":1925,"style":1813},[147],[26,1927,1928,1931],{"style":1816},[26,1929],{"className":1930,"style":1820},[155],[26,1932,1933],{"style":1823},[1825,1934,1935],{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},[1832,1936],{"d":1937},"M347 1759 V0 H0 V84 H263 V1759 v0 v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v0 v1759 h84z",[26,1939,172],{"className":1940},[171],[26,1942,1944],{"className":1943},[143],[26,1945,1947],{"className":1946,"style":1844},[147],[26,1948],{},[26,1950],{"className":1951,"style":186},[185],[26,1953,57],{"className":1954},[190],[26,1956],{"className":1957,"style":186},[185],[26,1959,1961,1964,2378,2381,2594,2597],{"className":1960},[116],[26,1962],{"className":1963,"style":1793},[120],[26,1965,1967,2004,2341],{"className":1966},[528],[26,1968,1970],{"className":1969},[204],[26,1971,1973],{"className":1972},[537,1803],[26,1974,1976,1996],{"className":1975},[138,139],[26,1977,1979,1993],{"className":1978},[143],[26,1980,1982],{"className":1981,"style":1813},[147],[26,1983,1984,1987],{"style":1816},[26,1985],{"className":1986,"style":1820},[155],[26,1988,1989],{"style":1823},[1825,1990,1991],{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},[1832,1992],{"d":1834},[26,1994,172],{"className":1995},[171],[26,1997,1999],{"className":1998},[143],[26,2000,2002],{"className":2001,"style":1844},[147],[26,2003],{},[26,2005,2007],{"className":2006},[125],[26,2008,2010,2105,2108,2111,2205,2208,2211],{"className":2009},[419],[26,2011,2013],{"className":2012},[548],[26,2014,2016,2097],{"className":2015},[138,139],[26,2017,2019,2094],{"className":2018},[143],[26,2020,2022,2072,2083],{"className":2021,"style":1813},[147],[26,2023,2024,2027],{"style":1867},[26,2025],{"className":2026,"style":565},[155],[26,2028,2030],{"className":2029},[125],[26,2031,2033,2037],{"className":2032},[125],[26,2034,1669],{"className":2035,"style":2036},[125,129],"margin-right:0.1076em;",[26,2038,2040],{"className":2039},[134],[26,2041,2043,2064],{"className":2042},[138,139],[26,2044,2046,2061],{"className":2045},[143],[26,2047,2049],{"className":2048,"style":148},[147],[26,2050,2052,2055],{"style":2051},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[26,2053],{"className":2054,"style":156},[155],[26,2056,2058],{"className":2057},[160,161,162,163],[26,2059,983],{"className":2060},[125,129,163],[26,2062,172],{"className":2063},[171],[26,2065,2067],{"className":2066},[143],[26,2068,2070],{"className":2069,"style":179},[147],[26,2071],{},[26,2073,2074,2077],{"style":561},[26,2075],{"className":2076,"style":565},[155],[26,2078,2080],{"className":2079},[125],[26,2081,433],{"className":2082},[125],[26,2084,2085,2088],{"style":1890},[26,2086],{"className":2087,"style":565},[155],[26,2089,2091],{"className":2090},[125],[26,2092,433],{"className":2093},[125],[26,2095,172],{"className":2096},[171],[26,2098,2100],{"className":2099},[143],[26,2101,2103],{"className":2102,"style":1844},[147],[26,2104],{},[26,2106],{"className":2107,"style":589},[588],[26,2109],{"className":2110,"style":589},[588],[26,2112,2114],{"className":2113},[548],[26,2115,2117,2197],{"className":2116},[138,139],[26,2118,2120,2194],{"className":2119},[143],[26,2121,2123,2134,2183],{"className":2122,"style":1813},[147],[26,2124,2125,2128],{"style":1867},[26,2126],{"className":2127,"style":565},[155],[26,2129,2131],{"className":2130},[125],[26,2132,1678],{"className":2133},[125,129],[26,2135,2136,2139],{"style":561},[26,2137],{"className":2138,"style":565},[155],[26,2140,2142],{"className":2141},[125],[26,2143,2145,2148],{"className":2144},[125],[26,2146,1669],{"className":2147,"style":2036},[125,129],[26,2149,2151],{"className":2150},[134],[26,2152,2154,2174],{"className":2153},[138,139],[26,2155,2157,2171],{"className":2156},[143],[26,2158,2160],{"className":2159,"style":148},[147],[26,2161,2162,2165],{"style":2051},[26,2163],{"className":2164,"style":156},[155],[26,2166,2168],{"className":2167},[160,161,162,163],[26,2169,1013],{"className":2170,"style":1264},[125,129,163],[26,2172,172],{"className":2173},[171],[26,2175,2177],{"className":2176},[143],[26,2178,2181],{"className":2179,"style":2180},[147],"height:0.2861em;",[26,2182],{},[26,2184,2185,2188],{"style":1890},[26,2186],{"className":2187,"style":565},[155],[26,2189,2191],{"className":2190},[125],[26,2192,433],{"className":2193},[125],[26,2195,172],{"className":2196},[171],[26,2198,2200],{"className":2199},[143],[26,2201,2203],{"className":2202,"style":1844},[147],[26,2204],{},[26,2206],{"className":2207,"style":589},[588],[26,2209],{"className":2210,"style":589},[588],[26,2212,2214],{"className":2213},[548],[26,2215,2217,2333],{"className":2216},[138,139],[26,2218,2220,2330],{"className":2219},[143],[26,2221,2223,2271,2319],{"className":2222,"style":1813},[147],[26,2224,2225,2228],{"style":1867},[26,2226],{"className":2227,"style":565},[155],[26,2229,2231],{"className":2230},[125],[26,2232,2234,2237],{"className":2233},[125],[26,2235,410],{"className":2236},[125,129],[26,2238,2240],{"className":2239},[134],[26,2241,2243,2263],{"className":2242},[138,139],[26,2244,2246,2260],{"className":2245},[143],[26,2247,2249],{"className":2248,"style":148},[147],[26,2250,2251,2254],{"style":1067},[26,2252],{"className":2253,"style":156},[155],[26,2255,2257],{"className":2256},[160,161,162,163],[26,2258,983],{"className":2259},[125,129,163],[26,2261,172],{"className":2262},[171],[26,2264,2266],{"className":2265},[143],[26,2267,2269],{"className":2268,"style":179},[147],[26,2270],{},[26,2272,2273,2276],{"style":561},[26,2274],{"className":2275,"style":565},[155],[26,2277,2279],{"className":2278},[125],[26,2280,2282,2285],{"className":2281},[125],[26,2283,410],{"className":2284},[125,129],[26,2286,2288],{"className":2287},[134],[26,2289,2291,2311],{"className":2290},[138,139],[26,2292,2294,2308],{"className":2293},[143],[26,2295,2297],{"className":2296,"style":148},[147],[26,2298,2299,2302],{"style":1067},[26,2300],{"className":2301,"style":156},[155],[26,2303,2305],{"className":2304},[160,161,162,163],[26,2306,1013],{"className":2307,"style":1264},[125,129,163],[26,2309,172],{"className":2310},[171],[26,2312,2314],{"className":2313},[143],[26,2315,2317],{"className":2316,"style":2180},[147],[26,2318],{},[26,2320,2321,2324],{"style":1890},[26,2322],{"className":2323,"style":565},[155],[26,2325,2327],{"className":2326},[125],[26,2328,94],{"className":2329},[125],[26,2331,172],{"className":2332},[171],[26,2334,2336],{"className":2335},[143],[26,2337,2339],{"className":2338,"style":1844},[147],[26,2340],{},[26,2342,2344],{"className":2343},[357],[26,2345,2347],{"className":2346},[537,1803],[26,2348,2350,2370],{"className":2349},[138,139],[26,2351,2353,2367],{"className":2352},[143],[26,2354,2356],{"className":2355,"style":1813},[147],[26,2357,2358,2361],{"style":1816},[26,2359],{"className":2360,"style":1820},[155],[26,2362,2363],{"style":1823},[1825,2364,2365],{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},[1832,2366],{"d":1937},[26,2368,172],{"className":2369},[171],[26,2371,2373],{"className":2372},[143],[26,2374,2376],{"className":2375,"style":1844},[147],[26,2377],{},[26,2379],{"className":2380,"style":254},[185],[26,2382,2384,2421,2557],{"className":2383},[528],[26,2385,2387],{"className":2386},[204],[26,2388,2390],{"className":2389},[537,1803],[26,2391,2393,2413],{"className":2392},[138,139],[26,2394,2396,2410],{"className":2395},[143],[26,2397,2399],{"className":2398,"style":1813},[147],[26,2400,2401,2404],{"style":1816},[26,2402],{"className":2403,"style":1820},[155],[26,2405,2406],{"style":1823},[1825,2407,2408],{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},[1832,2409],{"d":1834},[26,2411,172],{"className":2412},[171],[26,2414,2416],{"className":2415},[143],[26,2417,2419],{"className":2418,"style":1844},[147],[26,2420],{},[26,2422,2424],{"className":2423},[125],[26,2425,2427],{"className":2426},[419],[26,2428,2430],{"className":2429},[548],[26,2431,2433,2549],{"className":2432},[138,139],[26,2434,2436,2546],{"className":2435},[143],[26,2437,2439,2487,2535],{"className":2438,"style":1813},[147],[26,2440,2441,2444],{"style":1867},[26,2442],{"className":2443,"style":565},[155],[26,2445,2447],{"className":2446},[125],[26,2448,2450,2453],{"className":2449},[125],[26,2451,983],{"className":2452},[125,129],[26,2454,2456],{"className":2455},[134],[26,2457,2459,2479],{"className":2458},[138,139],[26,2460,2462,2476],{"className":2461},[143],[26,2463,2465],{"className":2464,"style":148},[147],[26,2466,2467,2470],{"style":1067},[26,2468],{"className":2469,"style":156},[155],[26,2471,2473],{"className":2472},[160,161,162,163],[26,2474,986],{"className":2475},[125,129,163],[26,2477,172],{"className":2478},[171],[26,2480,2482],{"className":2481},[143],[26,2483,2485],{"className":2484,"style":179},[147],[26,2486],{},[26,2488,2489,2492],{"style":561},[26,2490],{"className":2491,"style":565},[155],[26,2493,2495],{"className":2494},[125],[26,2496,2498,2501],{"className":2497},[125],[26,2499,1013],{"className":2500,"style":1264},[125,129],[26,2502,2504],{"className":2503},[134],[26,2505,2507,2527],{"className":2506},[138,139],[26,2508,2510,2524],{"className":2509},[143],[26,2511,2513],{"className":2512,"style":148},[147],[26,2514,2515,2518],{"style":1279},[26,2516],{"className":2517,"style":156},[155],[26,2519,2521],{"className":2520},[160,161,162,163],[26,2522,986],{"className":2523},[125,129,163],[26,2525,172],{"className":2526},[171],[26,2528,2530],{"className":2529},[143],[26,2531,2533],{"className":2532,"style":179},[147],[26,2534],{},[26,2536,2537,2540],{"style":1890},[26,2538],{"className":2539,"style":565},[155],[26,2541,2543],{"className":2542},[125],[26,2544,94],{"className":2545},[125],[26,2547,172],{"className":2548},[171],[26,2550,2552],{"className":2551},[143],[26,2553,2555],{"className":2554,"style":1844},[147],[26,2556],{},[26,2558,2560],{"className":2559},[357],[26,2561,2563],{"className":2562},[537,1803],[26,2564,2566,2586],{"className":2565},[138,139],[26,2567,2569,2583],{"className":2568},[143],[26,2570,2572],{"className":2571,"style":1813},[147],[26,2573,2574,2577],{"style":1816},[26,2575],{"className":2576,"style":1820},[155],[26,2578,2579],{"style":1823},[1825,2580,2581],{"xmlns":1827,"width":1828,"height":1829,"viewBox":1830},[1832,2582],{"d":1937},[26,2584,172],{"className":2585},[171],[26,2587,2589],{"className":2588},[143],[26,2590,2592],{"className":2591,"style":1844},[147],[26,2593],{},[26,2595],{"className":2596,"style":254},[185],[26,2598,456],{"className":2599},[125],[14,2601,2602,2603,2674,2675,2746,2747,2882,2883,2912],{},"The focal lengths ",[26,2604,2606,2624],{"className":2605},[29],[26,2607,2609],{"className":2608},[33],[35,2610,2611],{"xmlns":37},[39,2612,2613,2621],{},[42,2614,2615],{},[45,2616,2617,2619],{},[48,2618,1669],{},[48,2620,983],{},[105,2622,2623],{"encoding":107},"f_x",[26,2625,2627],{"className":2626,"ariaHidden":71},[112],[26,2628,2630,2634],{"className":2629},[116],[26,2631],{"className":2632,"style":2633},[120],"height:0.8889em;vertical-align:-0.1944em;",[26,2635,2637,2640],{"className":2636},[125],[26,2638,1669],{"className":2639,"style":2036},[125,129],[26,2641,2643],{"className":2642},[134],[26,2644,2646,2666],{"className":2645},[138,139],[26,2647,2649,2663],{"className":2648},[143],[26,2650,2652],{"className":2651,"style":148},[147],[26,2653,2654,2657],{"style":2051},[26,2655],{"className":2656,"style":156},[155],[26,2658,2660],{"className":2659},[160,161,162,163],[26,2661,983],{"className":2662},[125,129,163],[26,2664,172],{"className":2665},[171],[26,2667,2669],{"className":2668},[143],[26,2670,2672],{"className":2671,"style":179},[147],[26,2673],{}," and ",[26,2676,2678,2696],{"className":2677},[29],[26,2679,2681],{"className":2680},[33],[35,2682,2683],{"xmlns":37},[39,2684,2685,2693],{},[42,2686,2687],{},[45,2688,2689,2691],{},[48,2690,1669],{},[48,2692,1013],{},[105,2694,2695],{"encoding":107},"f_y",[26,2697,2699],{"className":2698,"ariaHidden":71},[112],[26,2700,2702,2706],{"className":2701},[116],[26,2703],{"className":2704,"style":2705},[120],"height:0.9805em;vertical-align:-0.2861em;",[26,2707,2709,2712],{"className":2708},[125],[26,2710,1669],{"className":2711,"style":2036},[125,129],[26,2713,2715],{"className":2714},[134],[26,2716,2718,2738],{"className":2717},[138,139],[26,2719,2721,2735],{"className":2720},[143],[26,2722,2724],{"className":2723,"style":148},[147],[26,2725,2726,2729],{"style":2051},[26,2727],{"className":2728,"style":156},[155],[26,2730,2732],{"className":2731},[160,161,162,163],[26,2733,1013],{"className":2734,"style":1264},[125,129,163],[26,2736,172],{"className":2737},[171],[26,2739,2741],{"className":2740},[143],[26,2742,2744],{"className":2743,"style":2180},[147],[26,2745],{}," are measured in pixels. The principal point ",[26,2748,2750,2780],{"className":2749},[29],[26,2751,2753],{"className":2752},[33],[35,2754,2755],{"xmlns":37},[39,2756,2757,2777],{},[42,2758,2759,2761,2767,2769,2775],{},[55,2760,61],{"stretchy":60},[45,2762,2763,2765],{},[48,2764,410],{},[48,2766,983],{},[55,2768,72],{"separator":71},[45,2770,2771,2773],{},[48,2772,410],{},[48,2774,1013],{},[55,2776,100],{"stretchy":60},[105,2778,2779],{"encoding":107},"(c_x, c_y)",[26,2781,2783],{"className":2782,"ariaHidden":71},[112],[26,2784,2786,2790,2793,2833,2836,2839,2879],{"className":2785},[116],[26,2787],{"className":2788,"style":2789},[120],"height:1.0361em;vertical-align:-0.2861em;",[26,2791,61],{"className":2792},[204],[26,2794,2796,2799],{"className":2795},[125],[26,2797,410],{"className":2798},[125,129],[26,2800,2802],{"className":2801},[134],[26,2803,2805,2825],{"className":2804},[138,139],[26,2806,2808,2822],{"className":2807},[143],[26,2809,2811],{"className":2810,"style":148},[147],[26,2812,2813,2816],{"style":1067},[26,2814],{"className":2815,"style":156},[155],[26,2817,2819],{"className":2818},[160,161,162,163],[26,2820,983],{"className":2821},[125,129,163],[26,2823,172],{"className":2824},[171],[26,2826,2828],{"className":2827},[143],[26,2829,2831],{"className":2830,"style":179},[147],[26,2832],{},[26,2834,72],{"className":2835},[250],[26,2837],{"className":2838,"style":254},[185],[26,2840,2842,2845],{"className":2841},[125],[26,2843,410],{"className":2844},[125,129],[26,2846,2848],{"className":2847},[134],[26,2849,2851,2871],{"className":2850},[138,139],[26,2852,2854,2868],{"className":2853},[143],[26,2855,2857],{"className":2856,"style":148},[147],[26,2858,2859,2862],{"style":1067},[26,2860],{"className":2861,"style":156},[155],[26,2863,2865],{"className":2864},[160,161,162,163],[26,2866,1013],{"className":2867,"style":1264},[125,129,163],[26,2869,172],{"className":2870},[171],[26,2872,2874],{"className":2873},[143],[26,2875,2877],{"className":2876,"style":2180},[147],[26,2878],{},[26,2880,100],{"className":2881},[357]," describes where the optical axis meets the sensor. The skew ",[26,2884,2886,2899],{"className":2885},[29],[26,2887,2889],{"className":2888},[33],[35,2890,2891],{"xmlns":37},[39,2892,2893,2897],{},[42,2894,2895],{},[48,2896,1678],{},[105,2898,1678],{"encoding":107},[26,2900,2902],{"className":2901,"ariaHidden":71},[112],[26,2903,2905,2909],{"className":2904},[116],[26,2906],{"className":2907,"style":2908},[120],"height:0.4306em;",[26,2910,1678],{"className":2911},[125,129]," is usually set to zero for modern sensors, but removing it is an assumption rather than an algebraic fact.",[18,2914,2916],{"id":2915},"an-implementation-that-preserves-the-stages","An implementation that preserves the stages",[14,2918,2919],{},"Compact matrix multiplication is convenient in production. During development, keeping the stages visible makes frame mistakes easier to find.",[2921,2922,2927],"pre",{"className":2923,"code":2924,"language":2925,"meta":2926,"style":2926},"language-python shiki shiki-themes github-light github-dark","import numpy as np\n\ndef project(point_world, rotation, translation, intrinsics):\n    point_camera = rotation @ point_world + translation\n    if point_camera[2] \u003C= 0:\n        raise ValueError(\"point lies on or behind the camera plane\")\n\n    normalized = point_camera[:2] \u002F point_camera[2]\n    homogeneous = np.array([normalized[0], normalized[1], 1.0])\n    pixel = intrinsics @ homogeneous\n    return pixel[:2]\n","python","",[2928,2929,2930,2937,2944,2950,2956,2962,2968,2973,2979,2985,2991],"code",{"__ignoreMap":2926},[26,2931,2934],{"class":2932,"line":2933},"line",1,[26,2935,2936],{},"import numpy as np\n",[26,2938,2940],{"class":2932,"line":2939},2,[26,2941,2943],{"emptyLinePlaceholder":2942},true,"\n",[26,2945,2947],{"class":2932,"line":2946},3,[26,2948,2949],{},"def project(point_world, rotation, translation, intrinsics):\n",[26,2951,2953],{"class":2932,"line":2952},4,[26,2954,2955],{},"    point_camera = rotation @ point_world + translation\n",[26,2957,2959],{"class":2932,"line":2958},5,[26,2960,2961],{},"    if point_camera[2] \u003C= 0:\n",[26,2963,2965],{"class":2932,"line":2964},6,[26,2966,2967],{},"        raise ValueError(\"point lies on or behind the camera plane\")\n",[26,2969,2971],{"class":2932,"line":2970},7,[26,2972,2943],{"emptyLinePlaceholder":2942},[26,2974,2976],{"class":2932,"line":2975},8,[26,2977,2978],{},"    normalized = point_camera[:2] \u002F point_camera[2]\n",[26,2980,2982],{"class":2932,"line":2981},9,[26,2983,2984],{},"    homogeneous = np.array([normalized[0], normalized[1], 1.0])\n",[26,2986,2988],{"class":2932,"line":2987},10,[26,2989,2990],{},"    pixel = intrinsics @ homogeneous\n",[26,2992,2994],{"class":2932,"line":2993},11,[26,2995,2996],{},"    return pixel[:2]\n",[14,2998,2999],{},"The explicit depth check matters. Algebra alone will happily project a point behind the camera into a plausible pixel coordinate.",[18,3001,3003],{"id":3002},"what-the-matrix-leaves-out","What the matrix leaves out",[14,3005,3006],{},"Real cameras depart from this model. Radial and tangential lens distortion alter the mapping, rolling shutters expose rows at different times, and calibration parameters drift with focus and temperature. The pinhole camera is still the correct starting point because it separates projective geometry from those corrections.",[14,3008,3009],{},"The next step is not a larger matrix. It is a clear residual model: measure how observed pixels depart from the ideal projection, then decide which physical effects are worth estimating.",[18,3011,3013],{"id":3012},"further-reading","Further reading",[3015,3016,3017,3025,3031],"ul",{},[3018,3019,3020,3021,456],"li",{},"Richard Hartley and Andrew Zisserman, ",[3022,3023,3024],"em",{},"Multiple View Geometry in Computer Vision",[3018,3026,3027,3028,456],{},"Richard Szeliski, ",[3022,3029,3030],{},"Computer Vision: Algorithms and Applications",[3018,3032,3033],{},"The related notebook entry records a coordinate-normalization error that initially looked like poor calibration.",[3035,3036,3037],"style",{},"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);}",{"title":2926,"searchDepth":2946,"depth":2946,"links":3039},[3040,3041,3042,3043,3044],{"id":20,"depth":2939,"text":21},{"id":1595,"depth":2939,"text":1596},{"id":2915,"depth":2939,"text":2916},{"id":3002,"depth":2939,"text":3003},{"id":3012,"depth":2939,"text":3013},"https:\u002F\u002Fjournal.aruodore.com\u002Fblog\u002Fgeometry-of-image-formation",null,"md","exposition",[2925],[3051,3052,3053],"Move cleanly between world, camera, normalized image, and pixel coordinates.","Identify which calibration assumptions are encoded in the intrinsic matrix.","Recognize the numerical failure modes hidden by compact projection notation.",[3055],"The pinhole model does not describe lens distortion or rolling shutter.",{},"2026-08-04","\u002Fblog\u002Fgeometry-of-image-formation",[3060],"vision-geometry",[3062],{"type":3063,"target":3064},"develops","notebook:2026:normalizing-camera-coordinates",{"title":6,"description":16},"geometry-of-image-formation","blog\u002Fgeometry-of-image-formation","A practical derivation of the pinhole camera model, its coordinate systems, and the assumptions hidden inside a projection matrix.",[3070,3071],"camera-models","projection",[3073],"opencv",[3075,3076],"computer-vision","geometry","1.0.0","0hdpn3sCElEQouNtGightW4-Y2dI23RYj954bwdsh70",{"id":3080,"title":3081,"algorithms":3082,"author":9,"body":3083,"canonical_url":3272,"cover_alt":3046,"cover_image":3046,"demo_url":3046,"description":3087,"extension":3047,"featured":2942,"kind":3273,"languages":3274,"learning_objectives":3275,"limitations":3279,"meta":3281,"modified":3282,"navigation":2942,"path":3283,"projects":3284,"published":3286,"relations":3287,"seo":3290,"slug":3291,"source_url":3046,"stem":3292,"summary":3293,"tags":3294,"technologies":3298,"topics":3301,"version":3304,"__hash__":3305},"blog\u002Fblog\u002Freproducible-gpu-benchmarks.md","A benchmark is an experimental record",[],{"type":11,"value":3084,"toc":3265},[3085,3088,3092,3095,3098,3102,3105,3169,3172,3176,3179,3246,3250,3253,3256,3260,3263],[14,3086,3087],{},"A benchmark result is not a number. It is a number attached to an environment, a protocol, raw observations, and a question. Remove any one of those and the result becomes difficult to interpret. Remove several and it becomes decoration.",[18,3089,3091],{"id":3090},"begin-with-the-decision","Begin with the decision",[14,3093,3094],{},"“Which implementation is faster?” is incomplete. A useful benchmark names the workload and the decision it supports. Latency for batch size one, throughput under saturation, memory pressure during training, and energy per inference are different experiments.",[14,3096,3097],{},"The metric follows the decision. It should not be chosen because it produces the largest ratio.",[18,3099,3101],{"id":3100},"synchronization-changes-the-measurement","Synchronization changes the measurement",[14,3103,3104],{},"CUDA kernels are dispatched asynchronously. Timing only the Python call often measures queue submission rather than device execution.",[2921,3106,3108],{"className":2923,"code":3107,"language":2925,"meta":2926,"style":2926},"import time\nimport torch\n\ndef timed_run(operation, samples=30):\n    observations = []\n    for _ in range(samples):\n        torch.cuda.synchronize()\n        started = time.perf_counter_ns()\n        operation()\n        torch.cuda.synchronize()\n        observations.append(time.perf_counter_ns() - started)\n    return observations\n",[2928,3109,3110,3115,3120,3124,3129,3134,3139,3144,3149,3154,3158,3163],{"__ignoreMap":2926},[26,3111,3112],{"class":2932,"line":2933},[26,3113,3114],{},"import time\n",[26,3116,3117],{"class":2932,"line":2939},[26,3118,3119],{},"import torch\n",[26,3121,3122],{"class":2932,"line":2946},[26,3123,2943],{"emptyLinePlaceholder":2942},[26,3125,3126],{"class":2932,"line":2952},[26,3127,3128],{},"def timed_run(operation, samples=30):\n",[26,3130,3131],{"class":2932,"line":2958},[26,3132,3133],{},"    observations = []\n",[26,3135,3136],{"class":2932,"line":2964},[26,3137,3138],{},"    for _ in range(samples):\n",[26,3140,3141],{"class":2932,"line":2970},[26,3142,3143],{},"        torch.cuda.synchronize()\n",[26,3145,3146],{"class":2932,"line":2975},[26,3147,3148],{},"        started = time.perf_counter_ns()\n",[26,3150,3151],{"class":2932,"line":2981},[26,3152,3153],{},"        operation()\n",[26,3155,3156],{"class":2932,"line":2987},[26,3157,3143],{},[26,3159,3160],{"class":2932,"line":2993},[26,3161,3162],{},"        observations.append(time.perf_counter_ns() - started)\n",[26,3164,3166],{"class":2932,"line":3165},12,[26,3167,3168],{},"    return observations\n",[14,3170,3171],{},"Synchronization is not free, so the measured region must be documented. Device events are preferable when the question is strictly kernel execution. End-to-end wall time is preferable when host overhead is part of the user experience.",[18,3173,3175],{"id":3174},"keep-the-distribution","Keep the distribution",[14,3177,3178],{},"Thirty observations contain information that their mean discards. Report the median, an interval, and the raw values. A violin or empirical cumulative distribution can reveal multimodality caused by thermal behavior, compilation, or background work.",[3180,3181,3182,3198],"table",{},[3183,3184,3185],"thead",{},[3186,3187,3188,3192,3195],"tr",{},[3189,3190,3191],"th",{},"Field",[3189,3193,3194],{},"Example value",[3189,3196,3197],{},"Why it matters",[3199,3200,3201,3213,3224,3235],"tbody",{},[3186,3202,3203,3207,3210],{},[3204,3205,3206],"td",{},"Warmups",[3204,3208,3209],{},"10",[3204,3211,3212],{},"Excludes compilation and initial allocation",[3186,3214,3215,3218,3221],{},[3204,3216,3217],{},"Samples",[3204,3219,3220],{},"30",[3204,3222,3223],{},"Exposes run-to-run variation",[3186,3225,3226,3229,3232],{},[3204,3227,3228],{},"Statistic",[3204,3230,3231],{},"Median",[3204,3233,3234],{},"Resists a small number of long stalls",[3186,3236,3237,3240,3243],{},[3204,3238,3239],{},"Interval",[3204,3241,3242],{},"Bootstrap 95%",[3204,3244,3245],{},"Communicates estimation uncertainty",[18,3247,3249],{"id":3248},"preserve-the-environment","Preserve the environment",[14,3251,3252],{},"Record the device model, driver, runtime, dependency lock hash, operating system, power policy, precision, shapes, dataset version, and full command. Reference source by immutable commit. Raw result files should use a run identifier and checksum.",[14,3254,3255],{},"A future result should be compared automatically only when the methodology declares the runs compatible. Otherwise, show both records and explain the environmental differences.",[18,3257,3259],{"id":3258},"the-honest-conclusion","The honest conclusion",[14,3261,3262],{},"Benchmarks are valuable when they narrow a decision. “Implementation A was faster under this protocol” is stronger than an unsupported universal claim. The caveat does not weaken the work. It tells the reader where the evidence applies.",[3035,3264,3037],{},{"title":2926,"searchDepth":2946,"depth":2946,"links":3266},[3267,3268,3269,3270,3271],{"id":3090,"depth":2939,"text":3091},{"id":3100,"depth":2939,"text":3101},{"id":3174,"depth":2939,"text":3175},{"id":3248,"depth":2939,"text":3249},{"id":3258,"depth":2939,"text":3259},"https:\u002F\u002Fjournal.aruodore.com\u002Fblog\u002Freproducible-gpu-benchmarks","benchmark",[2925],[3276,3277,3278],"Separate device execution time from asynchronous host dispatch.","Report distributions and uncertainty rather than one attractive number.","Package enough environment data for a later comparison.",[3280],"The examples focus on a single-device inference workload.",{},"2026-08-01","\u002Fblog\u002Freproducible-gpu-benchmarks",[3285],"benchmark-protocol","2026-07-21",[3288],{"type":3063,"target":3289},"notebook:2026:gpu-synchronization-changed-the-result",{"title":3081,"description":3087},"reproducible-gpu-benchmarks","blog\u002Freproducible-gpu-benchmarks","GPU timing numbers become useful only when hardware, synchronization, sampling, and raw observations remain attached to the result.",[3295,3296,3297],"gpu","reproducibility","performance",[3299,3300],"pytorch","cuda",[3302,3303],"scientific-computing","ai-engineering","1.1.0","GRfaGNg-Ub0yV-3qI3Q4zuB-BhqGmACoDIqe9nqJToo",[3307,3381,3443,3491],{"id":3308,"title":3309,"algorithms":3310,"author":9,"body":3311,"canonical_url":3360,"description":2926,"experiment_id":3361,"extension":3047,"kind":3362,"languages":3363,"maturity":3364,"meta":3365,"modified":3366,"navigation":2942,"path":3367,"projects":3368,"published":3366,"relations":3369,"repository_commit":3046,"seo":3372,"slug":3373,"stem":3374,"summary":3375,"tags":3376,"technologies":3378,"topics":3379,"__hash__":3380},"notebook\u002Fnotebook\u002Fnormalizing-camera-coordinates.md","Normalize camera coordinates before blaming calibration",[8],{"type":11,"value":3312,"toc":3353},[3313,3317,3320,3324,3327,3331,3334,3338,3346,3350],[18,3314,3316],{"id":3315},"context","Context",[14,3318,3319],{},"Reprojection error increased toward the edge of the frame. The initial hypothesis was that the intrinsic calibration had drifted.",[18,3321,3323],{"id":3322},"observation","Observation",[14,3325,3326],{},"The predicted points were normalized pinhole coordinates. The observed points were distorted pixels. Their difference had no coherent geometric meaning.",[18,3328,3330],{"id":3329},"experiment","Experiment",[14,3332,3333],{},"Undistorting the observations and converting both arrays into normalized camera coordinates removed the radial error pattern. The remaining residual was small and spatially unstructured.",[18,3335,3337],{"id":3336},"questions","Questions",[3015,3339,3340,3343],{},[3018,3341,3342],{},"Should the residual interface encode its coordinate frame in the type name?",[3018,3344,3345],{},"Is pixel-space reporting still useful after the optimization finishes?",[18,3347,3349],{"id":3348},"next-steps","Next steps",[14,3351,3352],{},"Add coordinate-frame assertions at the projection boundary and plot both normalized and pixel residuals in the calibration report.",{"title":2926,"searchDepth":2946,"depth":2946,"links":3354},[3355,3356,3357,3358,3359],{"id":3315,"depth":2939,"text":3316},{"id":3322,"depth":2939,"text":3323},{"id":3329,"depth":2939,"text":3330},{"id":3336,"depth":2939,"text":3337},{"id":3348,"depth":2939,"text":3349},"https:\u002F\u002Fjournal.aruodore.com\u002Fnotebook\u002Fnormalizing-camera-coordinates","exp-2026-08-02-camera-01","bug",[2925],"verified",{},"2026-08-02","\u002Fnotebook\u002Fnormalizing-camera-coordinates",[3060],[3370],{"type":3063,"target":3371},"blog:2026:geometry-of-image-formation",{"title":3309,"description":2926},"normalizing-camera-coordinates","notebook\u002Fnormalizing-camera-coordinates","A pixel-space residual looked like calibration drift, but the comparison mixed normalized and distorted coordinates.",[3070,3377],"debugging",[3073],[3075,3076],"s--hFbit922dJHtD3TC6o1R6XcWzuHVLzXJzNw7-a8U",{"id":3382,"title":3383,"algorithms":3384,"author":9,"body":3385,"canonical_url":3422,"description":2926,"experiment_id":3423,"extension":3047,"kind":3424,"languages":3425,"maturity":3364,"meta":3426,"modified":3427,"navigation":2942,"path":3428,"projects":3429,"published":3430,"relations":3431,"repository_commit":3046,"seo":3434,"slug":3435,"stem":3436,"summary":3437,"tags":3438,"technologies":3440,"topics":3441,"__hash__":3442},"notebook\u002Fnotebook\u002Fgpu-synchronization-changed-the-result.md","GPU synchronization changed the ranking",[],{"type":11,"value":3386,"toc":3416},[3387,3389,3396,3398,3401,3403,3411,3413],[18,3388,3316],{"id":3315},[14,3390,3391,3392,3395],{},"Two inference paths were timed with ",[2928,3393,3394],{},"perf_counter_ns",". The supposedly faster path launched more asynchronous work.",[18,3397,3323],{"id":3322},[14,3399,3400],{},"Without device synchronization, the benchmark mostly measured host dispatch. Synchronizing before and after each measured region reversed the ranking.",[18,3402,3337],{"id":3336},[3015,3404,3405,3408],{},[3018,3406,3407],{},"Should end-to-end latency and device-only latency appear as separate metrics?",[3018,3409,3410],{},"Which synchronization overhead belongs to the real request path?",[18,3412,3349],{"id":3348},[14,3414,3415],{},"Repeat with device events, preserve all samples, and document the measured boundary in the result manifest.",{"title":2926,"searchDepth":2946,"depth":2946,"links":3417},[3418,3419,3420,3421],{"id":3315,"depth":2939,"text":3316},{"id":3322,"depth":2939,"text":3323},{"id":3336,"depth":2939,"text":3337},{"id":3348,"depth":2939,"text":3349},"https:\u002F\u002Fjournal.aruodore.com\u002Fnotebook\u002Fgpu-synchronization-changed-the-result","exp-2026-07-18-gpu-03","benchmark-observation",[2925],{},"2026-07-19","\u002Fnotebook\u002Fgpu-synchronization-changed-the-result",[3285],"2026-07-18",[3432],{"type":3063,"target":3433},"blog:2026:reproducible-gpu-benchmarks",{"title":3383,"description":2926},"gpu-synchronization-changed-the-result","notebook\u002Fgpu-synchronization-changed-the-result","Adding synchronization reversed an apparent latency advantage between two inference paths.",[3295,3439],"benchmarking",[3299,3300],[3302,3303],"R4a44xKfaWSpy6uDVV6utN2f2ApuET3LQ6GTDvFj2Jo",{"id":3444,"title":3445,"algorithms":3446,"author":9,"body":3448,"canonical_url":3470,"description":2926,"experiment_id":3471,"extension":3047,"kind":3472,"languages":3473,"maturity":3364,"meta":3474,"modified":3475,"navigation":2942,"path":3476,"projects":3477,"published":3475,"relations":3479,"repository_commit":3046,"seo":3480,"slug":3481,"stem":3482,"summary":3483,"tags":3484,"technologies":3487,"topics":3488,"__hash__":3490},"notebook\u002Fnotebook\u002Ffailed-half-precision-solver.md","Half precision made the solver look converged",[3447],"conjugate-gradient",{"type":11,"value":3449,"toc":3465},[3450,3452,3455,3457,3460,3462],[18,3451,3316],{"id":3315},[14,3453,3454],{},"The goal was to reduce memory traffic in a batched conjugate-gradient solve by storing state in half precision.",[18,3456,3323],{"id":3322},[14,3458,3459],{},"The reported residual stopped changing, but a double-precision recomputation showed that the solution was not converged. The half-precision update direction had fallen below the representable scale of the accumulated state.",[18,3461,3349],{"id":3348},[14,3463,3464],{},"Keep matrix products in reduced precision while accumulating the solution and residual norm in single precision. Treat a flat reported residual as a numerical warning rather than automatic convergence.",{"title":2926,"searchDepth":2946,"depth":2946,"links":3466},[3467,3468,3469],{"id":3315,"depth":2939,"text":3316},{"id":3322,"depth":2939,"text":3323},{"id":3348,"depth":2939,"text":3349},"https:\u002F\u002Fjournal.aruodore.com\u002Fnotebook\u002Ffailed-half-precision-solver","exp-2026-06-29-cg-02","failed-experiment",[2925],{},"2026-06-29","\u002Fnotebook\u002Ffailed-half-precision-solver",[3478],"iterative-solvers",[],{"title":3445,"description":2926},"failed-half-precision-solver","notebook\u002Ffailed-half-precision-solver","A residual plateau was mistaken for convergence after reduced precision erased the update direction.",[3485,3486],"floating-point","convergence",[3299],[3489,3302],"numerical-methods","RxKmVew6NSk0u51AXExA2ETdZpNWn2sNwjCRWAygnnI",{"id":3492,"title":3493,"algorithms":3494,"author":9,"body":3495,"canonical_url":3525,"description":2926,"experiment_id":3046,"extension":3047,"kind":3526,"languages":3527,"maturity":3528,"meta":3529,"modified":3530,"navigation":2942,"path":3531,"projects":3532,"published":3530,"relations":3533,"repository_commit":3046,"seo":3534,"slug":3535,"stem":3536,"summary":3537,"tags":3538,"technologies":3541,"topics":3542,"__hash__":3544},"notebook\u002Fnotebook\u002Freading-a-paper-backwards.md","Reading a method paper backwards",[],{"type":11,"value":3496,"toc":3520},[3497,3499,3502,3504,3507,3510,3512],[18,3498,3316],{"id":3315},[14,3500,3501],{},"Abstract-first reading made it too easy to adopt the paper's framing before understanding its evidence.",[18,3503,3323],{"id":3322},[14,3505,3506],{},"Reading the limitations, evaluation protocol, tables, and ablations first gives a more concrete question: what changed, under which conditions, and compared with what?",[14,3508,3509],{},"The introduction becomes more useful afterward because its claims can be checked against the experiment that actually ran.",[18,3511,3337],{"id":3336},[3015,3513,3514,3517],{},[3018,3515,3516],{},"Does this order still work for theory papers where the proof is the primary evidence?",[3018,3518,3519],{},"What minimum extraction template would make paper summaries comparable?",{"title":2926,"searchDepth":2946,"depth":2946,"links":3521},[3522,3523,3524],{"id":3315,"depth":2939,"text":3316},{"id":3322,"depth":2939,"text":3323},{"id":3336,"depth":2939,"text":3337},"https:\u002F\u002Fjournal.aruodore.com\u002Fnotebook\u002Freading-a-paper-backwards","research-note",[],"working",{},"2026-06-11","\u002Fnotebook\u002Freading-a-paper-backwards",[],[],{"title":3493,"description":2926},"reading-a-paper-backwards","notebook\u002Freading-a-paper-backwards","Starting with evaluation details and failure cases can expose a paper's actual contribution faster than reading from the abstract forward.",[3539,3540],"papers","evaluation",[],[3543,3303],"research-practice","BuwExy76nBkCkWQNqzUWNRloSmBCBLLuC730lkfSG8Y",1785815463673]