[libcamera-devel] [PATCH] ipa: raspberrypi: Add a "scientific" tuning for the IMX477
Naushir Patuck
naush at raspberrypi.com
Fri Dec 16 16:09:55 CET 2022
On Fri, 16 Dec 2022 at 14:25, Kieran Bingham <
kieran.bingham at ideasonboard.com> wrote:
> Quoting Naushir Patuck via libcamera-devel (2022-12-16 13:59:03)
> > Add a tuning file for the IMX477 more suited to scientific applications.
> > The key differences from the original tuning file are:
> >
> > - Disable ALSC block completely
> > - Pure rec709 gamma curve, and no contrast enhance
> > - New CT curve and CCMs based on the illumination spectrum of a black
> body
> > radiator up to about 3600 K and the CIE illuminant D for higher color
> > temperatures.
> >
> > Further details on the changes can be found at:
> > https://forums.raspberrypi.com/viewtopic.php?t=343449
> >
> > All credit for these changes go to Dr. Rolf Henkel.
>
> Some very interesting investigations in that thread.
>
> I'm curious if we'll end up with more configurations like this for each
> sensor!
I think that's entirely possible - and all part of the design with json
config
files!
> But I really like the graphs to present what the tuning files
> are doing comparitively. Much easier to grasp than a file of json
> data...
>
> No objections to this here but apart from admiring the graphs, I won't
> judge the data so:
>
> Acked-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
>
> My only concern/comment would be how and where would we document the
> differences between these tuning files? Would users just be expected to
> try them to see ? Or would it be clear that a 'scientific' tuning file
> has a specific set of properties ?
>
At the end of the day, I think this is a choice for informed users. We
provide
a sensible default config for visually pleasing images, but if users have a
specific application that requires something custom, we leave it to them to
switch to the appropriate tuning file that they know works for them.
Regards,
Naush
>
> But any / all of that could be addressed later if needed I think.
>
>
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > Signed-off-by: Rolf Henkel <cpixip at pixelcircus.com>
> > ---
> > .../raspberrypi/data/imx477_scientific.json | 482 ++++++++++++++++++
> > src/ipa/raspberrypi/data/meson.build | 1 +
> > 2 files changed, 483 insertions(+)
> > create mode 100755 src/ipa/raspberrypi/data/imx477_scientific.json
> >
> > diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json
> b/src/ipa/raspberrypi/data/imx477_scientific.json
> > new file mode 100755
> > index 000000000000..17c4ed0a5e74
> > --- /dev/null
> > +++ b/src/ipa/raspberrypi/data/imx477_scientific.json
> > @@ -0,0 +1,482 @@
> > +{
> > + "version": 2.0,
> > + "target": "bcm2835",
> > + "algorithms": [
> > + {
> > + "rpi.black_level":
> > + {
> > + "black_level": 4096
> > + }
> > + },
> > + {
> > + "rpi.dpc": { }
> > + },
> > + {
> > + "rpi.lux":
> > + {
> > + "reference_shutter_speed": 27242,
> > + "reference_gain": 1.0,
> > + "reference_aperture": 1.0,
> > + "reference_lux": 830,
> > + "reference_Y": 17755
> > + }
> > + },
> > + {
> > + "rpi.noise":
> > + {
> > + "reference_constant": 0,
> > + "reference_slope": 2.767
> > + }
> > + },
> > + {
> > + "rpi.geq":
> > + {
> > + "offset": 204,
> > + "slope": 0.01078
> > + }
> > + },
> > + {
> > + "rpi.sdn": { }
> > + },
> > + {
> > + "rpi.awb":
> > + {
> > + "priors": [
> > + {
> > + "lux": 0,
> > + "prior":
> > + [
> > + 2000, 1.0,
> > + 3000, 0.0,
> > + 13000, 0.0
> > + ]
> > + },
> > + {
> > + "lux": 800,
> > + "prior":
> > + [
> > + 2000, 0.0,
> > + 6000, 2.0,
> > + 13000, 2.0
> > + ]
> > + },
> > + {
> > + "lux": 1500,
> > + "prior":
> > + [
> > + 2000, 0.0,
> > + 4000, 1.0,
> > + 6000, 6.0,
> > + 6500, 7.0,
> > + 7000, 1.0,
> > + 13000, 1.0
> > + ]
> > + }
> > + ],
> > + "modes":
> > + {
> > + "auto":
> > + {
> > + "lo": 2500,
> > + "hi": 8000
> > + },
> > + "incandescent":
> > + {
> > + "lo": 2500,
> > + "hi": 3000
> > + },
> > + "tungsten":
> > + {
> > + "lo": 3000,
> > + "hi": 3500
> > + },
> > + "fluorescent":
> > + {
> > + "lo": 4000,
> > + "hi": 4700
> > + },
> > + "indoor":
> > + {
> > + "lo": 3000,
> > + "hi": 5000
> > + },
> > + "daylight":
> > + {
> > + "lo": 5500,
> > + "hi": 6500
> > + },
> > + "cloudy":
> > + {
> > + "lo": 7000,
> > + "hi": 8600
> > + }
> > + },
> > + "bayes": 1,
> > + "ct_curve":
> > + [
> > + 2000.0, 0.6331025775790707, 0.27424225990946915,
> > + 2200.0, 0.5696117366212947, 0.3116091368689487,
> > + 2400.0, 0.5204264653110015, 0.34892179554105873,
> > + 2600.0, 0.48148675531667223, 0.38565229719076793,
> > + 2800.0, 0.450085403501908, 0.42145684622485047,
> > + 3000.0, 0.42436130159169017, 0.45611835670028816,
> > + 3200.0, 0.40300023695527337, 0.48950766215198593,
> > + 3400.0, 0.3850520052612984, 0.5215567075837261,
> > + 3600.0, 0.36981508088230314, 0.5522397906415475,
> > + 4100.0, 0.333468007836758, 0.5909770465167908,
> > + 4600.0, 0.31196097364221376, 0.6515706327327178,
> > + 5100.0, 0.2961860409294588, 0.7068178946570284,
> > + 5600.0, 0.2842607232745885, 0.7564837749584288,
> > + 6100.0, 0.2750265787051251, 0.8006183524920533,
> > + 6600.0, 0.2677057225584924, 0.8398879225373039,
> > + 7100.0, 0.2617955199757274, 0.8746456080032436,
> > + 7600.0, 0.25693714288250125, 0.905569559506562,
> > + 8100.0, 0.25287531441063316, 0.9331696750390895,
> > + 8600.0, 0.24946601483331993, 0.9576820904825795
> > + ],
> > + "sensitivity_r": 1.05,
> > + "sensitivity_b": 1.05,
> > + "transverse_pos": 0.0238,
> > + "transverse_neg": 0.04429,
> > + "coarse_step": 0.1
> > + }
> > + },
> > + {
> > + "rpi.agc":
> > + {
> > + "metering_modes":
> > + {
> > + "centre-weighted":
> > + {
> > + "weights": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1,
> 0, 0, 0, 0 ]
> > + },
> > + "spot":
> > + {
> > + "weights": [ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0, 0 ]
> > + },
> > + "matrix":
> > + {
> > + "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> 1, 1, 1, 1 ]
> > + }
> > + },
> > + "exposure_modes":
> > + {
> > + "normal":
> > + {
> > + "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > + },
> > + "short":
> > + {
> > + "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > + "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > + },
> > + "long":
> > + {
> > + "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > + "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > + }
> > + },
> > + "constraint_modes":
> > + {
> > + "normal": [
> > + {
> > + "bound": "LOWER",
> > + "q_lo": 0.98,
> > + "q_hi": 1.0,
> > + "y_target":
> > + [
> > + 0, 0.3,
> > + 1000, 0.3
> > + ]
> > + }
> > + ],
> > + "highlight": [
> > + {
> > + "bound": "LOWER",
> > + "q_lo": 0.98,
> > + "q_hi": 1.0,
> > + "y_target":
> > + [
> > + 0, 0.3,
> > + 1000, 0.3
> > + ]
> > + },
> > + {
> > + "bound": "UPPER",
> > + "q_lo": 0.98,
> > + "q_hi": 1.0,
> > + "y_target":
> > + [
> > + 0, 0.8,
> > + 1000, 0.8
> > + ]
> > + }
> > + ],
> > + "shadows": [
> > + {
> > + "bound": "LOWER",
> > + "q_lo": 0.0,
> > + "q_hi": 0.5,
> > + "y_target":
> > + [
> > + 0, 0.17,
> > + 1000, 0.17
> > + ]
> > + }
> > + ]
> > + },
> > + "y_target":
> > + [
> > + 0, 0.16,
> > + 1000, 0.165,
> > + 10000, 0.17
> > + ]
> > + }
> > + },
> > + {
> > + "rpi.contrast":
> > + {
> > + "ce_enable": 0,
> > + "gamma_curve":
> > + [
> > + 0, 0,
> > + 512, 2304,
> > + 1024, 4608,
> > + 1536, 6573,
> > + 2048, 8401,
> > + 2560, 9992,
> > + 3072, 11418,
> > + 3584, 12719,
> > + 4096, 13922,
> > + 4608, 15045,
> > + 5120, 16103,
> > + 5632, 17104,
> > + 6144, 18056,
> > + 6656, 18967,
> > + 7168, 19839,
> > + 7680, 20679,
> > + 8192, 21488,
> > + 9216, 23028,
> > + 10240, 24477,
> > + 11264, 25849,
> > + 12288, 27154,
> > + 13312, 28401,
> > + 14336, 29597,
> > + 15360, 30747,
> > + 16384, 31856,
> > + 17408, 32928,
> > + 18432, 33966,
> > + 19456, 34973,
> > + 20480, 35952,
> > + 22528, 37832,
> > + 24576, 39621,
> > + 26624, 41330,
> > + 28672, 42969,
> > + 30720, 44545,
> > + 32768, 46065,
> > + 34816, 47534,
> > + 36864, 48956,
> > + 38912, 50336,
> > + 40960, 51677,
> > + 43008, 52982,
> > + 45056, 54253,
> > + 47104, 55493,
> > + 49152, 56704,
> > + 51200, 57888,
> > + 53248, 59046,
> > + 55296, 60181,
> > + 57344, 61292,
> > + 59392, 62382,
> > + 61440, 63452,
> > + 63488, 64503,
> > + 65535, 65535
> > + ]
> > + }
> > + },
> > + {
> > + "rpi.ccm":
> > + {
> > + "ccms": [
> > + {
> > + "ct": 2000,
> > + "ccm":
> > + [
> > + 1.5813882365848004, -0.35293683714581114,
> -0.27378771561617715,
> > + -0.4347297185453639, 1.5792631087746074,
> -0.12102601986382337,
> > + 0.2322290578987574, -1.4382672640468128,
> 2.1386425781770755
> > + ]
> > + },
> > + {
> > + "ct": 2200,
> > + "ccm":
> > + [
> > + 1.6322048484088305, -0.45932286857238486,
> -0.21373542690252198,
> > + -0.3970719209901105, 1.5877868651467202,
> -0.17249380832122455,
> > + 0.20753774825903412, -1.2660673594740142,
> 2.005654261091916
> > + ]
> > + },
> > + {
> > + "ct": 2400,
> > + "ccm":
> > + [
> > + 1.6766610071470398, -0.5447101051688111,
> -0.16838641107407676,
> > + -0.3659845183388154, 1.592223692670396,
> -0.2127091997471162,
> > + 0.1833964516767549, -1.1339155942419321,
> 1.9089342978542396
> > + ]
> > + },
> > + {
> > + "ct": 2600,
> > + "ccm":
> > + [
> > + 1.7161984340622154, -0.6152585785678794,
> -0.1331100845092582,
> > + -0.33972082628066275, 1.5944888273736966,
> -0.2453979465898787,
> > + 0.1615577497676328, -1.0298684958833109,
> 1.8357854177422053
> > + ]
> > + },
> > + {
> > + "ct": 2800,
> > + "ccm":
> > + [
> > + 1.7519307259815728, -0.6748682080165339,
> -0.10515169074540848,
> > + -0.3171703484479931, 1.5955820297498486,
> -0.2727395854813966,
> > + 0.14230870739974305, -0.9460976023551511,
> 1.778709391659538
> > + ]
> > + },
> > + {
> > + "ct": 3000,
> > + "ccm":
> > + [
> > + 1.7846716625128374, -0.7261240476375332,
> -0.08274697420358428,
> > + -0.2975654035173307, 1.5960425637021738,
> -0.2961043416505157,
> > + 0.12546426281675097, -0.8773434727076518,
> 1.7330356805246685
> > + ]
> > + },
> > + {
> > + "ct": 3200,
> > + "ccm":
> > + [
> > + 1.8150085872943436, -0.7708109672515514,
> -0.06469468211419174,
> > + -0.2803468940646277, 1.596168842967451,
> -0.3164044170681625,
> > + 0.11071494533513807, -0.8199772290209191,
> 1.69572135046367
> > + ]
> > + },
> > + {
> > + "ct": 3400,
> > + "ccm":
> > + [
> > + 1.8433668304932087, -0.8102060605062592,
> -0.05013485852801454,
> > + -0.2650934036324084, 1.5961288492969294,
> -0.33427554893845535,
> > + 0.0977478941863518, -0.7714303112098978,
> 1.6647070820146963
> > + ]
> > + },
> > + {
> > + "ct": 3600,
> > + "ccm":
> > + [
> > + 1.8700575831917468, -0.8452518300291346,
> -0.03842644337477299,
> > + -0.2514794528347016, 1.5960178299141876,
> -0.3501774949366156,
> > + 0.08628520830733245, -0.729841503339915,
> 1.638553343939267
> > + ]
> > + },
> > + {
> > + "ct": 4100,
> > + "ccm":
> > + [
> > + 1.8988700903560716, -0.8911278803351247,
> -0.018848644425650693,
> > + -0.21487101487384094, 1.599236541382614,
> -0.39405450457918206,
> > + 0.08251488056482173, -0.7178919368326191,
> 1.6267009056502704
> > + ]
> > + },
> > + {
> > + "ct": 4600,
> > + "ccm":
> > + [
> > + 1.960355191764125, -0.9624344812121991,
> -0.0017122408632169205,
> > + -0.19444620905212898, 1.5978493736948447,
> -0.416727638296156,
> > + 0.06310261513271084, -0.6483790952487849,
> 1.5834605477213093
> > + ]
> > + },
> > + {
> > + "ct": 5100,
> > + "ccm":
> > + [
> > + 2.014680536961399, -1.0195930302148566,
> 0.007728256612638915,
> > + -0.17751999660735496, 1.5977081555831,
> -0.4366085498741474,
> > + 0.04741267583041334, -0.5950327902073489,
> 1.5512919847321853
> > + ]
> > + },
> > + {
> > + "ct": 5600,
> > + "ccm":
> > + [
> > + 2.062652337917251, -1.0658386679125478,
> 0.011886354256281267,
> > + -0.16319197721451495, 1.598363237584736,
> -0.45422061523742235,
> > + 0.03465810928795378, -0.5535454108047286,
> 1.5269025836946852
> > + ]
> > + },
> > + {
> > + "ct": 6100,
> > + "ccm":
> > + [
> > + 2.104985902038069, -1.103597868736314,
> 0.012503517136539277,
> > + -0.15090797064906178, 1.5994703078166095,
> -0.4698414300864995,
> > + 0.02421766063474242, -0.5208922818196823,
> 1.5081270847783788
> > + ]
> > + },
> > + {
> > + "ct": 6600,
> > + "ccm":
> > + [
> > + 2.1424988751299714, -1.134760232367728,
> 0.010730356010435522,
> > + -0.14021846798466234, 1.600822462230719,
> -0.48379204794526487,
> > + 0.015521315410496622, -0.49463630325832275,
> 1.4933313534840327
> > + ]
> > + },
> > + {
> > + "ct": 7100,
> > + "ccm":
> > + [
> > + 2.1758034100130925, -1.1607558481037359,
> 0.007452724895469076,
> > + -0.13085694672641826, 1.6022648614493245,
> -0.4962330524084075,
> > + 0.008226943206113427, -0.4733077192319791,
> 1.4815336120437468
> > + ]
> > + },
> > + {
> > + "ct": 7600,
> > + "ccm":
> > + [
> > + 2.205529206931895, -1.1826662383072108,
> 0.0032019529917605167,
> > + -0.122572009780486, 1.6037258133595753,
> -0.5073973734282445,
> > + 0.0020132587619863425, -0.4556590236414181,
> 1.471939788496745
> > + ]
> > + },
> > + {
> > + "ct": 8100,
> > + "ccm":
> > + [
> > + 2.232224969223067, -1.2013672897252885,
> -0.0016234598095482985,
> > + -0.11518026734442414, 1.6051544769439803,
> -0.5174558699422255,
> > + -0.0033378143542219835,
> -0.4408590373867774, 1.4640252230667452
> > + ]
> > + },
> > + {
> > + "ct": 8600,
> > + "ccm":
> > + [
> > + 2.256082295891265, -1.2173210549996634,
> -0.0067231350481711675,
> > + -0.10860272839843167, 1.6065150139140594,
> -0.5264728573611493,
> > + -0.007952618707984149, -0.4284003574050791,
> 1.4574646927117558
> > + ]
> > + }
> > + ]
> > + }
> > + },
> > + {
> > + "rpi.sharpen": { }
> > + },
> > + {
> > + "rpi.focus": { }
> > + }
> > + ]
> > +}
> > \ No newline at end of file
> > diff --git a/src/ipa/raspberrypi/data/meson.build
> b/src/ipa/raspberrypi/data/meson.build
> > index 84c1dabbec9c..5565508cf602 100644
> > --- a/src/ipa/raspberrypi/data/meson.build
> > +++ b/src/ipa/raspberrypi/data/meson.build
> > @@ -9,6 +9,7 @@ conf_files = files([
> > 'imx378.json',
> > 'imx477.json',
> > 'imx477_noir.json',
> > + 'imx477_scientific.json',
> > 'imx519.json',
> > 'ov5647.json',
> > 'ov5647_noir.json',
> > --
> > 2.25.1
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20221216/fcd12d2d/attachment.htm>
More information about the libcamera-devel
mailing list