Surfaces that are not flat

The pivot that is not the eye

A camera bolted to a tripod turns about the screw under its baseplate, and the light crosses somewhere else. Every ray of the panorama that results passes the pivot by e sin γ — the offset times the sine of how far off its own frame's axis the ray points — so the picture has a radius where a projection would have a point.

Worth reading first: What a 360-degree photograph actually is · The cylinder, and the price of going all the way round · The eye is a place, not a point.

Every panorama in this field so far has been a surface. The cylinder is a map from a direction to a mark; so is the equirectangular rectangle, and so are the four others this collection carries. Each of them is a perfectly good picture surface and each of them quietly assumes the thing this essay is about, which is that all those directions were taken from one place.

An instrument does not oblige. A camera is bolted to a tripod by the screw under its baseplate, and the light crosses the lens somewhere in front of that. Turn the camera and the pupil goes round a small circle.

A panorama pivoted 60 mm behind its own pupilLooking down on 6 frames taken by turning a camera about a point 60 mm from where the light actually crosses. The small circle is the path the entrance pupil takes; the heavy rays are each frame's own axis and they pass through the pivot exactly; the lighter rays are the edges of the strip each frame contributes, and they miss it by e·sin γ — 30.0 mm at 30.0° off axis. Every ray the stitch uses is tangent to a circle of that radius, drawn here, so the picture has a radius where a projection would have a point. The rays of the whole strip, top of frame to bottom, miss their own least-squares centre by 24.98 mm.the pivottangent circle, 30.0 mmno single viewpoint — the rays miss by 24.98 mm6 frames · pivot 60 mm off
Fig. 1 Six frames, from above. The small dotted circle is where the entrance pupil actually was for each frame. The heavy rays are each frame’s own optical axis and they pass through the pivot exactly; the lighter ones are the edges of the strip that frame contributes, and they do not.

One line of geometry, and it is exact

Put the pivot at the origin and the entrance pupil a distance ee in front of it, along the optical axis. A ray leaving the pupil at an angle γ\gamma from that axis is the line through ef^e\hat{f} in the direction d^\hat{d}, and its distance from the pivot is a cross product:

miss(γ)  =  ef^×d^  =  esinγ\text{miss}(\gamma) \;=\; \left| e\,\hat{f} \times \hat{d} \right| \;=\; e \sin\gamma

That is the whole of it. Nothing else is in it — not the scene, not the distance to anything, not the focal length, not which way the camera is pointing.

The miss is e sin γ, and nothing else is in itThe perpendicular distance from the pivot to a ray, against how far off its own frame's axis that ray points, for a pupil 60 mm in front of the pivot. The curve is e·sin γ and the marks are the perpendicular distance measured from the actual line, at arbitrary headings; the two agree to 1.4e-14 mm over the sweep. Neither the scene nor the distance to anything appears in it. The two marked angles are the ones a stitch actually uses: half a frame spacing across, at 30.0°, which the frame count controls, and half the frame's height, at 19.0°, which it does not.0204060020406080angle off the frame's own axis, γ (degrees)distance from the pivot (mm)across: 36.2 mmup: 23.6 mmpivot 73 mm off the pupiltwo routes agree to 1.4e-14 mm
Fig. 2 The formula against the perpendicular distance measured from the actual line, at arbitrary headings. Two routes, and they agree at the arithmetic floor across the whole quarter-turn.

The two routes matter because the site’s habit is that a figure quoting only algebra is quoting algebra. missAt writes esinγe\sin\gamma down; measuredMiss builds the ray and drops a perpendicular onto it from the pivot. They are not the same computation and they have to give the same number.

Three consequences fall straight out and each of them is a surprise the first time.

The centre column of every frame is exact

At γ=0\gamma = 0 the miss is zero. A ray along a frame’s own optical axis leaves the pupil at ef^e\hat{f} and travels along f^\hat{f}, so it is the radial line through the pivot. It passes through the pivot exactly, and it does so whatever ee is.

So a panorama assembled from infinitely narrow strips — one column of pixels per frame, taken at the centre of each — is a genuine central projection. Not approximately: exactly. And its centre is the pivot, which is a point where no lens has ever been.

