Give the image
a different perspective.

Turn a plane, pull a corner, look along an edge. CONV carries one continuous image through the whole transformation, with its source currents admitted before the perspective changes.

Preparing source0%
CONV perspectivePoint synthesis
100%

Fit keeps small images at their original size. Drag the scene to pan.

0%

Drag the scene to pan; drag a blue corner or an edge to change perspective. Edge dragging moves its two corners together. Drag the ↻ handle to rotate the plane; Shift snaps to 15°. Positive angles turn clockwise. The output grows to include every corner without changing the plane’s pixel scale. Zoom magnifies the existing output pixels; it does not change the PNG size. Fit reduces the CONV output with CONV* and keeps small images at 100%. Arrow keys move a focused corner or edge; Shift moves it further. Crossed or collapsed planes are rejected.

EWA · windowed Jinc

Three-lobe Jinc-windowed Jinc, with an oriented footprint derived from the inverse homography and fractional plane coverage. Inspect at 100% or above to compare output pixels.

CONV range
—
Comparison range
—

Ranges are measured before display clipping, in premultiplied RGB units from 0 to 1.

Preparing the source surface…

Admitted current constraints—
Minimum coefficient margin—
Pixel integrationPoint samples

Everything runs on this device. Uploaded images are processed at their original resolution. The test-image size selector applies only to the built-in examples. Source analysis runs once in WebAssembly; larger images need more preparation time and memory. Choose independent base width and height. Output bounds expand by whole pixels to contain the plane, with a limit of 8192 pixels per axis and 16,777,216 pixels total. The resulting PNG dimensions are shown below the size controls. Both sampling modes use the expanded bounds. Corner, edge and rotation dragging use a WebAssembly SIMD point preview with a longest side of 257 pixels; the selected resolution and pixel-area quality finish on release. The source surface stays cached. Transparency is processed in premultiplied sRGB channels. Source pixels and cached controls use Float32 storage, with Float64 construction and evaluation. The displayed current margin includes storage rounding; admission allows a tolerance of 8 × 10⁻⁶.

One surface. One inverse map.

A perspective warp changes both the direction and the spacing of the samples. Repeatedly resizing or shearing intermediate images would also change the data that CONV admits at each pass.

Here, the source is analyzed once. Both factor orders supply a proposal on a global fifth-step lattice. A fixed Bernstein transform turns that proposal into shared quintic patches. Their controls are bounded by the incident source supports, then admitted together against the two-dimensional current cones, within the stated storage tolerance. The four corners change only the map used to read this surface.

At a target point q

W(q) = U(F(q))

Across a target pixel P

B(P) = 1 / |P| ∫P U(F(q)) dq

U is the admitted source potential. F is the inverse homography. No intermediate warped raster enters either expression.

A pixel has an area, too.

Point synthesis evaluates the surface at a single location. When perspective squeezes many source samples into a pixel, the pixel-area mode instead integrates its footprint. The footprint is clipped at source-cell boundaries so each piece belongs to one polynomial patch. Axis-aligned affine maps use exact integrated Bernstein weights; other affine maps use a 25-node triangle rule, exact through total degree ten in real arithmetic. Area integration compiles a two-dimensional bank of footprint weights, then applies it to all channels in WebAssembly SIMD. It reads the same cached controls as point synthesis.

For perspective, the area density has a cubic denominator. Its variation across each triangle selects a fixed quadrature rule with 25 to 55 nodes. Larger variations divide the triangle into four pieces. Every node evaluates the actual rational density; all channels share the resulting footprint weights. The rule and subdivision plan depend only on the warp geometry. The fixed table is checked against the analytic projective integral for all 36 Bernstein weights. Edge pixels include fractional transparent coverage.

The default comparison uses elliptical weighted averaging (EWA) with a three-lobe Jinc-windowed-Jinc radial filter. The inverse homography determines the ellipse at each output pixel; its axes retain their orientation and unequal lengths, with a minimum radius scale of one source sample. All source samples within the filter support contribute, with no mipmap reduction or anisotropy cap. Source colors are edge-extended for filtering and multiplied by the same fractional plane coverage; boundary footprints are evaluated at the covered pixel’s centroid. This is a local elliptical filter, while CONV integrates its surface over the projective pixel basin. The optional Lanczos-3 and bilinear comparisons remain point-sampled.

EWA follows the footprint construction described in ImageMagick’s distortion documentation. Negative Jinc lobes can exceed the source range; the readings above report values before display clipping. At 100% and higher zoom, both results show their output pixels directly. Fit reduces the CONV result with CONV* and the comparison with scale-aware Lanczos.

The CONV* warp addendum derives finite global banks, two-dimensional phase banks, exact projective pixel integrals, and the canonical geometry-selected quadrature with its moment and pixel-accuracy proofs.

What the admission guarantees

The source vertices remain fixed, neighboring patches share complete edges, and the continuous surface stays within its declared source-support ranges. In supports with a proper current cone, the gradient is admitted against that cone. The stored Float32 surface has a small rounding tolerance, reported above as its measured coefficient margin. Perspective transports the current through the map’s spatially varying Jacobian.

These are constraints on the interpolated surface, not a recovery of missing detail. Competing interface directions can widen a support cone until it imposes no directional restriction. The BFFT warp study also measures a smooth-field fidelity cost: Lanczos can have lower mean squared error. This demonstrator exposes both the sharp-edge behavior and the smooth-frequency case rather than claiming a universal image-quality winner.

The engine follows the direct joint-warp appendix and canonical finite_joint_control_nets construction in BFFT. Its factor evaluation and admission use Float64 WebAssembly arithmetic, with Float32 storage for the source and cached controls; the research reference uses native Float32 factors. The source receipt records the reference files and the port checks. Read the CONV paper and resizer for the underlying method.