(uu: Vec2, i: CameraIntrinsics)
| 166 | // tangential/prism: 2D Newton (numeric Jacobian). |
| 167 | |
| 168 | function _fisheyeApplyDistortion(uu: Vec2, i: CameraIntrinsics): Vec2 { |
| 169 | const r2 = uu.x * uu.x + uu.y * uu.y; |
| 170 | const t4 = r2 * r2; |
| 171 | const t6 = t4 * r2; |
| 172 | const t8 = t4 * t4; |
| 173 | const radial = i.k1 * r2 + i.k2 * t4 + i.k3 * t6 + i.k4 * t8; |
| 174 | // Tangential + thin-prism terms vanish exactly when p1=p2=sx1=sy1=0. |
| 175 | const dx = uu.x * radial + 2 * i.p1 * uu.x * uu.y + i.p2 * (r2 + 2 * uu.x * uu.x) + i.sx1 * r2; |
| 176 | const dy = uu.y * radial + i.p1 * (r2 + 2 * uu.y * uu.y) + 2 * i.p2 * uu.x * uu.y + i.sy1 * r2; |
| 177 | return { x: uu.x + dx, y: uu.y + dy }; |
| 178 | } |
| 179 | |
| 180 | /** 2D Newton to solve `_fisheyeApplyDistortion(uu) = p` for `uu` (numeric Jacobian). */ |
| 181 | function _fisheyeRemoveDistortion2D(p: Vec2, i: CameraIntrinsics): Vec2 { |
no outgoing calls
no test coverage detected