Narrow the strips and the rays close on the pivotThe same solver the refraction and scroll fields use, run on a stitched panorama's own rays: how far they pass from their least-squares common point, against the number of frames the panorama was made from. At 6 frames it is 24.98 mm and the picture is a projection of nothing from anywhere; at four hundred it is 13.855 mm and the point it closes on is the pivot — 60 mm from where the lens was. With the pivot at the pupil the same fit lands at 0.0e+0 m, which is the control that makes the rest of these numbers mean anything. The curve does not go to zero, and the reason is the next figure.02040600.50011.5022.50frames in the panorama (log₁₀)the rays' miss from their centre (mm)6 framespivot 75 mm off the pupilcontrol at the pupil: 0.0e+0 m
Fig. 3 The fit the refraction and scroll fields use on the same kind of failure, run on a stitch’s own rays: how far they pass from their least-squares common point, against the number of frames. It falls, and the point it falls toward is the pivot rather than the pupil.

That is a strange thing to be true. The photographer’s error is measured in millimetres of hardware, and the picture it produces — if the strips are narrow enough — is a correct picture from a place six centimetres behind the glass.

It is also the reason the offset is not fatal by nature. A defect that vanishes in a limit is a defect with a price on it, and the rest of the field is about what that price is.

Curving straight lines and having no centre are two different thingsThe rms miss of the best single centre, for two cameras that both draw straight world lines as curves. A rotating eye keeps its centre exactly — 2e-15 m, which is the solver's noise floor. A translating eye has none: 7.97 m over 27 m of track. A panorama is a projection and a scroll is not, and no amount of looking at the curves tells them apart.a rotating eye — the panorama2e-15 ma projectiona translating eye — the scroll7.97 mnot oneboth of these draw a straight world line as a curverms miss of the least-squares centreone of them is a projection
Fig. 4 The distinction this rests on. A rotating eye keeps its centre however far it turns, which is what makes a spherical panorama one projection rather than a mosaic — and what fails the moment the rotation is about the wrong point.

The rays are tangent to a circle, so the picture has a radius

For a strip of finite width the rays do not meet. Every one of them passes the pivot at esinγe\sin\gamma, and the family of them is tangent to a sphere of that radius. Draw the horizon row alone and it is a circle; take the whole strip and it is a sphere.

That is the honest replacement for a centre of projection. A perspective picture is a projection from a point. A panorama stitched from a camera on the wrong pivot is a projection from a ball, and its radius is a number the arrangement fixes.

A panorama pivoted 100 mm behind its own pupilLooking down on 6 frames taken by turning a camera about a point 100 mm from where the light actually crosses. The small circle is the path the entrance pupil takes; the heavy rays are each frame's own axis and they pass through the pivot exactly; the lighter rays are the edges of the strip each frame contributes, and they miss it by e·sin γ — 50.0 mm at 30.0° off axis. Every ray the stitch uses is tangent to a circle of that radius, drawn here, so the picture has a radius where a projection would have a point. The rays of the whole strip, top of frame to bottom, miss their own least-squares centre by 41.63 mm.the pivottangent circle, 50.0 mmno single viewpoint — the rays miss by 41.63 mm6 frames · pivot 100 mm off
Fig. 5 A larger offset. The tangent circle grows in proportion, because the sine has already been taken and what is left is a multiplication.

The rest of this site has met the same shape of failure four times, and it is worth putting the five side by side because they are not variations of one thing.

A picture through water has no centre because the medium bends the light. A scroll has none because the eye travels. A curved mirror has none because the reflector turns with position. A picture with two eyes in it has none because it was drawn from two on purpose. This one has none because the instrument was screwed to its mount in the ordinary way.

The rays of a refracted picture, continued into the waterEvery ray leaves the pinhole, bends at the surface and carries on. Fitted to a common point they miss it by 22.7 mm — the circle is that miss drawn at the figure's own scale. With the water removed the same fit misses by 0e+0 m.the water surfacethe pinholethe rays miss by 22.7 mmno single viewpoint — the rays miss by 22.7 mmdry control: 0e+0 m
Fig. 6 The first of the four, and the same solver: rays continued into water, missing their own least-squares centre by millimetres of the world.
The rays of 17 m of scroll, and the point they miss by 5.44 mPlan of one section. Each ray leaves the eye at its own column, so the eyes lie along a track rather than at a point. The circle is the least-squares centre drawn at the radius of its own miss — 5.44 m, which the closed form puts at 5.44 m, the standard deviation of a track that long. A single column of the same scroll fits exactly.the best point, missed by 5.44 m17 m of the eye's trackno single viewpoint — the rays miss by 5.44 mthe eyes are a track, not a point
Fig. 7 And the second: a translating eye, whose miss is the standard deviation of its own track. The panorama’s miss has a closed form instead, which is the difference between an eye that wanders and an instrument that is bolted to something.

