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