A robust TypeScript implementation of homography-based transformation between 2D planes, ideal for computer vision and image mapping
npm install homography-transformPlane class for representing 2D coordinate systems
PlaneTransformer class for computing and applying homography transformations
bash
npm install
`
Usage
Here's a basic example of how to use the library:
`typescript
import { Plane, Point } from './Plane';
import { PlaneTransformer, PointPair } from './PlaneTransformer';
// Create two planes
const sourcePlane = new Plane(1080, 1920); // e.g., mobile screen
const targetPlane = new Plane(640, 480); // e.g., camera image
// Define corresponding points
const pointPairs: PointPair[] = [
{ source: { x: 0, y: 0 }, target: { x: 0, y: 0 } },
{ source: { x: 1080, y: 0 }, target: { x: 640, y: 0 } },
{ source: { x: 0, y: 1920 }, target: { x: 0, y: 480 } },
{ source: { x: 1080, y: 1920 }, target: { x: 640, y: 480 } }
];
// Create transformer
const transformer = new PlaneTransformer(sourcePlane, targetPlane, pointPairs);
// Transform a point
const sourcePoint: Point = { x: 100, y: 200 };
const transformedPoint = transformer.transform(sourcePoint);
// Check transformation error
const error = transformer.getTransformationError();
`
Development
- Build the project: npm run build
- Run tests: npm test
- Run example: npm run example
Implementation Details
The implementation uses the following approach:
1. Computes the homography matrix using SVD (Singular Value Decomposition)
2. Requires at least 4 point correspondences
3. Supports additional points for better accuracy using least squares
4. Validates points are within plane boundaries
5. Provides error metrics for transformation quality
Dependencies
- numeric.js` for matrix operations