The ghost a reader can actually see

None of the above is visible in a photograph. What is visible is the seam: the place where two frames were joined, where a railing appears twice and a lamp-post has a kink in it.

A stitcher registers frames on their far field, which is what a homography through four points at infinity does. That registration is exact for anything at infinity and wrong for everything else, because the two frames were taken from two places. The residual is a parallax.

The ghost falls as one over the distance, which is what parallax doesThe seam's doubling in pixels of a 8,000-pixel panorama stitched from 6 frames, against how far away the object is, with the pivot 60 mm off the pupil. At 0.8 m it is 102 px and at 32 m it is 2.4 px. The second curve is the product of the two, which stays inside a factor of 1.067 across a forty-fold change of distance — and that flatness is the whole diagnosis. A misregistration that did not fall off with distance would be a calibration error; one that falls as 1/D is two eyes in different places.025507510000.50011.50distance to the object being stitched (log₁₀ metres)ghost (px), and ghost × distance ÷ 4ghost × distance6 frames · pivot 60 mm offproduct flat to 1.067
Fig. 8 The doubling at the seam, against how far away the thing being drawn twice is, and beside it the product of the two. The product is flat, which is the diagnosis.

The flatness of that second curve is the whole argument. A misregistration that did not fall off with distance would be a calibration error — a lens whose focal length was wrong, a rotation that was mismeasured. One that falls as 1/D1/D is two eyes in different places, and there is nothing else it can be.

This is the same instrument the lens field uses on a plumb line: a residual is not a number, it is a shape, and the shape says which model is missing.

Two frames stitched on the sky, with the pivot 100 mm behind the pupilThe far field registers to 2e-13 px, which is what makes the stitch look correct. The near field does not: the nearest post lands 6.4 px from where the other frame put it and the furthest 0.62 px, an error falling as 1/distance — the signature of a parallax rather than a calibration error.the far field — where the stitch was fitted2.2 m — 6.4 px out24 m — 0.6 px outthe sky registers to 2e-13 pxthe foreground does not — up to 6.4 px
Fig. 9 The pair of frames the ghost comes out of, registered on the sky and asked about the foreground. With the pivot on the pupil the near field registers too, at every distance.

What the strip width buys

The seam sits half a frame-spacing from each frame’s axis. Stitch nn frames evenly round a turn and each contributes the strip απ/n|\alpha| \le \pi/n, so the worst horizontal miss is

esin(π/n)e \sin(\pi/n)

and it halves when the frame count doubles. The photographer who shoots more frames is buying exactly this.

More frames, less ghost — and it never reaches zeroThe doubling at the seam, in pixels of a 8,000-pixel panorama, for an object 3 m away and a pivot 60 mm off the pupil. Two frames give 51 px and thirty-six give 4.5 px: the baseline between adjacent pupils is 2 e sin(π/n), so halving the frame spacing halves the ghost. This is the half of the parallax a photographer can buy off by shooting more, and it is not the whole of it.0204060102030frames in the panoramaghost at the seam (pixels)75 mm off, at 3 m64 px → 5.7 px
Fig. 10 The ghost against the number of frames, at a fixed distance and a fixed pivot error. The baseline between adjacent pupils is 2e sin(π/n), so the curve is a sine and not a hyperbola — it flattens rather than falling away.

Which raises the obvious question and it has a non-obvious answer. Shoot enough frames and the ghost goes to nothing; so is the whole problem a matter of shooting more? No, and the reason is the other angle in γ\gamma. That is the next rung and it is the part of this that nobody says out loud.

