I've decided to start a new topic for development of a patch/idea I have.
Description
Simple, a script command shift(x,y) or shift (x1,x2,y1,y2,a,b,c,d,e,f,g,h,i) to control the lens stabilization in script (details to be worked out) a-i would be a polynomial of some type for movement.
The second version has to be linked to shutter speed somehow.Use Cases
Shifting while exposing
The main use case is to track stars. By my tests, in one case, a star moves 1 pixel every two seconds. If the lens could shift the image 20 pixels, the exposure time could be increased by 10x. Longer exposures with stacking gives the best overall noise reduction.
You could also make enhanced star trails by going in the opposite direction; thus saving a lot of time (that would blur the foreground though)
-Purposeful
known motion blur effect - the use of this can increase dynamic range, I won't go into the idea here.
-Mini light-paintings : hold a small light far away and let the lens draw small patterns with it.
-Special effects: Draw halos around your photo, make artificial star burst patterns, etc. with the controlled motion blur.
Shifting between shots
-You can restart trails between exposures; meaning to catch up with the star position between shoots. You could only do this a few times before reaching max shift. The result would be perfectly continuous trails despite pausing between shots.
-Superresolution stacking (9 shifts to double resolution)
-Mini-mosaic (4 images to increase picture size by say, 10% automatically, increasing FOV).
-3d pictures, though the shift may be too small to be much use with a single camera. With two cameras, you can make them converge to one variable point, with the ease of keeping the cameras mounted perfectly parallel. I think this may already be in SDM.
Shifting while not exposing
-To preview various effects in live view; for tweaking star tracking movement etc.
Requirements
-Programatic control of shift. It has to work without touching the camera, for star tracking use
-Determination of maximum shift values
-Setting of the shift
-Able to change shift
while exposing, for star tracking use. Other uses can be set before the shot. It can be linear, better yet a polynomial function with a specified update rate
-Speed of change : update rate of about 1 second for star tracking, as fast as possible for special effects uses.
-Add motion on top of normal stabilization, this could add special effects to stabilized shots. Would trade off amount of effect for stabilization performance.
Benefits
This could replace a $200 tracking mount or barn door tracker setup and fancy tripod. It could increase perfect exposure time 10x or more, easily. Stars would still have to be stacked and aligned - the movement would be in big jumps, while each picture is micro-tracked.
The ultimate vision
A script that takes 3 pics, tracks some stars near the center (to avoid dealing with lens distortion), fits to a transformation matrix, calculates start and end shift values, then supplies the evaluation parameters, then calculate max exposure time.
Limitations
While you can follow the stars you can't rotate the sensor; there could be a slight rotation during exposure, which would blur planets. But since this is an exactly known blur, it could be decovolved.
Supporting Functions
-A way to read the image you just took, so you can track stars
Steps Needed
-Find rom routine for raw IS control, submit patch
-Test max range of values
-Think of some way to update while exposing; actually just starting one background task to do movement until it's done; and optional link to synchronize with starting an exposure
-Work out polynomial function for update
-Test update speed
-Is this a 2 axis tilt, or is it like rotating at the end of a sphere?
The rest is just putting the functions to use in a script.
Finally my idea about dynamic range increasing: by using purposeful motion blur, you can spread highlights across pixels, and deconvolve it out after to recover HDR. This is done in about 1/20s so it's much faster than bracketing. Would be ideal to add this on top of existing stabilization.
An initial build has already been made; see below.