In the spirit of the alternating solver for alignment (see #160), I added a similar solver for intensity correction. It works in exactly the same way as the analogue for alignment, but two changes to the existing code were necessary:
The rendering method that is used to match intensities between tiles didn't take into account existing intensity filters. It does now. I put this into Render.render rather than VisualizeTools.getUntransformedProcessorWithMasks to preserve my notion of "untransformed" (meaning also no filters).
A LinearIntensityMap8BitFilter can now absorb a second filter to emulate chaining of linear functions.
Results
I tested the implementation on one layer of wafer_53 with a 3x3 XY-block layout; see pictures below.
While I can still see some tile boundaries after one run, the results after two runs look qualitatively very close to the baseline (intensity correction without blocks).
In the spirit of the alternating solver for alignment (see #160), I added a similar solver for intensity correction. It works in exactly the same way as the analogue for alignment, but two changes to the existing code were necessary:
Render.render
rather thanVisualizeTools.getUntransformedProcessorWithMasks
to preserve my notion of "untransformed" (meaning also no filters).LinearIntensityMap8BitFilter
can now absorb a second filter to emulate chaining of linear functions.Results
I tested the implementation on one layer of wafer_53 with a 3x3 XY-block layout; see pictures below. While I can still see some tile boundaries after one run, the results after two runs look qualitatively very close to the baseline (intensity correction without blocks).