One half falls away and the other does not moveThe worst miss across the seam and the worst miss at the top of the frame, against the number of frames, for a pivot 60 mm off the pupil and a frame 38° tall. The first is e·sin(π/n) and falls from 60.0 mm to 2.9 mm; the second is e·sin(β) and is 19.53 mm at every count, bit for bit. They cross at π/β = 9.47, so past 10 frames every remaining pixel of parallax is vertical and no further shooting touches it. The upper curve is the corner of the strip, which is what a reader actually gets.0204060204060frames in the panoramadistance from the pivot (mm)π/β = 9.5across the seamup the framepivot 60 mm · frame 38° tallfloor 19.53 mm
Fig. 11 The answer, ahead of its own essay. One of these curves falls away as the frames multiply and the other is the same number at every count.

Why the miss is a sine and not a distance

It is worth pausing on the form of the law, because it is the reason the whole thing is tractable.

The miss does not depend on how far away anything is. It is a property of the ray, not of what the ray hits, so it can be computed before a scene exists — and it can be quoted as a length in the room rather than as a disagreement about a photograph. That is the same move the refraction field makes when it reports millimetres of world rather than pixels of picture: a picture-space residual mixes the defect with the focal length, and a world-space one does not.

It also means the offset and the angle are separable. Doubling ee doubles every miss; changing the strip width changes the sine and nothing else. Two knobs, one product, and neither of them is the scene.

Two frames stitched on the sky, with the pivot 40 mm behind the pupilThe far field registers to 1e-13 px, which is what makes the stitch look correct. The near field does not: the nearest post lands 2.6 px from where the other frame put it and the furthest 0.25 px, an error falling as 1/distance — the signature of a parallax rather than a calibration error.the far field — where the stitch was fitted2.2 m — 2.6 px out24 m — 0.2 px outthe sky registers to 1e-13 pxthe foreground does not — up to 2.6 px
Fig. 12 The condition on “one eye”, drawn as the two frames a stitch actually registers. Where the entrance pupil is at all is itself an idealisation — a lens has an aperture of some size and the pupil is its image — which is what the lens field has to price before this one can quote an offset.

The two circles are not the same circle

The plan view has two circles in it and they are worth separating, because conflating them is the natural mistake.

The pupil circle has radius ee. It is where the lens actually went, and it is the hardware error: sixty millimetres of rail, measured with a ruler on a workbench.

The tangent circle has radius esin(π/n)e\sin(\pi/n). It is what the picture has instead of a centre, and it is smaller — by the sine of half a frame spacing, which at six frames is a half. So the defect in the picture is not the defect in the mounting; it is the mounting’s error multiplied by a number the photographer chose when deciding how many frames to shoot.

A panorama pivoted 60 mm behind its own pupilLooking down on 12 frames taken by turning a camera about a point 60 mm from where the light actually crosses. The small circle is the path the entrance pupil takes; the heavy rays are each frame's own axis and they pass through the pivot exactly; the lighter rays are the edges of the strip each frame contributes, and they miss it by e·sin γ — 15.5 mm at 15.0° off axis. Every ray the stitch uses is tangent to a circle of that radius, drawn here, so the picture has a radius where a projection would have a point. The rays of the whole strip, top of frame to bottom, miss their own least-squares centre by 17.50 mm.the pivottangent circle, 15.5 mmno single viewpoint — the rays miss by 17.50 mm12 frames · pivot 60 mm off
Fig. 13 Twelve frames instead of six. The pupil circle is unchanged, because the hardware has not moved; the tangent circle has halved, because each frame now contributes half as much angle.

That separation is the useful one. A reader with a photograph and a complaint wants to know which of the two to change, and the answer is that they multiply — so halving either halves the result, and the cheaper one to halve is usually the count.

What a stitcher could do instead, and what it would need

The obvious repair is to stop registering on the far field and register on the scene: warp each frame by a map that depends on how far away each piece of it is, so that near things line up too.

That works, and the reason it is not what stitching software does is instructive. The map is a function of depth, and a pair of photographs from two places does not carry depth for nothing — it has to be recovered, from correspondences, with all the machinery the two-view field sets out and all the failures it prices. A stitcher that did this would be a stereo reconstruction with a panorama on the end of it.

So the far-field registration is not laziness. It is the choice to make a picture out of an assumption that is exactly true for everything at infinity and false by a computable amount for everything else — and the computable amount is what this essay is.

