Images of the World from Andrew Johnston

Micro Four Thirds Lens Correction Algorithms

The following lists the known algorithms, and where they are known to apply.

Model 0

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.

Model 1

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.

Model 2

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

Model 3

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

Model 4

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.

The CAQuestMFT.xml File

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>