﻿ Micro Four Thirds Lens Correction Algorithms
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> ```