Two rays, 5.07 mm apart, in the plane that contains bothThe ray from the left eye through its mark and the ray from the right eye through its. With the marks placed exactly they meet, to 1.9e-15 m. With the same marks read to 1 px they miss by 5.07 mm at a range of 7.19 m. Triangulation is not an intersection; the reported point is a choice about what to minimise, and the gap is the part a residual alone will not tell you.midpoint — 5.07 mm gapfrom the left eyefrom the right eyegap 5.07 mm at 7.19 mexact marks: 1.9e-15 m
Fig. 14 What the alternative would cost. Two rays from two places meet at a point only when the match between them is right, and a match that is wrong is not a small error.

The refusal, and what it protects

A panorama needs at least two frames, and stitchMiss refuses one. That looks like housekeeping and is not quite: the single-frame case is a perfectly good photograph with a perfectly good centre — its own pupil — and calling it a panorama with a pivot error would be attaching a defect to a picture that does not have one.

The distinction the refusal enforces is that the offset only becomes a defect when frames are combined. One frame from a badly-mounted camera is exact. Two are not, and the amount by which they are not is a property of the join rather than of either.

A print, photographed again — flat and rolledFour marks fix a homography; the other 16 are predicted by it. On a flat print they land where it says to 1e-13 px. Rolled to 1/R = 1.46 per metre the same four predict the same 16 to 49.1 px, because a composition of projections is a projection only if the middle surface is a plane.an anchorcorrect from 19 cm, at 160 mm wideflat 1e-13 px · rolled 49.1 px
Fig. 15 The general rule this is a case of: a projection of a projection is a projection. It holds when the second projection has a centre, and a stitch of two frames from two places is where it stops.

The control, which is the whole reason the numbers mean anything

Set the offset to zero and every ray of every frame passes through the pivot exactly. The least-squares fit lands on it at the arithmetic floor — not small, zero — and the tangent circle has no radius because there is nothing for it to be tangent to.

A panorama pivoted 0 mm behind its own pupilLooking down on 6 frames taken by turning a camera about a point 0 mm from where the light actually crosses. The small circle is the path the entrance pupil takes; the heavy rays are each frame's own axis and they pass through the pivot exactly; the lighter rays are the edges of the strip each frame contributes, and they miss it by e·sin γ — 0.0 mm at 30.0° off axis. Every ray the stitch uses is tangent to a circle of that radius, drawn here, so the picture has a radius where a projection would have a point. The rays of the whole strip, top of frame to bottom, miss their own least-squares centre by 0.00 mm.the pivottangent circle, 0.0 mmthe rays meet at the pivot, exactlywhich is what a pivot on the pupil buys
Fig. 16 The control. With the pivot at the entrance pupil the same generator draws a bundle that meets, and prints so instead of the strip that says it has nowhere.

That figure is worth looking at twice, because it is the one place on this site where the no-viewpoint strip and the viewing-distance strip are drawn by the same generator at two ends of one slider. The exemption belongs to the configuration rather than to the name — which is how the rolling shutter and the curved mirror are treated, and for the same reason.

The tripod rail, priced

The practical form of all this is a rail: a bracket that slides the camera back over its mount until the pupil sits on the axis. Panoramic heads have had one for a century and the instructions never say what it is worth.

It is worth esinγe\sin\gamma, and that is a length in the room. At six centimetres of error and six frames the strip’s edges miss the pivot by three centimetres; the whole bundle, top of frame to bottom, misses its own best point by two and a half. Whether that matters is a question about the scene — a landscape at a hundred metres does not care, a table two metres away does — and the useful thing is that the scene enters only at the last step, through a division.

The ghost falls as one over the distance, which is what parallax doesThe seam's doubling in pixels of a 8,000-pixel panorama stitched from 6 frames, against how far away the object is, with the pivot 20 mm off the pupil. At 0.8 m it is 33 px and at 32 m it is 0.8 px. The second curve is the product of the two, which stays inside a factor of 1.022 across a forty-fold change of distance — and that flatness is the whole diagnosis. A misregistration that did not fall off with distance would be a calibration error; one that falls as 1/D is two eyes in different places.010203000.50011.50distance to the object being stitched (log₁₀ metres)ghost (px), and ghost × distance ÷ 4ghost × distance6 frames · pivot 20 mm offproduct flat to 1.022
Fig. 17 A smaller error, still visible. The rail is a linear adjustment and the ghost is linear in it, so half the rail is half the ghost.
Depth from disparity, with the 1 px the reading is worthZ = fB/d on a 90 mm baseline at 900 px. The line is exact — it returns the camera's own depth to 8e-13 m. The band is what 1 px of disparity error costs, and it stops being a ±. At 6.5 m it runs 6.03–7.08 m, lopsided by 1.17, and the textbook ±Z²δ/fB is 0.6% out. At 40 m it runs 26.8–79.0 m — 39.0 m beyond the estimate against 13.2 m before it, a lopsidedness of 2.95 — and the same formula is 24% out. Past 81.0 m the far edge is infinity.02040608010203040true depth (m)depth reported from the disparity, with a 1 px reading error6.03–7.08 m14.95–23.69 m26.78–79.02 mat 40 m: +39.0 m against −13.2 munbounded past 81.0 m
Fig. 18 And the reason the division is the last step rather than the first: disparity is reciprocal in depth, so a fixed offset costs a great deal near and almost nothing far.

