Newer
Older
TongueColorCheckerAnalysis / eval_chart.py
import openpyxl
import numpy as np
import matplotlib.pyplot as plt


def excel_range(filename, r):
    wb = openpyxl.load_workbook(filename)
    sheet = wb[wb.sheetnames[0]]
    return [[cell.value for cell in sheet[r][i]] for i in range(len(sheet[r]))]


led_sp = np.float32(excel_range("Spectrum.xlsx", "B2:AF2")[0])
cmf_sp = np.float32(excel_range("Spectrum.xlsx", "B3:AF5"))
filter_sp = np.float32(excel_range("Spectrum.xlsx", "B6:AF8"))
tcc_sp = np.float32(excel_range("handy_tcc.xlsx", "F2:AJ25")) / 100
# print("led=", led_sp)

sum_y = led_sp.dot(cmf_sp[1])
k = 100.0 / sum_y

tcc_xyz = np.zeros((24, 3), np.float32)
for patch_no in range(24):
    tcc_xyz[patch_no, 0] = (led_sp * tcc_sp[patch_no]).dot(cmf_sp[0]) * k
    tcc_xyz[patch_no, 1] = (led_sp * tcc_sp[patch_no]).dot(cmf_sp[1]) * k
    tcc_xyz[patch_no, 2] = (led_sp * tcc_sp[patch_no]).dot(cmf_sp[2]) * k
    # print(patch_no, tri_x, tri_y, tri_z, sep="\t")
print("tcc_xyz=")
print(tcc_xyz)

white_patch = 0
white_balance = np.float32([240, 240, 240])
raw_rgb = np.float32(
    [(led_sp * tcc_sp[white_patch]).dot(filter_sp[i]) for i in range(3)]
)
print("raw_rgb=", raw_rgb)
rgb_gain = white_balance / raw_rgb
print("rgb_gain=", rgb_gain)
tcc_rgb = np.zeros((24, 3), np.float32)
for patch_no in range(24):
    tcc_rgb[patch_no, 0] = (led_sp * tcc_sp[patch_no]).dot(filter_sp[0]) * rgb_gain[0]
    tcc_rgb[patch_no, 1] = (led_sp * tcc_sp[patch_no]).dot(filter_sp[1]) * rgb_gain[1]
    tcc_rgb[patch_no, 2] = (led_sp * tcc_sp[patch_no]).dot(filter_sp[2]) * rgb_gain[2]
    # print(patch_no, tri_x, tri_y, tri_z, sep="\t")
print("tcc_rgb=")
print(tcc_rgb)