xref: /aosp_15_r20/cts/apps/CameraITS/utils/noise_model_constants.py (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker# Copyright 2024 The Android Open Source Project.
2*b7c941bbSAndroid Build Coastguard Worker
3*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*b7c941bbSAndroid Build Coastguard Worker#
7*b7c941bbSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*b7c941bbSAndroid Build Coastguard Worker#
9*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*b7c941bbSAndroid Build Coastguard Worker# limitations under the License.
14*b7c941bbSAndroid Build Coastguard Worker"""Noise model constants."""
15*b7c941bbSAndroid Build Coastguard Worker
16*b7c941bbSAndroid Build Coastguard Worker
17*b7c941bbSAndroid Build Coastguard Workerimport matplotlib.colors
18*b7c941bbSAndroid Build Coastguard Workerimport matplotlib.pyplot as plt
19*b7c941bbSAndroid Build Coastguard Worker
20*b7c941bbSAndroid Build Coastguard Worker# Standard Bayer color channel names in canonical order.
21*b7c941bbSAndroid Build Coastguard WorkerBAYER_COLORS = ('R', 'Gr', 'Gb', 'B')
22*b7c941bbSAndroid Build Coastguard Worker
23*b7c941bbSAndroid Build Coastguard Worker# Standard Bayer color filter arrangements dictionary.
24*b7c941bbSAndroid Build Coastguard Worker# The keys are color filter arrangement indices and values are dictionaries
25*b7c941bbSAndroid Build Coastguard Worker# mapping standard Bayer color channels to indices.
26*b7c941bbSAndroid Build Coastguard WorkerBAYER_COLOR_FILTER_MAP = {
27*b7c941bbSAndroid Build Coastguard Worker    0: {'R': 0, 'Gr': 1, 'Gb': 2, 'B': 3},
28*b7c941bbSAndroid Build Coastguard Worker    1: {'Gr': 0, 'R': 1, 'B': 2, 'Gb': 3},
29*b7c941bbSAndroid Build Coastguard Worker    2: {'Gb': 0, 'B': 1, 'R': 2, 'Gr': 3},
30*b7c941bbSAndroid Build Coastguard Worker    3: {'B': 0, 'Gb': 1, 'Gr': 2, 'R': 3},
31*b7c941bbSAndroid Build Coastguard Worker}
32*b7c941bbSAndroid Build Coastguard Worker
33*b7c941bbSAndroid Build Coastguard Worker# Colors for plotting standard Bayer noise model parameters of each channel.
34*b7c941bbSAndroid Build Coastguard WorkerBAYER_PLOT_COLORS = ('red', 'green', 'black', 'blue')
35*b7c941bbSAndroid Build Coastguard Worker
36*b7c941bbSAndroid Build Coastguard Worker# Quad Bayer color channel names in canonical order.
37*b7c941bbSAndroid Build Coastguard WorkerQUAD_BAYER_COLORS = (
38*b7c941bbSAndroid Build Coastguard Worker    'R0', 'R1', 'R2', 'R3',
39*b7c941bbSAndroid Build Coastguard Worker    'Gr0', 'Gr1', 'Gr2', 'Gr3',
40*b7c941bbSAndroid Build Coastguard Worker    'Gb0', 'Gb1', 'Gb2', 'Gb3',
41*b7c941bbSAndroid Build Coastguard Worker    'B0', 'B1', 'B2', 'B3',
42*b7c941bbSAndroid Build Coastguard Worker)
43*b7c941bbSAndroid Build Coastguard Worker
44*b7c941bbSAndroid Build Coastguard Worker# Quad Bayer color filter arrangements dictionary.
45*b7c941bbSAndroid Build Coastguard Worker# The keys are color filter arrangement indices and values are dictionaries
46*b7c941bbSAndroid Build Coastguard Worker# mapping quad Bayer color channels to indices.
47*b7c941bbSAndroid Build Coastguard WorkerQUAD_BAYER_COLOR_FILTER_MAP = {
48*b7c941bbSAndroid Build Coastguard Worker    0: {
49*b7c941bbSAndroid Build Coastguard Worker        'R': [0, 1, 4, 5],
50*b7c941bbSAndroid Build Coastguard Worker        'Gr': [2, 3, 6, 7],
51*b7c941bbSAndroid Build Coastguard Worker        'Gb': [8, 9, 12, 13],
52*b7c941bbSAndroid Build Coastguard Worker        'B': [10, 11, 14, 15],
53*b7c941bbSAndroid Build Coastguard Worker    },
54*b7c941bbSAndroid Build Coastguard Worker    1: {
55*b7c941bbSAndroid Build Coastguard Worker        'Gr': [0, 1, 4, 5],
56*b7c941bbSAndroid Build Coastguard Worker        'R': [2, 3, 6, 7],
57*b7c941bbSAndroid Build Coastguard Worker        'B': [8, 9, 12, 13],
58*b7c941bbSAndroid Build Coastguard Worker        'Gb': [10, 11, 14, 15],
59*b7c941bbSAndroid Build Coastguard Worker    },
60*b7c941bbSAndroid Build Coastguard Worker    2: {
61*b7c941bbSAndroid Build Coastguard Worker        'Gb': [0, 1, 4, 5],
62*b7c941bbSAndroid Build Coastguard Worker        'B': [2, 3, 6, 7],
63*b7c941bbSAndroid Build Coastguard Worker        'R': [8, 9, 12, 13],
64*b7c941bbSAndroid Build Coastguard Worker        'Gr': [10, 11, 14, 15],
65*b7c941bbSAndroid Build Coastguard Worker    },
66*b7c941bbSAndroid Build Coastguard Worker    3: {
67*b7c941bbSAndroid Build Coastguard Worker        'B': [0, 1, 4, 5],
68*b7c941bbSAndroid Build Coastguard Worker        'Gb': [2, 3, 6, 7],
69*b7c941bbSAndroid Build Coastguard Worker        'Gr': [8, 9, 12, 13],
70*b7c941bbSAndroid Build Coastguard Worker        'R': [10, 11, 14, 15],
71*b7c941bbSAndroid Build Coastguard Worker    },
72*b7c941bbSAndroid Build Coastguard Worker}
73*b7c941bbSAndroid Build Coastguard Worker
74*b7c941bbSAndroid Build Coastguard Worker# Colors for plotting noise model parameters of each quad Bayer channel.
75*b7c941bbSAndroid Build Coastguard WorkerQUAD_BAYER_PLOT_COLORS = (
76*b7c941bbSAndroid Build Coastguard Worker    'pink', 'magenta', 'red', 'darkred',
77*b7c941bbSAndroid Build Coastguard Worker    'lightgreen', 'greenyellow', 'lime', 'green',
78*b7c941bbSAndroid Build Coastguard Worker    'orange', 'yellow', 'grey', 'black',
79*b7c941bbSAndroid Build Coastguard Worker    'lightblue', 'cyan', 'blue', 'darkblue',
80*b7c941bbSAndroid Build Coastguard Worker)
81*b7c941bbSAndroid Build Coastguard Worker
82*b7c941bbSAndroid Build Coastguard WorkerNUM_BAYER_CHANNELS = len(BAYER_COLORS)
83*b7c941bbSAndroid Build Coastguard WorkerNUM_QUAD_BAYER_CHANNELS = len(QUAD_BAYER_COLORS)
84*b7c941bbSAndroid Build Coastguard WorkerVALID_NUM_CHANNELS = (NUM_BAYER_CHANNELS, NUM_QUAD_BAYER_CHANNELS)
85*b7c941bbSAndroid Build Coastguard WorkerVALID_RAW_STATS_FORMATS = (
86*b7c941bbSAndroid Build Coastguard Worker    'rawStats', 'rawQuadBayerStats',
87*b7c941bbSAndroid Build Coastguard Worker    'raw10Stats', 'raw10QuadBayerStats',
88*b7c941bbSAndroid Build Coastguard Worker)
89*b7c941bbSAndroid Build Coastguard Worker
90*b7c941bbSAndroid Build Coastguard Worker# Rainbow color map used to plot stats samples of different exposure times.
91*b7c941bbSAndroid Build Coastguard WorkerRAINBOW_CMAP = plt.cm.rainbow
92*b7c941bbSAndroid Build Coastguard Worker# Assume the maximum exposure time is 2^12 ms for calibration.
93*b7c941bbSAndroid Build Coastguard WorkerCOLOR_NORM = matplotlib.colors.Normalize(vmin=0, vmax=12)
94*b7c941bbSAndroid Build Coastguard WorkerCOLOR_BAR = plt.cm.ScalarMappable(cmap=RAINBOW_CMAP, norm=COLOR_NORM)
95*b7c941bbSAndroid Build Coastguard WorkerOUTLIER_MEDIAN_ABS_DEVS_DEFAULT = 3
96