Well, I thought I was done with the preliminaries, but it occurs to me that the standard deviation is going to vary linearly with exposure. I wrote some code to check that and correct for it. Then I came up with a way to simultaneously correct for overall exposure variation, and exposure variation caused by light falloff and uneven target lighting.
Here’s the code:
The first block checks for the problem, and returns this answer:
Yup, it’s a problem all right.
The second block performs a correction for overall exposure errors by dividing the values in a linear representation of the test image by the mean value for that image. It works perfectly.
The third block takes that idea and extends it. It generates a low-passed correction image by passing a 400×400 constant-value kernel over the test image, then corrects the test image by dividing each pixel in it by the correponding pixel in the correction image. Here’s the result of that operation for a group of ten differently-exposed images:
OK, on to the real testing.