[{"data":1,"prerenderedAt":3078},["ShallowReactive",2],{"blog-geometry-of-image-formation":3},{"id":4,"title":5,"algorithms":6,"author":8,"body":9,"canonical_url":3044,"cover_alt":3045,"cover_image":3045,"demo_url":3045,"description":15,"extension":3046,"featured":2941,"kind":3047,"languages":3048,"learning_objectives":3049,"limitations":3053,"meta":3055,"modified":3056,"navigation":2941,"path":3057,"projects":3058,"published":3056,"relations":3060,"seo":3064,"slug":3065,"source_url":3045,"stem":3066,"summary":3067,"tags":3068,"technologies":3071,"topics":3073,"version":3076,"__hash__":3077},"blog\u002Fblog\u002Fgeometry-of-image-formation.md","The geometry of image formation",[7],"perspective-projection","Lucas Aruodore Adomi",{"type":10,"value":11,"toc":3037},"minimark",[12,16,21,386,678,963,1453,1592,1596,1599,2599,2912,2916,2919,2996,2999,3003,3006,3009,3013,3033],[13,14,15],"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.",[17,18,20],"h2",{"id":19},"four-coordinate-systems-one-observation","Four coordinate systems, one observation",[13,22,23,24,385],{},"Let a world point be ",[25,26,29,108],"span",{"className":27},[28],"katex",[25,30,33],{"className":31},[32],"katex-mathml",[34,35,37],"math",{"xmlns":36},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[38,39,40,103],"semantics",{},[41,42,43,53,57,61,68,72,79,81,88,90,94],"mrow",{},[44,45,46,50],"msub",{},[47,48,49],"mi",{},"P",[47,51,52],{},"w",[54,55,56],"mo",{},"=",[54,58,60],{"stretchy":59},"false","(",[44,62,63,66],{},[47,64,65],{},"X",[47,67,52],{},[54,69,71],{"separator":70},"true",",",[44,73,74,77],{},[47,75,76],{},"Y",[47,78,52],{},[54,80,71],{"separator":70},[44,82,83,86],{},[47,84,85],{},"Z",[47,87,52],{},[54,89,71],{"separator":70},[91,92,93],"mn",{},"1",[95,96,97,100],"msup",{},[54,98,99],{"stretchy":59},")",[47,101,102],{},"T",[104,105,107],"annotation",{"encoding":106},"application\u002Fx-tex","P_w = (X_w, Y_w, Z_w, 1)^T",[25,109,112,193],{"className":110,"ariaHidden":70},[111],"katex-html",[25,113,116,121,181,186,190],{"className":114},[115],"base",[25,117],{"className":118,"style":120},[119],"strut","height:0.8333em;vertical-align:-0.15em;",[25,122,125,130],{"className":123},[124],"mord",[25,126,49],{"className":127,"style":129},[124,128],"mathnormal","margin-right:0.1389em;",[25,131,134],{"className":132},[133],"msupsub",[25,135,139,172],{"className":136},[137,138],"vlist-t","vlist-t2",[25,140,143,167],{"className":141},[142],"vlist-r",[25,144,148],{"className":145,"style":147},[146],"vlist","height:0.1514em;",[25,149,151,156],{"style":150},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[25,152],{"className":153,"style":155},[154],"pstrut","height:2.7em;",[25,157,163],{"className":158},[159,160,161,162],"sizing","reset-size6","size3","mtight",[25,164,52],{"className":165,"style":166},[124,128,162],"margin-right:0.0269em;",[25,168,171],{"className":169},[170],"vlist-s","​",[25,173,175],{"className":174},[142],[25,176,179],{"className":177,"style":178},[146],"height:0.15em;",[25,180],{},[25,182],{"className":183,"style":185},[184],"mspace","margin-right:0.2778em;",[25,187,56],{"className":188},[189],"mrel",[25,191],{"className":192,"style":185},[184],[25,194,196,200,204,246,250,254,296,299,302,344,347,350,353],{"className":195},[115],[25,197],{"className":198,"style":199},[119],"height:1.0913em;vertical-align:-0.25em;",[25,201,60],{"className":202},[203],"mopen",[25,205,207,211],{"className":206},[124],[25,208,65],{"className":209,"style":210},[124,128],"margin-right:0.0785em;",[25,212,214],{"className":213},[133],[25,215,217,238],{"className":216},[137,138],[25,218,220,235],{"className":219},[142],[25,221,223],{"className":222,"style":147},[146],[25,224,226,229],{"style":225},"top:-2.55em;margin-left:-0.0785em;margin-right:0.05em;",[25,227],{"className":228,"style":155},[154],[25,230,232],{"className":231},[159,160,161,162],[25,233,52],{"className":234,"style":166},[124,128,162],[25,236,171],{"className":237},[170],[25,239,241],{"className":240},[142],[25,242,244],{"className":243,"style":178},[146],[25,245],{},[25,247,71],{"className":248},[249],"mpunct",[25,251],{"className":252,"style":253},[184],"margin-right:0.1667em;",[25,255,257,261],{"className":256},[124],[25,258,76],{"className":259,"style":260},[124,128],"margin-right:0.2222em;",[25,262,264],{"className":263},[133],[25,265,267,288],{"className":266},[137,138],[25,268,270,285],{"className":269},[142],[25,271,273],{"className":272,"style":147},[146],[25,274,276,279],{"style":275},"top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;",[25,277],{"className":278,"style":155},[154],[25,280,282],{"className":281},[159,160,161,162],[25,283,52],{"className":284,"style":166},[124,128,162],[25,286,171],{"className":287},[170],[25,289,291],{"className":290},[142],[25,292,294],{"className":293,"style":178},[146],[25,295],{},[25,297,71],{"className":298},[249],[25,300],{"className":301,"style":253},[184],[25,303,305,309],{"className":304},[124],[25,306,85],{"className":307,"style":308},[124,128],"margin-right:0.0715em;",[25,310,312],{"className":311},[133],[25,313,315,336],{"className":314},[137,138],[25,316,318,333],{"className":317},[142],[25,319,321],{"className":320,"style":147},[146],[25,322,324,327],{"style":323},"top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;",[25,325],{"className":326,"style":155},[154],[25,328,330],{"className":329},[159,160,161,162],[25,331,52],{"className":332,"style":166},[124,128,162],[25,334,171],{"className":335},[170],[25,337,339],{"className":338},[142],[25,340,342],{"className":341,"style":178},[146],[25,343],{},[25,345,71],{"className":346},[249],[25,348],{"className":349,"style":253},[184],[25,351,93],{"className":352},[124],[25,354,357,360],{"className":355},[356],"mclose",[25,358,99],{"className":359},[356],[25,361,363],{"className":362},[133],[25,364,366],{"className":365},[137],[25,367,369],{"className":368},[142],[25,370,373],{"className":371,"style":372},[146],"height:0.8413em;",[25,374,376,379],{"style":375},"top:-3.063em;margin-right:0.05em;",[25,377],{"className":378,"style":155},[154],[25,380,382],{"className":381},[159,160,161,162],[25,383,102],{"className":384,"style":129},[124,128,162],". A rigid transform places it in camera coordinates:",[25,387,390],{"className":388},[389],"katex-display",[25,391,393,459],{"className":392},[28],[25,394,396],{"className":395},[32],[34,397,399],{"xmlns":36,"display":398},"block",[38,400,401,456],{},[41,402,403,410,412,446,452],{},[44,404,405,407],{},[47,406,49],{},[47,408,409],{},"c",[54,411,56],{},[41,413,414,417,443],{},[54,415,416],{"fence":70},"[",[418,419,423],"mtable",{"rowspacing":420,"columnalign":421,"columnspacing":422},"0.16em","center center","1em",[424,425,426,436],"mtr",{},[427,428,429],"mtd",{},[430,431,433],"mstyle",{"scriptlevel":432,"displaystyle":59},"0",[47,434,435],{},"R",[427,437,438],{},[430,439,440],{"scriptlevel":432,"displaystyle":59},[47,441,442],{},"t",[54,444,445],{"fence":70},"]",[44,447,448,450],{},[47,449,49],{},[47,451,52],{},[47,453,455],{"mathvariant":454},"normal",".",[104,457,458],{"encoding":106},"P_c = \\begin{bmatrix}R & t\\end{bmatrix}P_w.",[25,460,462,517],{"className":461,"ariaHidden":70},[111],[25,463,465,468,508,511,514],{"className":464},[115],[25,466],{"className":467,"style":120},[119],[25,469,471,474],{"className":470},[124],[25,472,49],{"className":473,"style":129},[124,128],[25,475,477],{"className":476},[133],[25,478,480,500],{"className":479},[137,138],[25,481,483,497],{"className":482},[142],[25,484,486],{"className":485,"style":147},[146],[25,487,488,491],{"style":150},[25,489],{"className":490,"style":155},[154],[25,492,494],{"className":493},[159,160,161,162],[25,495,409],{"className":496},[124,128,162],[25,498,171],{"className":499},[170],[25,501,503],{"className":502},[142],[25,504,506],{"className":505,"style":178},[146],[25,507],{},[25,509],{"className":510,"style":185},[184],[25,512,56],{"className":513},[189],[25,515],{"className":516,"style":185},[184],[25,518,520,524,632,635,675],{"className":519},[115],[25,521],{"className":522,"style":523},[119],"height:1.2em;vertical-align:-0.35em;",[25,525,528,538,626],{"className":526},[527],"minner",[25,529,533],{"className":530,"style":532},[203,531],"delimcenter","top:0em;",[25,534,416],{"className":535},[536,537],"delimsizing","size1",[25,539,541],{"className":540},[124],[25,542,544,584,589,592],{"className":543},[418],[25,545,548],{"className":546},[547],"col-align-c",[25,549,551,575],{"className":550},[137,138],[25,552,554,572],{"className":553},[142],[25,555,558],{"className":556,"style":557},[146],"height:0.85em;",[25,559,561,565],{"style":560},"top:-3.01em;",[25,562],{"className":563,"style":564},[154],"height:3em;",[25,566,568],{"className":567},[124],[25,569,435],{"className":570,"style":571},[124,128],"margin-right:0.0077em;",[25,573,171],{"className":574},[170],[25,576,578],{"className":577},[142],[25,579,582],{"className":580,"style":581},[146],"height:0.35em;",[25,583],{},[25,585],{"className":586,"style":588},[587],"arraycolsep","width:0.5em;",[25,590],{"className":591,"style":588},[587],[25,593,595],{"className":594},[547],[25,596,598,618],{"className":597},[137,138],[25,599,601,615],{"className":600},[142],[25,602,604],{"className":603,"style":557},[146],[25,605,606,609],{"style":560},[25,607],{"className":608,"style":564},[154],[25,610,612],{"className":611},[124],[25,613,442],{"className":614},[124,128],[25,616,171],{"className":617},[170],[25,619,621],{"className":620},[142],[25,622,624],{"className":623,"style":581},[146],[25,625],{},[25,627,629],{"className":628,"style":532},[356,531],[25,630,445],{"className":631},[536,537],[25,633],{"className":634,"style":253},[184],[25,636,638,641],{"className":637},[124],[25,639,49],{"className":640,"style":129},[124,128],[25,642,644],{"className":643},[133],[25,645,647,667],{"className":646},[137,138],[25,648,650,664],{"className":649},[142],[25,651,653],{"className":652,"style":147},[146],[25,654,655,658],{"style":150},[25,656],{"className":657,"style":155},[154],[25,659,661],{"className":660},[159,160,161,162],[25,662,52],{"className":663,"style":166},[124,128,162],[25,665,171],{"className":666},[170],[25,668,670],{"className":669},[142],[25,671,673],{"className":672,"style":178},[146],[25,674],{},[25,676,455],{"className":677},[124],[13,679,680,681,962],{},"Perspective division then maps ",[25,682,684,734],{"className":683},[28],[25,685,687],{"className":686},[32],[34,688,689],{"xmlns":36},[38,690,691,731],{},[41,692,693,699,701,703,709,711,717,719,725],{},[44,694,695,697],{},[47,696,49],{},[47,698,409],{},[54,700,56],{},[54,702,60],{"stretchy":59},[44,704,705,707],{},[47,706,65],{},[47,708,409],{},[54,710,71],{"separator":70},[44,712,713,715],{},[47,714,76],{},[47,716,409],{},[54,718,71],{"separator":70},[44,720,721,723],{},[47,722,85],{},[47,724,409],{},[95,726,727,729],{},[54,728,99],{"stretchy":59},[47,730,102],{},[104,732,733],{"encoding":106},"P_c = (X_c, Y_c, Z_c)^T",[25,735,737,792],{"className":736,"ariaHidden":70},[111],[25,738,740,743,783,786,789],{"className":739},[115],[25,741],{"className":742,"style":120},[119],[25,744,746,749],{"className":745},[124],[25,747,49],{"className":748,"style":129},[124,128],[25,750,752],{"className":751},[133],[25,753,755,775],{"className":754},[137,138],[25,756,758,772],{"className":757},[142],[25,759,761],{"className":760,"style":147},[146],[25,762,763,766],{"style":150},[25,764],{"className":765,"style":155},[154],[25,767,769],{"className":768},[159,160,161,162],[25,770,409],{"className":771},[124,128,162],[25,773,171],{"className":774},[170],[25,776,778],{"className":777},[142],[25,779,781],{"className":780,"style":178},[146],[25,782],{},[25,784],{"className":785,"style":185},[184],[25,787,56],{"className":788},[189],[25,790],{"className":791,"style":185},[184],[25,793,795,798,801,841,844,847,887,890,893,933],{"className":794},[115],[25,796],{"className":797,"style":199},[119],[25,799,60],{"className":800},[203],[25,802,804,807],{"className":803},[124],[25,805,65],{"className":806,"style":210},[124,128],[25,808,810],{"className":809},[133],[25,811,813,833],{"className":812},[137,138],[25,814,816,830],{"className":815},[142],[25,817,819],{"className":818,"style":147},[146],[25,820,821,824],{"style":225},[25,822],{"className":823,"style":155},[154],[25,825,827],{"className":826},[159,160,161,162],[25,828,409],{"className":829},[124,128,162],[25,831,171],{"className":832},[170],[25,834,836],{"className":835},[142],[25,837,839],{"className":838,"style":178},[146],[25,840],{},[25,842,71],{"className":843},[249],[25,845],{"className":846,"style":253},[184],[25,848,850,853],{"className":849},[124],[25,851,76],{"className":852,"style":260},[124,128],[25,854,856],{"className":855},[133],[25,857,859,879],{"className":858},[137,138],[25,860,862,876],{"className":861},[142],[25,863,865],{"className":864,"style":147},[146],[25,866,867,870],{"style":275},[25,868],{"className":869,"style":155},[154],[25,871,873],{"className":872},[159,160,161,162],[25,874,409],{"className":875},[124,128,162],[25,877,171],{"className":878},[170],[25,880,882],{"className":881},[142],[25,883,885],{"className":884,"style":178},[146],[25,886],{},[25,888,71],{"className":889},[249],[25,891],{"className":892,"style":253},[184],[25,894,896,899],{"className":895},[124],[25,897,85],{"className":898,"style":308},[124,128],[25,900,902],{"className":901},[133],[25,903,905,925],{"className":904},[137,138],[25,906,908,922],{"className":907},[142],[25,909,911],{"className":910,"style":147},[146],[25,912,913,916],{"style":323},[25,914],{"className":915,"style":155},[154],[25,917,919],{"className":918},[159,160,161,162],[25,920,409],{"className":921},[124,128,162],[25,923,171],{"className":924},[170],[25,926,928],{"className":927},[142],[25,929,931],{"className":930,"style":178},[146],[25,932],{},[25,934,936,939],{"className":935},[356],[25,937,99],{"className":938},[356],[25,940,942],{"className":941},[133],[25,943,945],{"className":944},[137],[25,946,948],{"className":947},[142],[25,949,951],{"className":950,"style":372},[146],[25,952,953,956],{"style":375},[25,954],{"className":955,"style":155},[154],[25,957,959],{"className":958},[159,160,161,162],[25,960,102],{"className":961,"style":129},[124,128,162]," to the normalized image plane:",[25,964,966],{"className":965},[389],[25,967,969,1036],{"className":968},[28],[25,970,972],{"className":971},[32],[34,973,974],{"xmlns":36,"display":398},[38,975,976,1033],{},[41,977,978,986,988,1003,1005,1008,1015,1017,1031],{},[44,979,980,983],{},[47,981,982],{},"x",[47,984,985],{},"n",[54,987,56],{},[989,990,991,997],"mfrac",{},[44,992,993,995],{},[47,994,65],{},[47,996,409],{},[44,998,999,1001],{},[47,1000,85],{},[47,1002,409],{},[54,1004,71],{"separator":70},[184,1006],{"width":1007},"2em",[44,1009,1010,1013],{},[47,1011,1012],{},"y",[47,1014,985],{},[54,1016,56],{},[989,1018,1019,1025],{},[44,1020,1021,1023],{},[47,1022,76],{},[47,1024,409],{},[44,1026,1027,1029],{},[47,1028,85],{},[47,1030,409],{},[47,1032,455],{"mathvariant":454},[104,1034,1035],{"encoding":106},"x_n = \\frac{X_c}{Z_c}, \\qquad y_n = \\frac{Y_c}{Z_c}.",[25,1037,1039,1096,1308],{"className":1038,"ariaHidden":70},[111],[25,1040,1042,1046,1087,1090,1093],{"className":1041},[115],[25,1043],{"className":1044,"style":1045},[119],"height:0.5806em;vertical-align:-0.15em;",[25,1047,1049,1052],{"className":1048},[124],[25,1050,982],{"className":1051},[124,128],[25,1053,1055],{"className":1054},[133],[25,1056,1058,1079],{"className":1057},[137,138],[25,1059,1061,1076],{"className":1060},[142],[25,1062,1064],{"className":1063,"style":147},[146],[25,1065,1067,1070],{"style":1066},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[25,1068],{"className":1069,"style":155},[154],[25,1071,1073],{"className":1072},[159,160,161,162],[25,1074,985],{"className":1075},[124,128,162],[25,1077,171],{"className":1078},[170],[25,1080,1082],{"className":1081},[142],[25,1083,1085],{"className":1084,"style":178},[146],[25,1086],{},[25,1088],{"className":1089,"style":185},[184],[25,1091,56],{"className":1092},[189],[25,1094],{"className":1095,"style":185},[184],[25,1097,1099,1103,1247,1250,1254,1257,1299,1302,1305],{"className":1098},[115],[25,1100],{"className":1101,"style":1102},[119],"height:2.1963em;vertical-align:-0.836em;",[25,1104,1106,1110,1244],{"className":1105},[124],[25,1107],{"className":1108},[203,1109],"nulldelimiter",[25,1111,1113],{"className":1112},[989],[25,1114,1116,1235],{"className":1115},[137,138],[25,1117,1119,1232],{"className":1118},[142],[25,1120,1123,1172,1183],{"className":1121,"style":1122},[146],"height:1.3603em;",[25,1124,1126,1129],{"style":1125},"top:-2.314em;",[25,1127],{"className":1128,"style":564},[154],[25,1130,1132],{"className":1131},[124],[25,1133,1135,1138],{"className":1134},[124],[25,1136,85],{"className":1137,"style":308},[124,128],[25,1139,1141],{"className":1140},[133],[25,1142,1144,1164],{"className":1143},[137,138],[25,1145,1147,1161],{"className":1146},[142],[25,1148,1150],{"className":1149,"style":147},[146],[25,1151,1152,1155],{"style":323},[25,1153],{"className":1154,"style":155},[154],[25,1156,1158],{"className":1157},[159,160,161,162],[25,1159,409],{"className":1160},[124,128,162],[25,1162,171],{"className":1163},[170],[25,1165,1167],{"className":1166},[142],[25,1168,1170],{"className":1169,"style":178},[146],[25,1171],{},[25,1173,1175,1178],{"style":1174},"top:-3.23em;",[25,1176],{"className":1177,"style":564},[154],[25,1179],{"className":1180,"style":1182},[1181],"frac-line","border-bottom-width:0.04em;",[25,1184,1186,1189],{"style":1185},"top:-3.677em;",[25,1187],{"className":1188,"style":564},[154],[25,1190,1192],{"className":1191},[124],[25,1193,1195,1198],{"className":1194},[124],[25,1196,65],{"className":1197,"style":210},[124,128],[25,1199,1201],{"className":1200},[133],[25,1202,1204,1224],{"className":1203},[137,138],[25,1205,1207,1221],{"className":1206},[142],[25,1208,1210],{"className":1209,"style":147},[146],[25,1211,1212,1215],{"style":225},[25,1213],{"className":1214,"style":155},[154],[25,1216,1218],{"className":1217},[159,160,161,162],[25,1219,409],{"className":1220},[124,128,162],[25,1222,171],{"className":1223},[170],[25,1225,1227],{"className":1226},[142],[25,1228,1230],{"className":1229,"style":178},[146],[25,1231],{},[25,1233,171],{"className":1234},[170],[25,1236,1238],{"className":1237},[142],[25,1239,1242],{"className":1240,"style":1241},[146],"height:0.836em;",[25,1243],{},[25,1245],{"className":1246},[356,1109],[25,1248,71],{"className":1249},[249],[25,1251],{"className":1252,"style":1253},[184],"margin-right:2em;",[25,1255],{"className":1256,"style":253},[184],[25,1258,1260,1264],{"className":1259},[124],[25,1261,1012],{"className":1262,"style":1263},[124,128],"margin-right:0.0359em;",[25,1265,1267],{"className":1266},[133],[25,1268,1270,1291],{"className":1269},[137,138],[25,1271,1273,1288],{"className":1272},[142],[25,1274,1276],{"className":1275,"style":147},[146],[25,1277,1279,1282],{"style":1278},"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;",[25,1280],{"className":1281,"style":155},[154],[25,1283,1285],{"className":1284},[159,160,161,162],[25,1286,985],{"className":1287},[124,128,162],[25,1289,171],{"className":1290},[170],[25,1292,1294],{"className":1293},[142],[25,1295,1297],{"className":1296,"style":178},[146],[25,1298],{},[25,1300],{"className":1301,"style":185},[184],[25,1303,56],{"className":1304},[189],[25,1306],{"className":1307,"style":185},[184],[25,1309,1311,1314,1450],{"className":1310},[115],[25,1312],{"className":1313,"style":1102},[119],[25,1315,1317,1320,1447],{"className":1316},[124],[25,1318],{"className":1319},[203,1109],[25,1321,1323],{"className":1322},[989],[25,1324,1326,1439],{"className":1325},[137,138],[25,1327,1329,1436],{"className":1328},[142],[25,1330,1332,1380,1388],{"className":1331,"style":1122},[146],[25,1333,1334,1337],{"style":1125},[25,1335],{"className":1336,"style":564},[154],[25,1338,1340],{"className":1339},[124],[25,1341,1343,1346],{"className":1342},[124],[25,1344,85],{"className":1345,"style":308},[124,128],[25,1347,1349],{"className":1348},[133],[25,1350,1352,1372],{"className":1351},[137,138],[25,1353,1355,1369],{"className":1354},[142],[25,1356,1358],{"className":1357,"style":147},[146],[25,1359,1360,1363],{"style":323},[25,1361],{"className":1362,"style":155},[154],[25,1364,1366],{"className":1365},[159,160,161,162],[25,1367,409],{"className":1368},[124,128,162],[25,1370,171],{"className":1371},[170],[25,1373,1375],{"className":1374},[142],[25,1376,1378],{"className":1377,"style":178},[146],[25,1379],{},[25,1381,1382,1385],{"style":1174},[25,1383],{"className":1384,"style":564},[154],[25,1386],{"className":1387,"style":1182},[1181],[25,1389,1390,1393],{"style":1185},[25,1391],{"className":1392,"style":564},[154],[25,1394,1396],{"className":1395},[124],[25,1397,1399,1402],{"className":1398},[124],[25,1400,76],{"className":1401,"style":260},[124,128],[25,1403,1405],{"className":1404},[133],[25,1406,1408,1428],{"className":1407},[137,138],[25,1409,1411,1425],{"className":1410},[142],[25,1412,1414],{"className":1413,"style":147},[146],[25,1415,1416,1419],{"style":275},[25,1417],{"className":1418,"style":155},[154],[25,1420,1422],{"className":1421},[159,160,161,162],[25,1423,409],{"className":1424},[124,128,162],[25,1426,171],{"className":1427},[170],[25,1429,1431],{"className":1430},[142],[25,1432,1434],{"className":1433,"style":178},[146],[25,1435],{},[25,1437,171],{"className":1438},[170],[25,1440,1442],{"className":1441},[142],[25,1443,1445],{"className":1444,"style":1241},[146],[25,1446],{},[25,1448],{"className":1449},[356,1109],[25,1451,455],{"className":1452},[124],[13,1454,1455,1456,1591],{},"This division is the essential operation. Points on the same ray from the camera center share ",[25,1457,1459,1489],{"className":1458},[28],[25,1460,1462],{"className":1461},[32],[34,1463,1464],{"xmlns":36},[38,1465,1466,1486],{},[41,1467,1468,1470,1476,1478,1484],{},[54,1469,60],{"stretchy":59},[44,1471,1472,1474],{},[47,1473,982],{},[47,1475,985],{},[54,1477,71],{"separator":70},[44,1479,1480,1482],{},[47,1481,1012],{},[47,1483,985],{},[54,1485,99],{"stretchy":59},[104,1487,1488],{"encoding":106},"(x_n, y_n)",[25,1490,1492],{"className":1491,"ariaHidden":70},[111],[25,1493,1495,1499,1502,1542,1545,1548,1588],{"className":1494},[115],[25,1496],{"className":1497,"style":1498},[119],"height:1em;vertical-align:-0.25em;",[25,1500,60],{"className":1501},[203],[25,1503,1505,1508],{"className":1504},[124],[25,1506,982],{"className":1507},[124,128],[25,1509,1511],{"className":1510},[133],[25,1512,1514,1534],{"className":1513},[137,138],[25,1515,1517,1531],{"className":1516},[142],[25,1518,1520],{"className":1519,"style":147},[146],[25,1521,1522,1525],{"style":1066},[25,1523],{"className":1524,"style":155},[154],[25,1526,1528],{"className":1527},[159,160,161,162],[25,1529,985],{"className":1530},[124,128,162],[25,1532,171],{"className":1533},[170],[25,1535,1537],{"className":1536},[142],[25,1538,1540],{"className":1539,"style":178},[146],[25,1541],{},[25,1543,71],{"className":1544},[249],[25,1546],{"className":1547,"style":253},[184],[25,1549,1551,1554],{"className":1550},[124],[25,1552,1012],{"className":1553,"style":1263},[124,128],[25,1555,1557],{"className":1556},[133],[25,1558,1560,1580],{"className":1559},[137,138],[25,1561,1563,1577],{"className":1562},[142],[25,1564,1566],{"className":1565,"style":147},[146],[25,1567,1568,1571],{"style":1278},[25,1569],{"className":1570,"style":155},[154],[25,1572,1574],{"className":1573},[159,160,161,162],[25,1575,985],{"className":1576},[124,128,162],[25,1578,171],{"className":1579},[170],[25,1581,1583],{"className":1582},[142],[25,1584,1586],{"className":1585,"style":178},[146],[25,1587],{},[25,1589,99],{"className":1590},[356],", so a single image cannot recover their absolute depth without more information.",[17,1593,1595],{"id":1594},"pixels-are-not-normalized-coordinates","Pixels are not normalized coordinates",[13,1597,1598],{},"The intrinsic matrix converts normalized coordinates into sensor coordinates:",[25,1600,1602],{"className":1601},[389],[25,1603,1605,1783],{"className":1604},[28],[25,1606,1608],{"className":1607},[32],[34,1609,1610],{"xmlns":36,"display":398},[38,1611,1612,1780],{},[41,1613,1614,1649,1651,1738,1778],{},[41,1615,1616,1618,1647],{},[54,1617,416],{"fence":70},[418,1619,1621,1630,1639],{"rowspacing":420,"columnalign":1620,"columnspacing":422},"center",[424,1622,1623],{},[427,1624,1625],{},[430,1626,1627],{"scriptlevel":432,"displaystyle":59},[47,1628,1629],{},"u",[424,1631,1632],{},[427,1633,1634],{},[430,1635,1636],{"scriptlevel":432,"displaystyle":59},[47,1637,1638],{},"v",[424,1640,1641],{},[427,1642,1643],{},[430,1644,1645],{"scriptlevel":432,"displaystyle":59},[91,1646,93],{},[54,1648,445],{"fence":70},[54,1650,56],{},[41,1652,1653,1655,1736],{},[54,1654,416],{"fence":70},[418,1656,1658,1688,1716],{"rowspacing":420,"columnalign":1657,"columnspacing":422},"center center center",[424,1659,1660,1671,1678],{},[427,1661,1662],{},[430,1663,1664],{"scriptlevel":432,"displaystyle":59},[44,1665,1666,1669],{},[47,1667,1668],{},"f",[47,1670,982],{},[427,1672,1673],{},[430,1674,1675],{"scriptlevel":432,"displaystyle":59},[47,1676,1677],{},"s",[427,1679,1680],{},[430,1681,1682],{"scriptlevel":432,"displaystyle":59},[44,1683,1684,1686],{},[47,1685,409],{},[47,1687,982],{},[424,1689,1690,1696,1706],{},[427,1691,1692],{},[430,1693,1694],{"scriptlevel":432,"displaystyle":59},[91,1695,432],{},[427,1697,1698],{},[430,1699,1700],{"scriptlevel":432,"displaystyle":59},[44,1701,1702,1704],{},[47,1703,1668],{},[47,1705,1012],{},[427,1707,1708],{},[430,1709,1710],{"scriptlevel":432,"displaystyle":59},[44,1711,1712,1714],{},[47,1713,409],{},[47,1715,1012],{},[424,1717,1718,1724,1730],{},[427,1719,1720],{},[430,1721,1722],{"scriptlevel":432,"displaystyle":59},[91,1723,432],{},[427,1725,1726],{},[430,1727,1728],{"scriptlevel":432,"displaystyle":59},[91,1729,432],{},[427,1731,1732],{},[430,1733,1734],{"scriptlevel":432,"displaystyle":59},[91,1735,93],{},[54,1737,445],{"fence":70},[41,1739,1740,1742,1776],{},[54,1741,416],{"fence":70},[418,1743,1744,1756,1768],{"rowspacing":420,"columnalign":1620,"columnspacing":422},[424,1745,1746],{},[427,1747,1748],{},[430,1749,1750],{"scriptlevel":432,"displaystyle":59},[44,1751,1752,1754],{},[47,1753,982],{},[47,1755,985],{},[424,1757,1758],{},[427,1759,1760],{},[430,1761,1762],{"scriptlevel":432,"displaystyle":59},[44,1763,1764,1766],{},[47,1765,1012],{},[47,1767,985],{},[424,1769,1770],{},[427,1771,1772],{},[430,1773,1774],{"scriptlevel":432,"displaystyle":59},[91,1775,93],{},[54,1777,445],{"fence":70},[47,1779,455],{"mathvariant":454},[104,1781,1782],{"encoding":106},"\\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}.",[25,1784,1786,1957],{"className":1785,"ariaHidden":70},[111],[25,1787,1789,1793,1948,1951,1954],{"className":1788},[115],[25,1790],{"className":1791,"style":1792},[119],"height:3.6em;vertical-align:-1.55em;",[25,1794,1796,1846,1910],{"className":1795},[527],[25,1797,1799],{"className":1798},[203],[25,1800,1803],{"className":1801},[536,1802],"mult",[25,1804,1806,1837],{"className":1805},[137,138],[25,1807,1809,1834],{"className":1808},[142],[25,1810,1813],{"className":1811,"style":1812},[146],"height:2.05em;",[25,1814,1816,1820],{"style":1815},"top:-4.05em;",[25,1817],{"className":1818,"style":1819},[154],"height:5.6em;",[25,1821,1823],{"style":1822},"width:0.667em;height:3.6em;",[1824,1825,1830],"svg",{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0.667em","3.6em","0 0 667 3600",[1831,1832],"path",{"d":1833},"M403 1759 V84 H666 V0 H319 V1759 v0 v1759 v84 h347 v-84\nH403z M403 1759 V0 H319 V1759 v0 v1759 v84 h84z",[25,1835,171],{"className":1836},[170],[25,1838,1840],{"className":1839},[142],[25,1841,1844],{"className":1842,"style":1843},[146],"height:1.55em;",[25,1845],{},[25,1847,1849],{"className":1848},[124],[25,1850,1852],{"className":1851},[418],[25,1853,1855],{"className":1854},[547],[25,1856,1858,1902],{"className":1857},[137,138],[25,1859,1861,1899],{"className":1860},[142],[25,1862,1864,1876,1887],{"className":1863,"style":1812},[146],[25,1865,1867,1870],{"style":1866},"top:-4.21em;",[25,1868],{"className":1869,"style":564},[154],[25,1871,1873],{"className":1872},[124],[25,1874,1629],{"className":1875},[124,128],[25,1877,1878,1881],{"style":560},[25,1879],{"className":1880,"style":564},[154],[25,1882,1884],{"className":1883},[124],[25,1885,1638],{"className":1886,"style":1263},[124,128],[25,1888,1890,1893],{"style":1889},"top:-1.81em;",[25,1891],{"className":1892,"style":564},[154],[25,1894,1896],{"className":1895},[124],[25,1897,93],{"className":1898},[124],[25,1900,171],{"className":1901},[170],[25,1903,1905],{"className":1904},[142],[25,1906,1908],{"className":1907,"style":1843},[146],[25,1909],{},[25,1911,1913],{"className":1912},[356],[25,1914,1916],{"className":1915},[536,1802],[25,1917,1919,1940],{"className":1918},[137,138],[25,1920,1922,1937],{"className":1921},[142],[25,1923,1925],{"className":1924,"style":1812},[146],[25,1926,1927,1930],{"style":1815},[25,1928],{"className":1929,"style":1819},[154],[25,1931,1932],{"style":1822},[1824,1933,1934],{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},[1831,1935],{"d":1936},"M347 1759 V0 H0 V84 H263 V1759 v0 v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v0 v1759 h84z",[25,1938,171],{"className":1939},[170],[25,1941,1943],{"className":1942},[142],[25,1944,1946],{"className":1945,"style":1843},[146],[25,1947],{},[25,1949],{"className":1950,"style":185},[184],[25,1952,56],{"className":1953},[189],[25,1955],{"className":1956,"style":185},[184],[25,1958,1960,1963,2377,2380,2593,2596],{"className":1959},[115],[25,1961],{"className":1962,"style":1792},[119],[25,1964,1966,2003,2340],{"className":1965},[527],[25,1967,1969],{"className":1968},[203],[25,1970,1972],{"className":1971},[536,1802],[25,1973,1975,1995],{"className":1974},[137,138],[25,1976,1978,1992],{"className":1977},[142],[25,1979,1981],{"className":1980,"style":1812},[146],[25,1982,1983,1986],{"style":1815},[25,1984],{"className":1985,"style":1819},[154],[25,1987,1988],{"style":1822},[1824,1989,1990],{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},[1831,1991],{"d":1833},[25,1993,171],{"className":1994},[170],[25,1996,1998],{"className":1997},[142],[25,1999,2001],{"className":2000,"style":1843},[146],[25,2002],{},[25,2004,2006],{"className":2005},[124],[25,2007,2009,2104,2107,2110,2204,2207,2210],{"className":2008},[418],[25,2010,2012],{"className":2011},[547],[25,2013,2015,2096],{"className":2014},[137,138],[25,2016,2018,2093],{"className":2017},[142],[25,2019,2021,2071,2082],{"className":2020,"style":1812},[146],[25,2022,2023,2026],{"style":1866},[25,2024],{"className":2025,"style":564},[154],[25,2027,2029],{"className":2028},[124],[25,2030,2032,2036],{"className":2031},[124],[25,2033,1668],{"className":2034,"style":2035},[124,128],"margin-right:0.1076em;",[25,2037,2039],{"className":2038},[133],[25,2040,2042,2063],{"className":2041},[137,138],[25,2043,2045,2060],{"className":2044},[142],[25,2046,2048],{"className":2047,"style":147},[146],[25,2049,2051,2054],{"style":2050},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[25,2052],{"className":2053,"style":155},[154],[25,2055,2057],{"className":2056},[159,160,161,162],[25,2058,982],{"className":2059},[124,128,162],[25,2061,171],{"className":2062},[170],[25,2064,2066],{"className":2065},[142],[25,2067,2069],{"className":2068,"style":178},[146],[25,2070],{},[25,2072,2073,2076],{"style":560},[25,2074],{"className":2075,"style":564},[154],[25,2077,2079],{"className":2078},[124],[25,2080,432],{"className":2081},[124],[25,2083,2084,2087],{"style":1889},[25,2085],{"className":2086,"style":564},[154],[25,2088,2090],{"className":2089},[124],[25,2091,432],{"className":2092},[124],[25,2094,171],{"className":2095},[170],[25,2097,2099],{"className":2098},[142],[25,2100,2102],{"className":2101,"style":1843},[146],[25,2103],{},[25,2105],{"className":2106,"style":588},[587],[25,2108],{"className":2109,"style":588},[587],[25,2111,2113],{"className":2112},[547],[25,2114,2116,2196],{"className":2115},[137,138],[25,2117,2119,2193],{"className":2118},[142],[25,2120,2122,2133,2182],{"className":2121,"style":1812},[146],[25,2123,2124,2127],{"style":1866},[25,2125],{"className":2126,"style":564},[154],[25,2128,2130],{"className":2129},[124],[25,2131,1677],{"className":2132},[124,128],[25,2134,2135,2138],{"style":560},[25,2136],{"className":2137,"style":564},[154],[25,2139,2141],{"className":2140},[124],[25,2142,2144,2147],{"className":2143},[124],[25,2145,1668],{"className":2146,"style":2035},[124,128],[25,2148,2150],{"className":2149},[133],[25,2151,2153,2173],{"className":2152},[137,138],[25,2154,2156,2170],{"className":2155},[142],[25,2157,2159],{"className":2158,"style":147},[146],[25,2160,2161,2164],{"style":2050},[25,2162],{"className":2163,"style":155},[154],[25,2165,2167],{"className":2166},[159,160,161,162],[25,2168,1012],{"className":2169,"style":1263},[124,128,162],[25,2171,171],{"className":2172},[170],[25,2174,2176],{"className":2175},[142],[25,2177,2180],{"className":2178,"style":2179},[146],"height:0.2861em;",[25,2181],{},[25,2183,2184,2187],{"style":1889},[25,2185],{"className":2186,"style":564},[154],[25,2188,2190],{"className":2189},[124],[25,2191,432],{"className":2192},[124],[25,2194,171],{"className":2195},[170],[25,2197,2199],{"className":2198},[142],[25,2200,2202],{"className":2201,"style":1843},[146],[25,2203],{},[25,2205],{"className":2206,"style":588},[587],[25,2208],{"className":2209,"style":588},[587],[25,2211,2213],{"className":2212},[547],[25,2214,2216,2332],{"className":2215},[137,138],[25,2217,2219,2329],{"className":2218},[142],[25,2220,2222,2270,2318],{"className":2221,"style":1812},[146],[25,2223,2224,2227],{"style":1866},[25,2225],{"className":2226,"style":564},[154],[25,2228,2230],{"className":2229},[124],[25,2231,2233,2236],{"className":2232},[124],[25,2234,409],{"className":2235},[124,128],[25,2237,2239],{"className":2238},[133],[25,2240,2242,2262],{"className":2241},[137,138],[25,2243,2245,2259],{"className":2244},[142],[25,2246,2248],{"className":2247,"style":147},[146],[25,2249,2250,2253],{"style":1066},[25,2251],{"className":2252,"style":155},[154],[25,2254,2256],{"className":2255},[159,160,161,162],[25,2257,982],{"className":2258},[124,128,162],[25,2260,171],{"className":2261},[170],[25,2263,2265],{"className":2264},[142],[25,2266,2268],{"className":2267,"style":178},[146],[25,2269],{},[25,2271,2272,2275],{"style":560},[25,2273],{"className":2274,"style":564},[154],[25,2276,2278],{"className":2277},[124],[25,2279,2281,2284],{"className":2280},[124],[25,2282,409],{"className":2283},[124,128],[25,2285,2287],{"className":2286},[133],[25,2288,2290,2310],{"className":2289},[137,138],[25,2291,2293,2307],{"className":2292},[142],[25,2294,2296],{"className":2295,"style":147},[146],[25,2297,2298,2301],{"style":1066},[25,2299],{"className":2300,"style":155},[154],[25,2302,2304],{"className":2303},[159,160,161,162],[25,2305,1012],{"className":2306,"style":1263},[124,128,162],[25,2308,171],{"className":2309},[170],[25,2311,2313],{"className":2312},[142],[25,2314,2316],{"className":2315,"style":2179},[146],[25,2317],{},[25,2319,2320,2323],{"style":1889},[25,2321],{"className":2322,"style":564},[154],[25,2324,2326],{"className":2325},[124],[25,2327,93],{"className":2328},[124],[25,2330,171],{"className":2331},[170],[25,2333,2335],{"className":2334},[142],[25,2336,2338],{"className":2337,"style":1843},[146],[25,2339],{},[25,2341,2343],{"className":2342},[356],[25,2344,2346],{"className":2345},[536,1802],[25,2347,2349,2369],{"className":2348},[137,138],[25,2350,2352,2366],{"className":2351},[142],[25,2353,2355],{"className":2354,"style":1812},[146],[25,2356,2357,2360],{"style":1815},[25,2358],{"className":2359,"style":1819},[154],[25,2361,2362],{"style":1822},[1824,2363,2364],{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},[1831,2365],{"d":1936},[25,2367,171],{"className":2368},[170],[25,2370,2372],{"className":2371},[142],[25,2373,2375],{"className":2374,"style":1843},[146],[25,2376],{},[25,2378],{"className":2379,"style":253},[184],[25,2381,2383,2420,2556],{"className":2382},[527],[25,2384,2386],{"className":2385},[203],[25,2387,2389],{"className":2388},[536,1802],[25,2390,2392,2412],{"className":2391},[137,138],[25,2393,2395,2409],{"className":2394},[142],[25,2396,2398],{"className":2397,"style":1812},[146],[25,2399,2400,2403],{"style":1815},[25,2401],{"className":2402,"style":1819},[154],[25,2404,2405],{"style":1822},[1824,2406,2407],{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},[1831,2408],{"d":1833},[25,2410,171],{"className":2411},[170],[25,2413,2415],{"className":2414},[142],[25,2416,2418],{"className":2417,"style":1843},[146],[25,2419],{},[25,2421,2423],{"className":2422},[124],[25,2424,2426],{"className":2425},[418],[25,2427,2429],{"className":2428},[547],[25,2430,2432,2548],{"className":2431},[137,138],[25,2433,2435,2545],{"className":2434},[142],[25,2436,2438,2486,2534],{"className":2437,"style":1812},[146],[25,2439,2440,2443],{"style":1866},[25,2441],{"className":2442,"style":564},[154],[25,2444,2446],{"className":2445},[124],[25,2447,2449,2452],{"className":2448},[124],[25,2450,982],{"className":2451},[124,128],[25,2453,2455],{"className":2454},[133],[25,2456,2458,2478],{"className":2457},[137,138],[25,2459,2461,2475],{"className":2460},[142],[25,2462,2464],{"className":2463,"style":147},[146],[25,2465,2466,2469],{"style":1066},[25,2467],{"className":2468,"style":155},[154],[25,2470,2472],{"className":2471},[159,160,161,162],[25,2473,985],{"className":2474},[124,128,162],[25,2476,171],{"className":2477},[170],[25,2479,2481],{"className":2480},[142],[25,2482,2484],{"className":2483,"style":178},[146],[25,2485],{},[25,2487,2488,2491],{"style":560},[25,2489],{"className":2490,"style":564},[154],[25,2492,2494],{"className":2493},[124],[25,2495,2497,2500],{"className":2496},[124],[25,2498,1012],{"className":2499,"style":1263},[124,128],[25,2501,2503],{"className":2502},[133],[25,2504,2506,2526],{"className":2505},[137,138],[25,2507,2509,2523],{"className":2508},[142],[25,2510,2512],{"className":2511,"style":147},[146],[25,2513,2514,2517],{"style":1278},[25,2515],{"className":2516,"style":155},[154],[25,2518,2520],{"className":2519},[159,160,161,162],[25,2521,985],{"className":2522},[124,128,162],[25,2524,171],{"className":2525},[170],[25,2527,2529],{"className":2528},[142],[25,2530,2532],{"className":2531,"style":178},[146],[25,2533],{},[25,2535,2536,2539],{"style":1889},[25,2537],{"className":2538,"style":564},[154],[25,2540,2542],{"className":2541},[124],[25,2543,93],{"className":2544},[124],[25,2546,171],{"className":2547},[170],[25,2549,2551],{"className":2550},[142],[25,2552,2554],{"className":2553,"style":1843},[146],[25,2555],{},[25,2557,2559],{"className":2558},[356],[25,2560,2562],{"className":2561},[536,1802],[25,2563,2565,2585],{"className":2564},[137,138],[25,2566,2568,2582],{"className":2567},[142],[25,2569,2571],{"className":2570,"style":1812},[146],[25,2572,2573,2576],{"style":1815},[25,2574],{"className":2575,"style":1819},[154],[25,2577,2578],{"style":1822},[1824,2579,2580],{"xmlns":1826,"width":1827,"height":1828,"viewBox":1829},[1831,2581],{"d":1936},[25,2583,171],{"className":2584},[170],[25,2586,2588],{"className":2587},[142],[25,2589,2591],{"className":2590,"style":1843},[146],[25,2592],{},[25,2594],{"className":2595,"style":253},[184],[25,2597,455],{"className":2598},[124],[13,2600,2601,2602,2673,2674,2745,2746,2881,2882,2911],{},"The focal lengths ",[25,2603,2605,2623],{"className":2604},[28],[25,2606,2608],{"className":2607},[32],[34,2609,2610],{"xmlns":36},[38,2611,2612,2620],{},[41,2613,2614],{},[44,2615,2616,2618],{},[47,2617,1668],{},[47,2619,982],{},[104,2621,2622],{"encoding":106},"f_x",[25,2624,2626],{"className":2625,"ariaHidden":70},[111],[25,2627,2629,2633],{"className":2628},[115],[25,2630],{"className":2631,"style":2632},[119],"height:0.8889em;vertical-align:-0.1944em;",[25,2634,2636,2639],{"className":2635},[124],[25,2637,1668],{"className":2638,"style":2035},[124,128],[25,2640,2642],{"className":2641},[133],[25,2643,2645,2665],{"className":2644},[137,138],[25,2646,2648,2662],{"className":2647},[142],[25,2649,2651],{"className":2650,"style":147},[146],[25,2652,2653,2656],{"style":2050},[25,2654],{"className":2655,"style":155},[154],[25,2657,2659],{"className":2658},[159,160,161,162],[25,2660,982],{"className":2661},[124,128,162],[25,2663,171],{"className":2664},[170],[25,2666,2668],{"className":2667},[142],[25,2669,2671],{"className":2670,"style":178},[146],[25,2672],{}," and ",[25,2675,2677,2695],{"className":2676},[28],[25,2678,2680],{"className":2679},[32],[34,2681,2682],{"xmlns":36},[38,2683,2684,2692],{},[41,2685,2686],{},[44,2687,2688,2690],{},[47,2689,1668],{},[47,2691,1012],{},[104,2693,2694],{"encoding":106},"f_y",[25,2696,2698],{"className":2697,"ariaHidden":70},[111],[25,2699,2701,2705],{"className":2700},[115],[25,2702],{"className":2703,"style":2704},[119],"height:0.9805em;vertical-align:-0.2861em;",[25,2706,2708,2711],{"className":2707},[124],[25,2709,1668],{"className":2710,"style":2035},[124,128],[25,2712,2714],{"className":2713},[133],[25,2715,2717,2737],{"className":2716},[137,138],[25,2718,2720,2734],{"className":2719},[142],[25,2721,2723],{"className":2722,"style":147},[146],[25,2724,2725,2728],{"style":2050},[25,2726],{"className":2727,"style":155},[154],[25,2729,2731],{"className":2730},[159,160,161,162],[25,2732,1012],{"className":2733,"style":1263},[124,128,162],[25,2735,171],{"className":2736},[170],[25,2738,2740],{"className":2739},[142],[25,2741,2743],{"className":2742,"style":2179},[146],[25,2744],{}," are measured in pixels. The principal point ",[25,2747,2749,2779],{"className":2748},[28],[25,2750,2752],{"className":2751},[32],[34,2753,2754],{"xmlns":36},[38,2755,2756,2776],{},[41,2757,2758,2760,2766,2768,2774],{},[54,2759,60],{"stretchy":59},[44,2761,2762,2764],{},[47,2763,409],{},[47,2765,982],{},[54,2767,71],{"separator":70},[44,2769,2770,2772],{},[47,2771,409],{},[47,2773,1012],{},[54,2775,99],{"stretchy":59},[104,2777,2778],{"encoding":106},"(c_x, c_y)",[25,2780,2782],{"className":2781,"ariaHidden":70},[111],[25,2783,2785,2789,2792,2832,2835,2838,2878],{"className":2784},[115],[25,2786],{"className":2787,"style":2788},[119],"height:1.0361em;vertical-align:-0.2861em;",[25,2790,60],{"className":2791},[203],[25,2793,2795,2798],{"className":2794},[124],[25,2796,409],{"className":2797},[124,128],[25,2799,2801],{"className":2800},[133],[25,2802,2804,2824],{"className":2803},[137,138],[25,2805,2807,2821],{"className":2806},[142],[25,2808,2810],{"className":2809,"style":147},[146],[25,2811,2812,2815],{"style":1066},[25,2813],{"className":2814,"style":155},[154],[25,2816,2818],{"className":2817},[159,160,161,162],[25,2819,982],{"className":2820},[124,128,162],[25,2822,171],{"className":2823},[170],[25,2825,2827],{"className":2826},[142],[25,2828,2830],{"className":2829,"style":178},[146],[25,2831],{},[25,2833,71],{"className":2834},[249],[25,2836],{"className":2837,"style":253},[184],[25,2839,2841,2844],{"className":2840},[124],[25,2842,409],{"className":2843},[124,128],[25,2845,2847],{"className":2846},[133],[25,2848,2850,2870],{"className":2849},[137,138],[25,2851,2853,2867],{"className":2852},[142],[25,2854,2856],{"className":2855,"style":147},[146],[25,2857,2858,2861],{"style":1066},[25,2859],{"className":2860,"style":155},[154],[25,2862,2864],{"className":2863},[159,160,161,162],[25,2865,1012],{"className":2866,"style":1263},[124,128,162],[25,2868,171],{"className":2869},[170],[25,2871,2873],{"className":2872},[142],[25,2874,2876],{"className":2875,"style":2179},[146],[25,2877],{},[25,2879,99],{"className":2880},[356]," describes where the optical axis meets the sensor. The skew ",[25,2883,2885,2898],{"className":2884},[28],[25,2886,2888],{"className":2887},[32],[34,2889,2890],{"xmlns":36},[38,2891,2892,2896],{},[41,2893,2894],{},[47,2895,1677],{},[104,2897,1677],{"encoding":106},[25,2899,2901],{"className":2900,"ariaHidden":70},[111],[25,2902,2904,2908],{"className":2903},[115],[25,2905],{"className":2906,"style":2907},[119],"height:0.4306em;",[25,2909,1677],{"className":2910},[124,128]," is usually set to zero for modern sensors, but removing it is an assumption rather than an algebraic fact.",[17,2913,2915],{"id":2914},"an-implementation-that-preserves-the-stages","An implementation that preserves the stages",[13,2917,2918],{},"Compact matrix multiplication is convenient in production. During development, keeping the stages visible makes frame mistakes easier to find.",[2920,2921,2926],"pre",{"className":2922,"code":2923,"language":2924,"meta":2925,"style":2925},"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","",[2927,2928,2929,2936,2943,2949,2955,2961,2967,2972,2978,2984,2990],"code",{"__ignoreMap":2925},[25,2930,2933],{"class":2931,"line":2932},"line",1,[25,2934,2935],{},"import numpy as np\n",[25,2937,2939],{"class":2931,"line":2938},2,[25,2940,2942],{"emptyLinePlaceholder":2941},true,"\n",[25,2944,2946],{"class":2931,"line":2945},3,[25,2947,2948],{},"def project(point_world, rotation, translation, intrinsics):\n",[25,2950,2952],{"class":2931,"line":2951},4,[25,2953,2954],{},"    point_camera = rotation @ point_world + translation\n",[25,2956,2958],{"class":2931,"line":2957},5,[25,2959,2960],{},"    if point_camera[2] \u003C= 0:\n",[25,2962,2964],{"class":2931,"line":2963},6,[25,2965,2966],{},"        raise ValueError(\"point lies on or behind the camera plane\")\n",[25,2968,2970],{"class":2931,"line":2969},7,[25,2971,2942],{"emptyLinePlaceholder":2941},[25,2973,2975],{"class":2931,"line":2974},8,[25,2976,2977],{},"    normalized = point_camera[:2] \u002F point_camera[2]\n",[25,2979,2981],{"class":2931,"line":2980},9,[25,2982,2983],{},"    homogeneous = np.array([normalized[0], normalized[1], 1.0])\n",[25,2985,2987],{"class":2931,"line":2986},10,[25,2988,2989],{},"    pixel = intrinsics @ homogeneous\n",[25,2991,2993],{"class":2931,"line":2992},11,[25,2994,2995],{},"    return pixel[:2]\n",[13,2997,2998],{},"The explicit depth check matters. Algebra alone will happily project a point behind the camera into a plausible pixel coordinate.",[17,3000,3002],{"id":3001},"what-the-matrix-leaves-out","What the matrix leaves out",[13,3004,3005],{},"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.",[13,3007,3008],{},"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.",[17,3010,3012],{"id":3011},"further-reading","Further reading",[3014,3015,3016,3024,3030],"ul",{},[3017,3018,3019,3020,455],"li",{},"Richard Hartley and Andrew Zisserman, ",[3021,3022,3023],"em",{},"Multiple View Geometry in Computer Vision",[3017,3025,3026,3027,455],{},"Richard Szeliski, ",[3021,3028,3029],{},"Computer Vision: Algorithms and Applications",[3017,3031,3032],{},"The related notebook entry records a coordinate-normalization error that initially looked like poor calibration.",[3034,3035,3036],"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":2925,"searchDepth":2945,"depth":2945,"links":3038},[3039,3040,3041,3042,3043],{"id":19,"depth":2938,"text":20},{"id":1594,"depth":2938,"text":1595},{"id":2914,"depth":2938,"text":2915},{"id":3001,"depth":2938,"text":3002},{"id":3011,"depth":2938,"text":3012},"https:\u002F\u002Fjournal.aruodore.com\u002Fblog\u002Fgeometry-of-image-formation",null,"md","exposition",[2924],[3050,3051,3052],"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.",[3054],"The pinhole model does not describe lens distortion or rolling shutter.",{},"2026-08-04","\u002Fblog\u002Fgeometry-of-image-formation",[3059],"vision-geometry",[3061],{"type":3062,"target":3063},"develops","notebook:2026:normalizing-camera-coordinates",{"title":5,"description":15},"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.",[3069,3070],"camera-models","projection",[3072],"opencv",[3074,3075],"computer-vision","geometry","1.0.0","0hdpn3sCElEQouNtGightW4-Y2dI23RYj954bwdsh70",1785815463852]