The following lists the known algorithms, and where they are known to apply.
If Value 7 = 0 then there are no correction values to apply (values 2 - 9 are also 0).
This applies for several primes and also for some longer lenses at their long end.
It's recognised as a separate algorithm so users can force zero correction, or turn auto-correction off for some lenses.
This is Raphael Rigo's original algortihm.
dS = 1.0/(1.0+(v5/32768.0)
a = dS * (v11/32768.0)
b = dS *
(v4/32768.0)
c = dS * (v8/32768.0)
It's not clear which lenses this works for.
dS = 1.0/(1.0+(v5/32768.0)
a = dS * (v11/32768.0)
b = dS *
(v2/32768.0)
c = dS * (v8/32768.0)
Works for Olympus 9-18mm
dS = 1.0/(1.0+(v5/32768.0)
a = dS * (v11/32768.0)
b = dS *
(v4/32768.0)
c = dS * (v9/32768.0)
Works for Panasonic 45-175mm PZ
dS = 1.0/(1.0+(v5/32768.0)
a = dS * (v11/32768.0)
b = dS *
((v2+v4)/32768.0)
c = dS * (v9/32768.0)
This is a reasonable approximation, but not perfect, for the Panasonic 14-42mm PZ.
Algorithms can now be encoded in an XML file which will make experimentation much easier. This is what the standard file looks like. References such as [v5] will be substituted with the item 5 of the standard geometric correction data (remembering that it's a zero-based array), and references such as [c5] are substituted by the relevant item from the CA correction data block:
<?xml version="1.0" ?>
<Algorithms>
<Algorithm Name="Model 1"
Description="Raphael's Original Model">
<Rule Target="a"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v11]/32768.0)"/>
<Rule
Target="b" Expression="(1.0/(1.0+([v5]/32768.0)))*([v4]/32768.0)"/>
<Rule Target="c"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v8]/32768.0)"/>
</Algorithm>
<Algorithm Name="Model 2" Description="Olympus Model?">
<Rule
Target="a" Expression="(1.0/(1.0+([v5]/32768.0)))*([v11]/32768.0)"/>
<Rule Target="b"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v2]/32768.0)"/>
<Rule
Target="c" Expression="(1.0/(1.0+([v5]/32768.0)))*([v8]/32768.0)"/>
</Algorithm>
<Algorithm Name="Model 3" Description="Panasonic
45-175mm">
<Rule Target="a"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v11]/32768.0)"/>
<Rule
Target="b" Expression="(1.0/(1.0+([v5]/32768.0)))*([v4]/32768.0)"/>
<Rule Target="c"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v9]/32768.0)"/>
</Algorithm>
<Algorithm Name="Model 4" Description="Panasonic 14-42?">
<Rule
Target="a" Expression="(1.0/(1.0+([v5]/32768.0)))*([v11]/32768.0)"/>
<Rule Target="b"
Expression="(1.0/(1.0+([v5]/32768.0)))*(([v2]/32768.0)+([v4]/32768.0))"/>
<Rule Target="c"
Expression="(1.0/(1.0+([v5]/32768.0)))*([v9]/32768.0)"/>
</Algorithm>
</Algorithms>