What this does not say

It does not say a stitched panorama is not a picture. It is a picture; it is not a projection, which is a narrower claim and is the one this site makes about everything.

It does not say the offset is the largest error in a panorama. The lens is usually larger, and the lens field measures it; so is the assumption that the rotation was about a fixed axis at all.

And it does not say the pivot is a good centre of projection to use. It is the centre, in the narrow-strip limit, and a reader wanting the picture’s viewing distance should take it from there. But the strips are not narrow, and how far from narrow they are is the subject of the next rung.

A defect that vanishes in a limit has a price rather than a verdict. Find the limit first, then measure how far the instrument is from it — the two numbers together are a design, and either one alone is a complaint.

The limit here is a slit, and the instrument that actually takes it is a real camera with a real name. That one has no parallax at all and pays for it somewhere else entirely, which is two rungs along.

A swing-lens camera is the cylinder, exactlyThe instrument in plan: the entrance pupil at the centre, film bent into a circle of radius R about it, and a slit that sweeps with the lens. A ray from a subject at 34° of azimuth passes through the pupil and strikes the film half a turn away, at the marked point. Unrolling the film and undoing the pinhole's inversion gives a mark at azimuth 0.593412 in units of R — and lib/surfaces.js's cylinder, which is defined from a direction and has never been shown an instrument, puts it at 0.593412. The two agree to 1.1e-16 of a focal length over 861 directions, so this camera does not approximate a named picture surface; it is one.the pupil, and the pivotsubject at 34°the filmcorrect from 15 cm, at 160 mm wideagrees with the cylinder to 1.1e-16
Fig. 19 The instrument that turns about its own pupil, and puts its picture on film bent into a circle concentric with it. It has the centre this one does not, exactly.
One room at 200° across, cast onto six picture surfacesEach panel holds the same angular width of the same scene. The flat plane keeps every straight line straight and cannot hold this field of view at all; the five curved surfaces bend the ground lines by 3.5% to 6.0% of their own length.no picture at 200°the plane is unbounded at 180°plane — bend 0.0%cylinder — bend 6.0%stereographic — bend 3.5%equidistant — bend 4.5%equal-area — bend 5.1%equirect. — bend 5.7%200° across in every panelsame scene, same angle, six surfaces
Fig. 20 And the surfaces this whole field is about, at two hundred degrees across. Every one of them assumes what the pivot error breaks: that all the directions were taken from one place.
A scroll in plan: the eye travels, and images one line at a timeThe eye runs along the track at the bottom. Each position images the single vertical plane it is level with, so a world point is drawn by exactly one position of the eye — the one at its own x. The paper advances 26 px for every metre of travel whatever the scene does, which is why the roll is a map along its length.the eye's trackthe eye at x = 2.1 mevery point is drawn by the one position of the eye that is level with itplan — the eye's track and the scans it makes28 m of travel
Fig. 21 The other instrument whose centre is a construction rather than a point, in plan. A scroll’s eye travels along a track; a badly-mounted camera’s goes round a circle, and the two misses are measured by the same solver.

What links here

Computed from the collection, not written here: the essays that point at this one.

Reads more easily once this is understood

Essays that name this one as worth reading first.

Shares its objects with

Essays that name at least two of the same things, and that neither author linked.

Named objects

A flat tag is an object no other essay names yet.

Causticcentre of projectionCylindrical projectionDemonstrationEntrance pupilleast-squares intersectionPanoramaParallaxPicture surfaceStitching