├── fig ├── cmf_rgb.png ├── test_Y1.png ├── test_Y2.png ├── test_Y3.png ├── ticks.png ├── gamma_curve.png ├── two_diagrams.png ├── test_spectra1.png ├── test_spectra2.png ├── test_spectra3.png ├── test_spectra4.png ├── test_spectra5.png ├── three_colorbars.png ├── wikipeida-CIE1931xy.png ├── rg_chromaticity_diagram.png └── xy_chromaticity_diagram.png ├── README.md ├── data ├── wright_guild_1931_2deg_rgb_cc.csv ├── wright_guild_1931_2deg_rgb_cmf.csv ├── cie_1951_scotopic_lef.csv ├── cie_1924_photopic_lef.csv ├── cie_1931_2deg_xyz_cc.csv ├── stiles_burch_2deg_lms.csv └── cie_1931_2deg_xyz_cmf.csv ├── note └── note.md ├── common.py ├── chromaticity_diagram.py ├── temp.ipynb └── 03_blackbody_radiation.ipynb /fig/cmf_rgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/cmf_rgb.png -------------------------------------------------------------------------------- /fig/test_Y1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_Y1.png -------------------------------------------------------------------------------- /fig/test_Y2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_Y2.png -------------------------------------------------------------------------------- /fig/test_Y3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_Y3.png -------------------------------------------------------------------------------- /fig/ticks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/ticks.png -------------------------------------------------------------------------------- /fig/gamma_curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/gamma_curve.png -------------------------------------------------------------------------------- /fig/two_diagrams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/two_diagrams.png -------------------------------------------------------------------------------- /fig/test_spectra1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_spectra1.png -------------------------------------------------------------------------------- /fig/test_spectra2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_spectra2.png -------------------------------------------------------------------------------- /fig/test_spectra3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_spectra3.png -------------------------------------------------------------------------------- /fig/test_spectra4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_spectra4.png -------------------------------------------------------------------------------- /fig/test_spectra5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/test_spectra5.png -------------------------------------------------------------------------------- /fig/three_colorbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/three_colorbars.png -------------------------------------------------------------------------------- /fig/wikipeida-CIE1931xy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/wikipeida-CIE1931xy.png -------------------------------------------------------------------------------- /fig/rg_chromaticity_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/rg_chromaticity_diagram.png -------------------------------------------------------------------------------- /fig/xy_chromaticity_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhaJiMan/do_color/HEAD/fig/xy_chromaticity_diagram.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Do Color 2 | 3 | Data and code for: 4 | 5 | - [https://zhajiman.github.io/post/chromaticity_diagram/](https://zhajiman.github.io/post/chromaticity_diagram/) 6 | 7 | ![two_diagrams](./fig/two_diagrams.png) 8 | 9 | ![test_spectra4](./fig/test_spectra4.png) -------------------------------------------------------------------------------- /data/wright_guild_1931_2deg_rgb_cc.csv: -------------------------------------------------------------------------------- 1 | wavelength,r,g,b 2 | 380,0.0272,-0.0115,0.9843 3 | 385,0.0268,-0.0114,0.9846 4 | 390,0.0263,-0.0114,0.9851 5 | 395,0.0256,-0.0113,0.9857 6 | 400,0.0247,-0.0112,0.9865 7 | 405,0.0237,-0.0111,0.9874 8 | 410,0.0225,-0.0109,0.9884 9 | 415,0.0207,-0.0104,0.9897 10 | 420,0.0181,-0.0094,0.9913 11 | 425,0.0142,-0.0076,0.9934 12 | 430,0.0088,-0.0048,0.9960 13 | 435,0.0012,-0.0007,0.9995 14 | 440,-0.0084,0.0048,1.0036 15 | 445,-0.0213,0.0120,1.0093 16 | 450,-0.0390,0.0218,1.0172 17 | 455,-0.0618,0.0345,1.0273 18 | 460,-0.0909,0.0517,1.0392 19 | 465,-0.1281,0.0762,1.0519 20 | 470,-0.1821,0.1175,1.0646 21 | 475,-0.2584,0.1840,1.0744 22 | 480,-0.3667,0.2906,1.0761 23 | 485,-0.5200,0.4568,1.0632 24 | 490,-0.7150,0.6996,1.0154 25 | 495,-0.9459,1.0247,0.9212 26 | 500,-1.1685,1.3905,0.7780 27 | 505,-1.3182,1.7195,0.5987 28 | 510,-1.3371,1.9318,0.4053 29 | 515,-1.2076,1.9699,0.2377 30 | 520,-0.9830,1.8534,0.1296 31 | 525,-0.7386,1.6662,0.0724 32 | 530,-0.5159,1.4761,0.0398 33 | 535,-0.3304,1.3105,0.0199 34 | 540,-0.1707,1.1628,0.0079 35 | 545,-0.0293,1.0282,0.0011 36 | 550,0.0974,0.9051,-0.0025 37 | 555,0.2121,0.7919,-0.0040 38 | 560,0.3164,0.6881,-0.0045 39 | 565,0.4112,0.5932,-0.0044 40 | 570,0.4973,0.5067,-0.0040 41 | 575,0.5751,0.4283,-0.0034 42 | 580,0.6449,0.3579,-0.0028 43 | 585,0.7071,0.2952,-0.0023 44 | 590,0.7617,0.2402,-0.0019 45 | 595,0.8087,0.1928,-0.0015 46 | 600,0.8475,0.1537,-0.0012 47 | 605,0.8800,0.1209,-0.0009 48 | 610,0.9059,0.0949,-0.0008 49 | 615,0.9265,0.0741,-0.0006 50 | 620,0.9425,0.0580,-0.0005 51 | 625,0.9550,0.0454,-0.0004 52 | 630,0.9649,0.0354,-0.0003 53 | 635,0.9730,0.0272,-0.0002 54 | 640,0.9797,0.0205,0.0002 55 | 645,0.9850,0.0152,0.0002 56 | 650,0.9888,0.0113,0.0001 57 | 655,0.9918,0.0083,0.0001 58 | 660,0.9940,0.0061,0.0001 59 | 665,0.9954,0.0047,0.0001 60 | 670,0.9966,0.0035,0.0001 61 | 675,0.9975,0.0025,0.0000 62 | 680,0.9984,0.0016,0.0000 63 | 685,0.9991,0.0009,0.0000 64 | 690,0.9996,0.0004,0.0000 65 | 695,0.9999,0.0001,0.0000 66 | 700,1.0000,0.0000,0.0000 67 | 705,1.0000,0.0000,0.0000 68 | 710,1.0000,0.0000,0.0000 69 | 715,1.0000,0.0000,0.0000 70 | 720,1.0000,0.0000,0.0000 71 | 725,1.0000,0.0000,0.0000 72 | 730,1.0000,0.0000,0.0000 73 | 735,1.0000,0.0000,0.0000 74 | 740,1.0000,0.0000,0.0000 75 | 745,1.0000,0.0000,0.0000 76 | 750,1.0000,0.0000,0.0000 77 | 755,1.0000,0.0000,0.0000 78 | 760,1.0000,0.0000,0.0000 79 | 765,1.0000,0.0000,0.0000 80 | 770,1.0000,0.0000,0.0000 81 | 775,1.0000,0.0000,0.0000 82 | 780,1.0000,0.0000,0.0000 83 | -------------------------------------------------------------------------------- /data/wright_guild_1931_2deg_rgb_cmf.csv: -------------------------------------------------------------------------------- 1 | wavelength,r,g,b 2 | 380,0.00003,-0.00001,0.00117 3 | 385,0.00005,-0.00002,0.00189 4 | 390,0.00010,-0.00004,0.00359 5 | 395,0.00017,-0.00007,0.00647 6 | 400,0.00030,-0.00014,0.01214 7 | 405,0.00047,-0.00022,0.01969 8 | 410,0.00084,-0.00041,0.03707 9 | 415,0.00139,-0.00070,0.06637 10 | 420,0.00211,-0.00110,0.11541 11 | 425,0.00266,-0.00143,0.18575 12 | 430,0.00218,-0.00119,0.24769 13 | 435,0.00036,-0.00021,0.29012 14 | 440,-0.00261,0.00149,0.31228 15 | 445,-0.00673,0.00379,0.31860 16 | 450,-0.01213,0.00678,0.31670 17 | 455,-0.01874,0.01046,0.31166 18 | 460,-0.02608,0.01485,0.29821 19 | 465,-0.03324,0.01977,0.27295 20 | 470,-0.03933,0.02538,0.22991 21 | 475,-0.04471,0.03183,0.18592 22 | 480,-0.04939,0.03914,0.14494 23 | 485,-0.05364,0.04713,0.10968 24 | 490,-0.05814,0.05689,0.08257 25 | 495,-0.06414,0.06948,0.06246 26 | 500,-0.07137,0.08536,0.04776 27 | 505,-0.08120,0.10593,0.03688 28 | 510,-0.08901,0.12860,0.02698 29 | 515,-0.09356,0.15262,0.01842 30 | 520,-0.09264,0.17468,0.01221 31 | 525,-0.08473,0.19113,0.00830 32 | 530,-0.07101,0.20317,0.00549 33 | 535,-0.05316,0.21083,0.00320 34 | 540,-0.03152,0.21466,0.00146 35 | 545,-0.00613,0.21487,0.00023 36 | 550,0.02279,0.21178,-0.00058 37 | 555,0.05514,0.20588,-0.00105 38 | 560,0.09060,0.19702,-0.00130 39 | 565,0.12840,0.18522,-0.00138 40 | 570,0.16768,0.17087,-0.00135 41 | 575,0.20715,0.15429,-0.00123 42 | 580,0.24562,0.13610,-0.00108 43 | 585,0.27989,0.11686,-0.00093 44 | 590,0.30928,0.09754,-0.00079 45 | 595,0.33184,0.07909,-0.00063 46 | 600,0.34429,0.06246,-0.00049 47 | 605,0.34756,0.04776,-0.00038 48 | 610,0.33971,0.03557,-0.00030 49 | 615,0.32265,0.02583,-0.00022 50 | 620,0.29708,0.01828,-0.00015 51 | 625,0.26348,0.01253,-0.00011 52 | 630,0.22677,0.00833,-0.00008 53 | 635,0.19233,0.00537,-0.00005 54 | 640,0.15968,0.00334,-0.00003 55 | 645,0.12905,0.00199,-0.00002 56 | 650,0.10167,0.00116,-0.00001 57 | 655,0.07857,0.00066,-0.00001 58 | 660,0.05932,0.00037,0.00000 59 | 665,0.04366,0.00021,0.00000 60 | 670,0.03149,0.00011,0.00000 61 | 675,0.02294,0.00006,0.00000 62 | 680,0.01687,0.00003,0.00000 63 | 685,0.01187,0.00001,0.00000 64 | 690,0.00819,0.00000,0.00000 65 | 695,0.00572,0.00000,0.00000 66 | 700,0.00410,0.00000,0.00000 67 | 705,0.00291,0.00000,0.00000 68 | 710,0.00210,0.00000,0.00000 69 | 715,0.00148,0.00000,0.00000 70 | 720,0.00105,0.00000,0.00000 71 | 725,0.00074,0.00000,0.00000 72 | 730,0.00052,0.00000,0.00000 73 | 735,0.00036,0.00000,0.00000 74 | 740,0.00025,0.00000,0.00000 75 | 745,0.00017,0.00000,0.00000 76 | 750,0.00012,0.00000,0.00000 77 | 755,0.00008,0.00000,0.00000 78 | 760,0.00006,0.00000,0.00000 79 | 765,0.00004,0.00000,0.00000 80 | 770,0.00003,0.00000,0.00000 81 | 775,0.00001,0.00000,0.00000 82 | 780,0.00000,0.00000,0.00000 -------------------------------------------------------------------------------- /note/note.md: -------------------------------------------------------------------------------- 1 | - 三基色的原理:基于 cone fundamentals,可以用三种颜色线性组合出任意的 LMS 三刺激值。 2 | - lumiosity efficiency function 3 | - 辐射学和光度学的物理量、单位定义 4 | - luminance、brightness、lightness 的区别 5 | - 格拉斯曼定律指出颜色的叠加是线性的 6 | - 颜色匹配实验导出 CMF 和色度坐标,意义和单位 7 | - RGB 空间里离原点的距离正比于三基色的辐射强度(缩放因子) 8 | - RGB 空间里两点连线上一点对应于 rg 平面里两点连线上一点。注意占连线的比例并不直接相等,并且要求两点的 R + G + B 同时为正或为负。选取合适的三基色以满足这一条件,好让色度图有几何意义。 9 | - 为了使 CMF 为正数,利用上 V,利用亮度关系、切线和零亮度面将 RGB 空间线性变换为 XYZ 空间。 10 | - XYZ、RGB 和 LMS 三刺激值都可以用线性变换得出,确保颜色的唯一性。 11 | - 证明两种颜色按功率比例混合的结果在色度图上为连线上一点。 12 | - 实际光源不能产生负数光,色域怎么确定。 13 | 14 | 具体亮度并不是特别重要,因此色度图采用色度坐标,缺少了亮度信息。 15 | 16 | 定义 XYZ 空间的目的: 17 | - 不需要像 RGB 空间那样必须确定三基色的波长。 18 | - 人类可感颜色的坐标值都是非负数。 19 | 20 | 那为什么不直接用 LMS 空间呢?因为 1931 年那会儿不能得出 cone fundamentals,近些年才有实验测量。 21 | 22 | 本来 Y 和 RGB 的关系应该通过拟合得到。但如果使用的是同一套数据(1921 V 和 1931 CMF),按 CMF 的定义(匹配光谱光的亮度),就可以直接决定变换矩阵第二行的系数为亮度系数。总结一下如何得到矩阵: 23 | 24 | - Y 对应 V 25 | - XYZ 对波长的积分(和)相等,或者说 RGB (1, 1, 1) 映射到 XYZ (k, k, k)。 26 | - rg 平面上 X 和 Z 点位于零亮度面上,其它边与可视范围相切。 27 | 28 | 颜色空间里所有能物理实现的颜色被称为色域(gamut)。现实世界里光源不能直接发出负值的基色光。 29 | 30 | ## XYZ 空间 31 | 32 | 制定 XYZ 空间的原则: 33 | 34 | - 认为格拉斯曼定律成立:认为颜色可以由三基色混合表示,两种颜色混合后的颜色等于对应三基色量的线性叠加。 35 | - 亮度系数比例为 `1:4.5907:0.0601`,由 CMF 对 LEF 的最小二乘拟合得到。 36 | - 所有真实颜色的坐标都为正数。 37 | - 新基色的单位能让 EEW 的色度坐标都相等。 38 | - 让新的色度坐标限于 `(1, 0, 0)`、`(0, 1, 0)`、`(0, 0, 1)` 第一象限的等边三角形中。 39 | - 让 z 色匹配函数的长波区域数值为零,减少计算负担。 40 | 41 | 精简一下: 42 | 43 | - 让 y 色匹配函数等于 LEF,将 X 和 Z 基色的矢量位于 alychne 面上。目的是减少计算。 44 | - rg 色度图上 XYZ 基矢量的点构成的三角形刚好包住 spectrum locus 和 purple line,使 XYZ 坐标值均为正数。(色度图上包住就能保证三维空间也包住,想象一下)。同时这个三角形不要太大,浪费空间。求解变换的过程主要就是确定这个三角形的色度坐标。 45 | - Guild 系统里选取 700 nm 作为红基色能使 r 色匹配函数在 660 nm 后数值均为零。在色度图上体现为 650 nm 后光谱轨迹近乎为直线 r + g = 1。让 XY 的连线几乎与该线重合,那么长波区域的 z 坐标就会出现很多零,减少计算量。实际上这个区域会出现 b 值为特别小的负数的情况,导致 r + g 略大于 1。因此也要让 XY 连线的斜率略大于 1。 46 | 47 | ## 参考链接 48 | 49 | CIE: 50 | 51 | - Color Vision and Colorimetry THEORY and APPLICATIONS 52 | - https://en.wikipedia.org/wiki/CIE_1931_color_space 53 | - https://yuhaozhu.com/blog/cmf.html 54 | 55 | XYZ: 56 | 57 | - https://horizon-lab.org/colorvis/xyz.html 58 | - https://philservice.typepad.com/f_optimum/2016/04/the-wright-guild-experiments-and-the-development-of-the-cie-1931-rgb-and-xyz-color-spaces.html 59 | - How the CIE 1931 Color-Matching Functions Were Derived from Wright–Guild Data 60 | - The Heights of the CIE Colour-Matching Functions 61 | - CIE Method for Calculatina Tristimulus Values 62 | - http://yamatyuu.net/other/color/cie1931xyzrgb/xyz.html 63 | - http://brucelindbloom.com/index.htm 64 | 65 | sRGB: 66 | 67 | - https://en.wikipedia.org/wiki/SRGB 68 | - https://fujiwaratko.sakura.ne.jp/infosci/colorspace/colorspace2_e.html 69 | - https://fujiwaratko.sakura.ne.jp/infosci/colorspace/rgb_xyz_e.html 70 | - https://www.bilibili.com/video/BV1wC4y1p7Xr 71 | - https://www.w3.org/Graphics/Color/sRGB.html 72 | - https://www.w3.org/Graphics/Color/srgb 73 | - https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf 74 | - 色度図の着色 75 | 76 | 数据来源: 77 | 78 | - http://www.cvrl.org/ 79 | - https://github.com/colour-science/colour 80 | 81 | 画图: 82 | - https://colour.readthedocs.io/en/develop/generated/colour.plotting.plot_chromaticity_diagram_CIE1931.html 83 | - https://blog.csdn.net/weixin_43194305/article/details/115468614 84 | - https://scipython.com/blog/converting-a-spectrum-to-a-colour/ -------------------------------------------------------------------------------- /common.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | 4 | def XYZ_to_xyz(XYZ): 5 | '''将XYZ转换为xyz. X+Y+Z=0时xyz为NaN.''' 6 | XYZ = np.asarray(XYZ) 7 | S = XYZ.sum(axis=-1, keepdims=True) 8 | S = np.where(np.isclose(S, 0), np.nan, S) 9 | xyz = XYZ / S 10 | 11 | return xyz 12 | 13 | def XYZ_to_xyY(XYZ): 14 | '''将XYZ转换为xyY. X+Y+Z=0时xy为NaN.''' 15 | XYZ = np.asarray(XYZ) 16 | xyY = XYZ_to_xyz(XYZ) 17 | xyY[..., 2] = XYZ[..., 1] 18 | 19 | return xyY 20 | 21 | def xyY_to_XYZ(xyY): 22 | '''将xyY转换为XYZ.''' 23 | xyY = np.asarray(xyY) 24 | x, y, Y = (xyY[..., i] for i in range(3)) 25 | Y_y = Y / y 26 | X = x * Y_y 27 | Z = (1 - x - y) * Y_y 28 | XYZ = np.stack((X, Y, Z), axis=-1) 29 | 30 | return XYZ 31 | 32 | def gamma_encoding(RGB): 33 | '''对线性sRGB做编码得到sRGB.''' 34 | RGB = np.asarray(RGB).astype(float) 35 | mask = RGB > 0.0031308 36 | RGB[~mask] *= 12.92 37 | RGB[mask] = 1.055 * RGB[mask]**(1 / 2.4) - 0.055 38 | 39 | return RGB 40 | 41 | def gamma_decoding(RGB): 42 | '''对sRGB做解码得到线性sRGB.''' 43 | RGB = np.array(RGB, float) 44 | mask = RGB > 0.04045 45 | RGB[~mask] /= 12.92 46 | RGB[mask] = ((RGB[mask] + 0.055) / 1.055)**2.4 47 | 48 | return RGB 49 | 50 | def move_toward_white(RGB): 51 | '''RGB与白色混合直至色域边界.''' 52 | RGB = np.array(RGB, float) 53 | RGB -= RGB.min(axis=-1, keepdims=True).clip(None, 0) 54 | 55 | return RGB 56 | 57 | def normalize_by_maximum(RGB): 58 | '''分别用RGB里三个分量的最大值做归一化.''' 59 | RGB = np.array(RGB, float) 60 | RGB /= RGB.max(axis=-1, keepdims=True) 61 | 62 | return RGB 63 | 64 | def XYZ_to_sRGB(XYZ): 65 | '''将XYZ转换为线性sRGB.''' 66 | M = np.array([ 67 | [+3.2406, -1.5372, -0.4986], 68 | [-0.9689, +1.8758, +0.0415], 69 | [+0.0557, -0.2040, +1.0570] 70 | ]) 71 | RGB = np.tensordot(XYZ, M, (-1, 1)) 72 | 73 | return RGB 74 | 75 | def sRGB_to_XYZ(RGB): 76 | '''将线性sRGB转换为XYZ.''' 77 | M = np.array([ 78 | [0.4124, 0.3576, 0.1805], 79 | [0.2126, 0.7152, 0.0722], 80 | [0.0193, 0.1192, 0.9505] 81 | ]) 82 | XYZ = np.tensordot(RGB, M, (-1, 1)) 83 | 84 | return XYZ 85 | 86 | def XYZ_to_RGB(XYZ): 87 | '''将XYZ转换为RGB(CIE 1931).''' 88 | M = np.array([ 89 | [+0.41846, -0.15866, -0.08283], 90 | [-0.09117, +0.25243, +0.01571], 91 | [+0.00092, -0.00255, +0.17860] 92 | ]) 93 | RGB = np.tensordot(XYZ, M, (-1, 1)) 94 | 95 | return RGB 96 | 97 | def RGB_to_XYZ(RGB): 98 | '''将RGB(CIE 1931)转换为XYZ.''' 99 | M = np.array([ 100 | [2.76888, 1.75175, 1.13016], 101 | [1.00000, 4.59070, 0.06010], 102 | [0.00000, 0.05651, 5.59427] 103 | ]) 104 | XYZ = np.tensordot(RGB, M, (-1, 1)) 105 | 106 | return XYZ 107 | 108 | def RGB_to_rgb(RGB): 109 | '''将RGB转换为rgb.''' 110 | return XYZ_to_xyz(RGB) 111 | 112 | def load_xyz_cmf(): 113 | '''读取1931 XYZ CMF.''' 114 | return pd.read_csv('./data/cie_1931_2deg_xyz_cmf.csv', index_col=0) 115 | 116 | def load_xyz_cc(): 117 | '''读取1931 XYZ CC.''' 118 | return pd.read_csv('./data/cie_1931_2deg_xyz_cc.csv', index_col=0) 119 | 120 | def load_rgb_cmf(from_xyz=True): 121 | '''读取Wright-Guild RGB CMF.''' 122 | if from_xyz: 123 | xyz_cmf = load_xyz_cmf() 124 | rgb_cmf = pd.DataFrame( 125 | XYZ_to_RGB(xyz_cmf), 126 | index=xyz_cmf.index, 127 | columns=['r', 'g', 'b'] 128 | ) 129 | else: 130 | rgb_cmf = pd.read_csv( 131 | './data/wright_guild_1931_2deg_rgb_cmf.csv', 132 | index_col=0 133 | ) 134 | 135 | return rgb_cmf 136 | 137 | def load_rgb_cc(from_xyz=True): 138 | '''读取Wright-Guild RGB CC.''' 139 | if from_xyz: 140 | rgb_cmf = load_rgb_cmf(from_xyz=True) 141 | rgb_cc = pd.DataFrame( 142 | RGB_to_rgb(rgb_cmf), 143 | index=rgb_cmf.index, 144 | columns=rgb_cmf.columns 145 | ) 146 | else: 147 | rgb_cc = pd.read_csv( 148 | './data/wright_guild_1931_2deg_rgb_cc.csv', 149 | index_col=0 150 | ) 151 | 152 | return rgb_cc 153 | 154 | def load_lef(): 155 | '''读取1924 LEF.''' 156 | return pd.read_csv( 157 | './data/cie_1924_photopic_lef.csv', 158 | index_col=0 159 | )['lef'] 160 | 161 | def load_lms(): 162 | '''读取Stiles & Burch LMS.''' 163 | return pd.read_csv( 164 | './data/stiles_burch_2deg_lms.csv', 165 | index_col=0 166 | ).fillna(0) -------------------------------------------------------------------------------- /data/cie_1951_scotopic_lef.csv: -------------------------------------------------------------------------------- 1 | wavelength,lef 2 | 380,0.0005890000 3 | 381,0.0006650000 4 | 382,0.0007520000 5 | 383,0.0008540000 6 | 384,0.0009720000 7 | 385,0.0011080000 8 | 386,0.0012680000 9 | 387,0.0014530000 10 | 388,0.0016680000 11 | 389,0.0019180000 12 | 390,0.0022090000 13 | 391,0.0025470000 14 | 392,0.0029390000 15 | 393,0.0033940000 16 | 394,0.0039210000 17 | 395,0.0045300000 18 | 396,0.0052400000 19 | 397,0.0060500000 20 | 398,0.0069800000 21 | 399,0.0080600000 22 | 400,0.0092900000 23 | 401,0.0107000000 24 | 402,0.0123100000 25 | 403,0.0141300000 26 | 404,0.0161900000 27 | 405,0.0185200000 28 | 406,0.0211300000 29 | 407,0.0240500000 30 | 408,0.0273000000 31 | 409,0.0308900000 32 | 410,0.0348400000 33 | 411,0.0391600000 34 | 412,0.0439000000 35 | 413,0.0490000000 36 | 414,0.0545000000 37 | 415,0.0604000000 38 | 416,0.0668000000 39 | 417,0.0736000000 40 | 418,0.0808000000 41 | 419,0.0885000000 42 | 420,0.0966000000 43 | 421,0.1052000000 44 | 422,0.1141000000 45 | 423,0.1235000000 46 | 424,0.1334000000 47 | 425,0.1436000000 48 | 426,0.1541000000 49 | 427,0.1651000000 50 | 428,0.1764000000 51 | 429,0.1879000000 52 | 430,0.1998000000 53 | 431,0.2119000000 54 | 432,0.2243000000 55 | 433,0.2369000000 56 | 434,0.2496000000 57 | 435,0.2625000000 58 | 436,0.2755000000 59 | 437,0.2886000000 60 | 438,0.3017000000 61 | 439,0.3149000000 62 | 440,0.3281000000 63 | 441,0.3412000000 64 | 442,0.3543000000 65 | 443,0.3673000000 66 | 444,0.3803000000 67 | 445,0.3931000000 68 | 446,0.4060000000 69 | 447,0.4180000000 70 | 448,0.4310000000 71 | 449,0.4430000000 72 | 450,0.4550000000 73 | 451,0.4670000000 74 | 452,0.4790000000 75 | 453,0.4900000000 76 | 454,0.5020000000 77 | 455,0.5130000000 78 | 456,0.5240000000 79 | 457,0.5350000000 80 | 458,0.5460000000 81 | 459,0.5570000000 82 | 460,0.5670000000 83 | 461,0.5780000000 84 | 462,0.5880000000 85 | 463,0.5990000000 86 | 464,0.6100000000 87 | 465,0.6200000000 88 | 466,0.6310000000 89 | 467,0.6420000000 90 | 468,0.6530000000 91 | 469,0.6640000000 92 | 470,0.6760000000 93 | 471,0.6870000000 94 | 472,0.6990000000 95 | 473,0.7100000000 96 | 474,0.7220000000 97 | 475,0.7340000000 98 | 476,0.7450000000 99 | 477,0.7570000000 100 | 478,0.7690000000 101 | 479,0.7810000000 102 | 480,0.7930000000 103 | 481,0.8050000000 104 | 482,0.8170000000 105 | 483,0.8280000000 106 | 484,0.8400000000 107 | 485,0.8510000000 108 | 486,0.8620000000 109 | 487,0.8730000000 110 | 488,0.8840000000 111 | 489,0.8940000000 112 | 490,0.9040000000 113 | 491,0.9140000000 114 | 492,0.9230000000 115 | 493,0.9320000000 116 | 494,0.9410000000 117 | 495,0.9490000000 118 | 496,0.9570000000 119 | 497,0.9640000000 120 | 498,0.9700000000 121 | 499,0.9760000000 122 | 500,0.9820000000 123 | 501,0.9860000000 124 | 502,0.9900000000 125 | 503,0.9940000000 126 | 504,0.9970000000 127 | 505,0.9980000000 128 | 506,1.0000000000 129 | 507,1.0000000000 130 | 508,1.0000000000 131 | 509,0.9980000000 132 | 510,0.9970000000 133 | 511,0.9940000000 134 | 512,0.9900000000 135 | 513,0.9860000000 136 | 514,0.9810000000 137 | 515,0.9750000000 138 | 516,0.9680000000 139 | 517,0.9610000000 140 | 518,0.9530000000 141 | 519,0.9440000000 142 | 520,0.9350000000 143 | 521,0.9250000000 144 | 522,0.9150000000 145 | 523,0.9040000000 146 | 524,0.8920000000 147 | 525,0.8800000000 148 | 526,0.8670000000 149 | 527,0.8540000000 150 | 528,0.8400000000 151 | 529,0.8260000000 152 | 530,0.8110000000 153 | 531,0.7960000000 154 | 532,0.7810000000 155 | 533,0.7650000000 156 | 534,0.7490000000 157 | 535,0.7330000000 158 | 536,0.7170000000 159 | 537,0.7000000000 160 | 538,0.6830000000 161 | 539,0.6670000000 162 | 540,0.6500000000 163 | 541,0.6330000000 164 | 542,0.6160000000 165 | 543,0.5990000000 166 | 544,0.5810000000 167 | 545,0.5640000000 168 | 546,0.5480000000 169 | 547,0.5310000000 170 | 548,0.5140000000 171 | 549,0.4970000000 172 | 550,0.4810000000 173 | 551,0.4650000000 174 | 552,0.4480000000 175 | 553,0.4330000000 176 | 554,0.4170000000 177 | 555,0.4020000000 178 | 556,0.3864000000 179 | 557,0.3715000000 180 | 558,0.3569000000 181 | 559,0.3427000000 182 | 560,0.3288000000 183 | 561,0.3151000000 184 | 562,0.3018000000 185 | 563,0.2888000000 186 | 564,0.2762000000 187 | 565,0.2639000000 188 | 566,0.2519000000 189 | 567,0.2403000000 190 | 568,0.2291000000 191 | 569,0.2182000000 192 | 570,0.2076000000 193 | 571,0.1974000000 194 | 572,0.1876000000 195 | 573,0.1782000000 196 | 574,0.1690000000 197 | 575,0.1602000000 198 | 576,0.1517000000 199 | 577,0.1436000000 200 | 578,0.1358000000 201 | 579,0.1284000000 202 | 580,0.1212000000 203 | 581,0.1143000000 204 | 582,0.1078000000 205 | 583,0.1015000000 206 | 584,0.0956000000 207 | 585,0.0899000000 208 | 586,0.0845000000 209 | 587,0.0793000000 210 | 588,0.0745000000 211 | 589,0.0699000000 212 | 590,0.0655000000 213 | 591,0.0613000000 214 | 592,0.0574000000 215 | 593,0.0537000000 216 | 594,0.0502000000 217 | 595,0.0469000000 218 | 596,0.0438000000 219 | 597,0.0409000000 220 | 598,0.0381600000 221 | 599,0.0355800000 222 | 600,0.0331500000 223 | 601,0.0308700000 224 | 602,0.0287400000 225 | 603,0.0267400000 226 | 604,0.0248700000 227 | 605,0.0231200000 228 | 606,0.0214700000 229 | 607,0.0199400000 230 | 608,0.0185100000 231 | 609,0.0171800000 232 | 610,0.0159300000 233 | 611,0.0147700000 234 | 612,0.0136900000 235 | 613,0.0126900000 236 | 614,0.0117500000 237 | 615,0.0108800000 238 | 616,0.0100700000 239 | 617,0.0093200000 240 | 618,0.0086200000 241 | 619,0.0079700000 242 | 620,0.0073700000 243 | 621,0.0068200000 244 | 622,0.0063000000 245 | 623,0.0058200000 246 | 624,0.0053800000 247 | 625,0.0049700000 248 | 626,0.0045900000 249 | 627,0.0042400000 250 | 628,0.0039130000 251 | 629,0.0036130000 252 | 630,0.0033350000 253 | 631,0.0030790000 254 | 632,0.0028420000 255 | 633,0.0026230000 256 | 634,0.0024210000 257 | 635,0.0022350000 258 | 636,0.0020620000 259 | 637,0.0019030000 260 | 638,0.0017570000 261 | 639,0.0016210000 262 | 640,0.0014970000 263 | 641,0.0013820000 264 | 642,0.0012760000 265 | 643,0.0011780000 266 | 644,0.0010880000 267 | 645,0.0010050000 268 | 646,0.0009280000 269 | 647,0.0008570000 270 | 648,0.0007920000 271 | 649,0.0007320000 272 | 650,0.0006770000 273 | 651,0.0006260000 274 | 652,0.0005790000 275 | 653,0.0005360000 276 | 654,0.0004960000 277 | 655,0.0004590000 278 | 656,0.0004250000 279 | 657,0.0003935000 280 | 658,0.0003645000 281 | 659,0.0003377000 282 | 660,0.0003129000 283 | 661,0.0002901000 284 | 662,0.0002689000 285 | 663,0.0002493000 286 | 664,0.0002313000 287 | 665,0.0002146000 288 | 666,0.0001991000 289 | 667,0.0001848000 290 | 668,0.0001716000 291 | 669,0.0001593000 292 | 670,0.0001480000 293 | 671,0.0001375000 294 | 672,0.0001277000 295 | 673,0.0001187000 296 | 674,0.0001104000 297 | 675,0.0001026000 298 | 676,0.0000954000 299 | 677,0.0000888000 300 | 678,0.0000826000 301 | 679,0.0000769000 302 | 680,0.0000715000 303 | 681,0.0000666000 304 | 682,0.0000620000 305 | 683,0.0000578000 306 | 684,0.0000538000 307 | 685,0.0000501000 308 | 686,0.0000467000 309 | 687,0.0000436000 310 | 688,0.0000406000 311 | 689,0.0000378900 312 | 690,0.0000353300 313 | 691,0.0000329500 314 | 692,0.0000307500 315 | 693,0.0000287000 316 | 694,0.0000267900 317 | 695,0.0000250100 318 | 696,0.0000233600 319 | 697,0.0000218200 320 | 698,0.0000203800 321 | 699,0.0000190500 322 | 700,0.0000178000 323 | 701,0.0000166400 324 | 702,0.0000155600 325 | 703,0.0000145400 326 | 704,0.0000136000 327 | 705,0.0000127300 328 | 706,0.0000119100 329 | 707,0.0000111400 330 | 708,0.0000104300 331 | 709,0.0000097600 332 | 710,0.0000091400 333 | 711,0.0000085600 334 | 712,0.0000080200 335 | 713,0.0000075100 336 | 714,0.0000070400 337 | 715,0.0000066000 338 | 716,0.0000061800 339 | 717,0.0000058000 340 | 718,0.0000054400 341 | 719,0.0000051000 342 | 720,0.0000047800 343 | 721,0.0000044900 344 | 722,0.0000042100 345 | 723,0.0000039510 346 | 724,0.0000037090 347 | 725,0.0000034820 348 | 726,0.0000032700 349 | 727,0.0000030700 350 | 728,0.0000028840 351 | 729,0.0000027100 352 | 730,0.0000025460 353 | 731,0.0000023930 354 | 732,0.0000022500 355 | 733,0.0000021150 356 | 734,0.0000019890 357 | 735,0.0000018700 358 | 736,0.0000017590 359 | 737,0.0000016550 360 | 738,0.0000015570 361 | 739,0.0000014660 362 | 740,0.0000013790 363 | 741,0.0000012990 364 | 742,0.0000012230 365 | 743,0.0000011510 366 | 744,0.0000010840 367 | 745,0.0000010220 368 | 746,0.0000009620 369 | 747,0.0000009070 370 | 748,0.0000008550 371 | 749,0.0000008060 372 | 750,0.0000007600 373 | 751,0.0000007160 374 | 752,0.0000006750 375 | 753,0.0000006370 376 | 754,0.0000006010 377 | 755,0.0000005670 378 | 756,0.0000005350 379 | 757,0.0000005050 380 | 758,0.0000004770 381 | 759,0.0000004500 382 | 760,0.0000004250 383 | 761,0.0000004010 384 | 762,0.0000003790 385 | 763,0.0000003580 386 | 764,0.0000003382 387 | 765,0.0000003196 388 | 766,0.0000003021 389 | 767,0.0000002855 390 | 768,0.0000002699 391 | 769,0.0000002552 392 | 770,0.0000002413 393 | 771,0.0000002282 394 | 772,0.0000002159 395 | 773,0.0000002042 396 | 774,0.0000001932 397 | 775,0.0000001829 398 | 776,0.0000001731 399 | 777,0.0000001638 400 | 778,0.0000001551 401 | 779,0.0000001468 402 | 780,0.0000001390 -------------------------------------------------------------------------------- /chromaticity_diagram.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import matplotlib.pyplot as plt 4 | from matplotlib.patches import Polygon 5 | from matplotlib.lines import Line2D 6 | from matplotlib.ticker import MultipleLocator 7 | 8 | from common import * 9 | 10 | xyz_cc = load_xyz_cc() 11 | rgb_cc = load_rgb_cc() 12 | 13 | def normal_direction(x, y): 14 | '''计算离散曲线每一点的法向cos和sin值.''' 15 | xy = np.column_stack((x, y)) 16 | dxdy = np.zeros_like(xy) 17 | dxdy[0] = xy[1] - xy[0] 18 | dxdy[-1] = xy[-1] - xy[-2] 19 | dxdy[1:-1] = xy[2:] - xy[:-2] 20 | dx, dy = dxdy[:, 0], dxdy[:, 1] 21 | dl = np.hypot(dx, dy) 22 | dl[dl <= 0] = np.nan 23 | cos = -dy / dl 24 | sin = dx / dl 25 | 26 | return cos, sin 27 | 28 | class BaseDiagram: 29 | '''色度图基类.''' 30 | def __init__(self, ax=None): 31 | '''没有ax时创建fig和ax.''' 32 | if ax is None: 33 | _, self.ax = plt.subplots() 34 | else: 35 | self.ax = ax 36 | 37 | def save_fig(self, filepath): 38 | '''保存图片.''' 39 | self.ax.figure.savefig(filepath, dpi=300, bbox_inches='tight') 40 | 41 | class xyDiagram(BaseDiagram): 42 | @staticmethod 43 | def get_grid(): 44 | '''生成RGB数组基于的网格.''' 45 | N = 256 46 | x = np.linspace(0, 1, N) 47 | y = np.linspace(0, 1, N).clip(1e-3, 1) 48 | x, y = np.meshgrid(x, y) 49 | 50 | return x, y 51 | 52 | def get_RGB(self): 53 | '''生成传给imshow的RGB数组.''' 54 | x, y = self.get_grid() 55 | Y = np.ones_like(y) 56 | xyY = np.dstack((x, y, Y)) 57 | XYZ = xyY_to_XYZ(xyY) 58 | RGB = XYZ_to_sRGB(XYZ) 59 | RGB = move_toward_white(RGB) 60 | RGB = normalize_by_maximum(RGB) 61 | RGB = gamma_encoding(RGB) 62 | 63 | return RGB 64 | 65 | def set_axes(self): 66 | '''设置ax的范围, 刻度和标签.''' 67 | self.ax.set_aspect('equal') 68 | self.ax.set_xlim(-0.1, 0.9) 69 | self.ax.set_ylim(-0.1, 1.0) 70 | self.ax.xaxis.set_major_locator(MultipleLocator(0.1)) 71 | self.ax.yaxis.set_major_locator(MultipleLocator(0.1)) 72 | self.ax.tick_params(labelsize='small') 73 | self.ax.grid(ls='--', lw=0.5, c='k') 74 | self.ax.set_xlabel('x', fontsize='large') 75 | self.ax.set_ylabel('y', fontsize='large', rotation=0) 76 | 77 | def add_chromaticity(self): 78 | '''添加填色后的色度区域.''' 79 | patch = Polygon( 80 | xy=xyz_cc[['x', 'y']], 81 | transform=self.ax.transData, 82 | ec='k', fc='none', lw=1 83 | ) 84 | self.ax.add_patch(patch) 85 | 86 | self.ax.imshow( 87 | self.get_RGB(), 88 | origin='lower', 89 | extent=[0, 1, 0, 1], 90 | interpolation='bilinear', 91 | clip_path=patch 92 | ) 93 | 94 | def add_sRGB_gamut(self): 95 | '''添加三角形的sRGB色域.''' 96 | xr, yr = 0.64, 0.33 97 | xg, yg = 0.30, 0.60 98 | xb, yb = 0.15, 0.06 99 | xw, yw = 0.3127, 0.3290 100 | 101 | patch = Polygon( 102 | xy=np.array([[xr, yr], [xg, yg], [xb, yb]]), 103 | transform=self.ax.transData, 104 | ec='k', fc='none', lw=1 105 | ) 106 | self.ax.add_patch(patch) 107 | 108 | self.ax.text(xr, yr - 0.01, 'R', ha='center', va='top') 109 | self.ax.text(xg, yg + 0.01, 'G', ha='center', va='bottom') 110 | self.ax.text(xb, yb + 0.01, 'B', ha='right', va='bottom') 111 | self.ax.text(xw, yw - 0.02, 'D65', ha='center', va='top') 112 | self.ax.scatter( 113 | [xr, xg, xb, xw], 114 | [yr, yg, yb, yw], 115 | c='k', ec='k', fc='w', s=10 116 | ) 117 | 118 | line = Line2D( 119 | [], [], 120 | ls='', marker='^', 121 | mec='k', mfc='none', ms=10, 122 | label='sRGB' 123 | ) 124 | 125 | self.ax.legend( 126 | handles=[line], 127 | fontsize='medium', 128 | handletextpad=0.2, 129 | fancybox=False, 130 | framealpha=1 131 | ) 132 | 133 | def add_ticks(self): 134 | '''添加波长刻度.''' 135 | major_len = 0.03 136 | minor_len = 0.5 * major_len 137 | label_len = 1.4 * major_len 138 | major_ticks = [380, *range(460, 601, 10), 620, 700] 139 | minor_ticks = range(380, 781, 5) 140 | 141 | x, y = xyz_cc['x'], xyz_cc['y'] 142 | cos, sin = normal_direction(x, y) 143 | cs = pd.DataFrame( 144 | data=np.column_stack((cos, sin)), 145 | index=xyz_cc.index, 146 | columns=['cos', 'sin'] 147 | ) 148 | cs.loc[(cs.index < 430) | (cs.index > 660)] = np.nan 149 | cs = cs.ffill().bfill() 150 | cos, sin = cs['cos'], cs['sin'] 151 | 152 | tick_df = pd.DataFrame({ 153 | 'x0': x, 154 | 'x1': x + major_len * cos, 155 | 'x2': x + minor_len * cos, 156 | 'x3': x + label_len * cos, 157 | 'y0': y, 158 | 'y1': y + major_len * sin, 159 | 'y2': y + minor_len * sin, 160 | 'y3': y + label_len * sin 161 | }) 162 | major_df = tick_df.loc[major_ticks] 163 | minor_df = tick_df.loc[minor_ticks] 164 | 165 | for row in major_df.itertuples(): 166 | self.ax.plot( 167 | [row.x0, row.x1], 168 | [row.y0, row.y1], 169 | c='k', lw=0.6 170 | ) 171 | self.ax.text( 172 | row.x3, row.y3, row.Index, 173 | ha='left' if row.Index > 520 else 'right', 174 | va='center', 175 | fontsize='x-small' 176 | ) 177 | 178 | for row in minor_df.itertuples(): 179 | self.ax.plot( 180 | [row.x0, row.x2], 181 | [row.y0, row.y2], 182 | c='k', lw=0.6 183 | ) 184 | 185 | def draw(self): 186 | '''绘制色度图.''' 187 | self.set_axes() 188 | self.add_chromaticity() 189 | self.add_sRGB_gamut() 190 | self.add_ticks() 191 | 192 | class rgDiagram(BaseDiagram): 193 | @staticmethod 194 | def get_grid(): 195 | '''生成RGB数组基于的网格.''' 196 | N = 256 197 | x = np.linspace(-1.5, 2, N) 198 | y = np.linspace(-1.5, 2, N).clip(1e-3, 2) 199 | x, y = np.meshgrid(x, y) 200 | 201 | return x, y 202 | 203 | def get_RGB(self): 204 | '''生成传给imshow的RGB数组.''' 205 | r, g = self.get_grid() 206 | G = np.ones_like(g) 207 | rgG = np.dstack((r, g, G)) 208 | RGB = xyY_to_XYZ(rgG) 209 | RGB = XYZ_to_sRGB(RGB_to_XYZ(RGB)) 210 | RGB = move_toward_white(RGB) 211 | RGB = normalize_by_maximum(RGB) 212 | RGB = gamma_encoding(RGB) 213 | 214 | return RGB 215 | 216 | def set_axes(self): 217 | '''设置ax的范围, 刻度和标签.''' 218 | self.ax.set_aspect('equal') 219 | self.ax.set_xlim(-2, 1.5) 220 | self.ax.set_ylim(-0.5, 3) 221 | self.ax.xaxis.set_major_locator(MultipleLocator(0.5)) 222 | self.ax.yaxis.set_major_locator(MultipleLocator(0.5)) 223 | self.ax.tick_params(labelsize='small') 224 | self.ax.grid(ls='--', lw=0.5, c='k') 225 | self.ax.set_xlabel('x', fontsize='large') 226 | self.ax.set_ylabel('y', fontsize='large', rotation=0) 227 | 228 | def add_chromaticity(self): 229 | '''添加填色后的色度区域.''' 230 | patch = Polygon( 231 | xy=rgb_cc[['r', 'g']], 232 | transform=self.ax.transData, 233 | ec='k', fc='none', lw=1 234 | ) 235 | self.ax.add_patch(patch) 236 | 237 | self.ax.imshow( 238 | self.get_RGB(), 239 | origin='lower', 240 | extent=[-1.5, 2, -1.5, 2], 241 | interpolation='bilinear', 242 | clip_path=patch 243 | ) 244 | 245 | def add_XYZ_triangle(self): 246 | '''添加XYZ三角连线.''' 247 | rx, gx = 1.2749, -0.2777 248 | ry, gy = -1.7400, 2.7677 249 | rz, gz = -0.7430, 0.1408 250 | patch = Polygon( 251 | xy=np.array([[rx, gx], [ry, gy], [rz, gz]]), 252 | transform=self.ax.transData, 253 | ec='k', fc='none', lw=0.8 254 | ) 255 | self.ax.add_patch(patch) 256 | 257 | self.ax.text(rx + 0.05, gx, 'X', ha='left', va='top') 258 | self.ax.text(ry - 0.05, gy, 'Y', ha='right', va='bottom') 259 | self.ax.text(rz - 0.05, gz, 'Z', ha='right', va='top') 260 | self.ax.scatter( 261 | [rx, ry, rz], [gx, gy, gz], 262 | c='k', ec='k', fc='w', s=10 263 | ) 264 | 265 | def add_ticks(self): 266 | '''添加波长刻度.''' 267 | major_len = 0.08 268 | minor_len = 0.5 * major_len 269 | label_len = 1.4 * major_len 270 | major_ticks = [380, *range(480, 581, 10), 600, 700] 271 | minor_ticks = range(380, 701, 5) 272 | 273 | x, y = rgb_cc['r'], rgb_cc['g'] 274 | cos, sin = normal_direction(x, y) 275 | cs = pd.DataFrame( 276 | data=np.column_stack((cos, sin)), 277 | index=rgb_cc.index, 278 | columns=['cos', 'sin'] 279 | ) 280 | cs.loc[(cs.index < 430) | (cs.index > 660)] = np.nan 281 | cs = cs.ffill().bfill() 282 | cos, sin = cs['cos'], cs['sin'] 283 | 284 | tick_df = pd.DataFrame({ 285 | 'x0': x, 286 | 'x1': x + major_len * cos, 287 | 'x2': x + minor_len * cos, 288 | 'x3': x + label_len * cos, 289 | 'y0': y, 290 | 'y1': y + major_len * sin, 291 | 'y2': y + minor_len * sin, 292 | 'y3': y + label_len * sin 293 | }) 294 | major_df = tick_df.loc[major_ticks] 295 | minor_df = tick_df.loc[minor_ticks] 296 | 297 | for row in major_df.itertuples(): 298 | self.ax.plot( 299 | [row.x0, row.x1], 300 | [row.y0, row.y1], 301 | c='k', lw=0.6 302 | ) 303 | self.ax.text( 304 | row.x3, row.y3, row.Index, 305 | ha='left' if row.Index > 510 else 'right', 306 | va='center', 307 | fontsize='x-small' 308 | ) 309 | 310 | for row in minor_df.itertuples(): 311 | self.ax.plot( 312 | [row.x0, row.x2], 313 | [row.y0, row.y2], 314 | c='k', lw=0.6 315 | ) 316 | 317 | def draw(self): 318 | '''绘制色度图.''' 319 | self.set_axes() 320 | self.add_chromaticity() 321 | self.add_XYZ_triangle() 322 | self.add_ticks() 323 | 324 | if __name__ == '__main__': 325 | xy_diagram = xyDiagram() 326 | xy_diagram.draw() 327 | xy_diagram.save_fig('./fig/xy_chromaticity_diagram.png') 328 | 329 | rg_diagram = rgDiagram() 330 | rg_diagram.draw() 331 | rg_diagram.save_fig('./fig/rg_chromaticity_diagram.png') -------------------------------------------------------------------------------- /data/cie_1924_photopic_lef.csv: -------------------------------------------------------------------------------- 1 | wavelength,lef 2 | 360,0.0000039170000 3 | 361,0.0000043935810 4 | 362,0.0000049296040 5 | 363,0.0000055321360 6 | 364,0.0000062082450 7 | 365,0.0000069650000 8 | 366,0.0000078132190 9 | 367,0.0000087673360 10 | 368,0.0000098398440 11 | 369,0.0000110432300 12 | 370,0.0000123900000 13 | 371,0.0000138864100 14 | 372,0.0000155572800 15 | 373,0.0000174429600 16 | 374,0.0000195837500 17 | 375,0.0000220200000 18 | 376,0.0000248396500 19 | 377,0.0000280412600 20 | 378,0.0000315310400 21 | 379,0.0000352152100 22 | 380,0.0000390000000 23 | 381,0.0000428264000 24 | 382,0.0000469146000 25 | 383,0.0000515896000 26 | 384,0.0000571764000 27 | 385,0.0000640000000 28 | 386,0.0000723442100 29 | 387,0.0000822122400 30 | 388,0.0000935081600 31 | 389,0.0001061361000 32 | 390,0.0001200000000 33 | 391,0.0001349840000 34 | 392,0.0001514920000 35 | 393,0.0001702080000 36 | 394,0.0001918160000 37 | 395,0.0002170000000 38 | 396,0.0002469067000 39 | 397,0.0002812400000 40 | 398,0.0003185200000 41 | 399,0.0003572667000 42 | 400,0.0003960000000 43 | 401,0.0004337147000 44 | 402,0.0004730240000 45 | 403,0.0005178760000 46 | 404,0.0005722187000 47 | 405,0.0006400000000 48 | 406,0.0007245600000 49 | 407,0.0008255000000 50 | 408,0.0009411600000 51 | 409,0.0010698800000 52 | 410,0.0012100000000 53 | 411,0.0013620910000 54 | 412,0.0015307520000 55 | 413,0.0017203680000 56 | 414,0.0019353230000 57 | 415,0.0021800000000 58 | 416,0.0024548000000 59 | 417,0.0027640000000 60 | 418,0.0031178000000 61 | 419,0.0035264000000 62 | 420,0.0040000000000 63 | 421,0.0045462400000 64 | 422,0.0051593200000 65 | 423,0.0058292800000 66 | 424,0.0065461600000 67 | 425,0.0073000000000 68 | 426,0.0080865070000 69 | 427,0.0089087200000 70 | 428,0.0097676800000 71 | 429,0.0106644300000 72 | 430,0.0116000000000 73 | 431,0.0125731700000 74 | 432,0.0135827200000 75 | 433,0.0146296800000 76 | 434,0.0157150900000 77 | 435,0.0168400000000 78 | 436,0.0180073600000 79 | 437,0.0192144800000 80 | 438,0.0204539200000 81 | 439,0.0217182400000 82 | 440,0.0230000000000 83 | 441,0.0242946100000 84 | 442,0.0256102400000 85 | 443,0.0269585700000 86 | 444,0.0283512500000 87 | 445,0.0298000000000 88 | 446,0.0313108300000 89 | 447,0.0328836800000 90 | 448,0.0345211200000 91 | 449,0.0362257100000 92 | 450,0.0380000000000 93 | 451,0.0398466700000 94 | 452,0.0417680000000 95 | 453,0.0437660000000 96 | 454,0.0458426700000 97 | 455,0.0480000000000 98 | 456,0.0502436800000 99 | 457,0.0525730400000 100 | 458,0.0549805600000 101 | 459,0.0574587200000 102 | 460,0.0600000000000 103 | 461,0.0626019700000 104 | 462,0.0652775200000 105 | 463,0.0680420800000 106 | 464,0.0709110900000 107 | 465,0.0739000000000 108 | 466,0.0770160000000 109 | 467,0.0802664000000 110 | 468,0.0836668000000 111 | 469,0.0872328000000 112 | 470,0.0909800000000 113 | 471,0.0949175500000 114 | 472,0.0990458400000 115 | 473,0.1033674000000 116 | 474,0.1078846000000 117 | 475,0.1126000000000 118 | 476,0.1175320000000 119 | 477,0.1226744000000 120 | 478,0.1279928000000 121 | 479,0.1334528000000 122 | 480,0.1390200000000 123 | 481,0.1446764000000 124 | 482,0.1504693000000 125 | 483,0.1564619000000 126 | 484,0.1627177000000 127 | 485,0.1693000000000 128 | 486,0.1762431000000 129 | 487,0.1835581000000 130 | 488,0.1912735000000 131 | 489,0.1994180000000 132 | 490,0.2080200000000 133 | 491,0.2171199000000 134 | 492,0.2267345000000 135 | 493,0.2368571000000 136 | 494,0.2474812000000 137 | 495,0.2586000000000 138 | 496,0.2701849000000 139 | 497,0.2822939000000 140 | 498,0.2950505000000 141 | 499,0.3085780000000 142 | 500,0.3230000000000 143 | 501,0.3384021000000 144 | 502,0.3546858000000 145 | 503,0.3716986000000 146 | 504,0.3892875000000 147 | 505,0.4073000000000 148 | 506,0.4256299000000 149 | 507,0.4443096000000 150 | 508,0.4633944000000 151 | 509,0.4829395000000 152 | 510,0.5030000000000 153 | 511,0.5235693000000 154 | 512,0.5445120000000 155 | 513,0.5656900000000 156 | 514,0.5869653000000 157 | 515,0.6082000000000 158 | 516,0.6293456000000 159 | 517,0.6503068000000 160 | 518,0.6708752000000 161 | 519,0.6908424000000 162 | 520,0.7100000000000 163 | 521,0.7281852000000 164 | 522,0.7454636000000 165 | 523,0.7619694000000 166 | 524,0.7778368000000 167 | 525,0.7932000000000 168 | 526,0.8081104000000 169 | 527,0.8224962000000 170 | 528,0.8363068000000 171 | 529,0.8494916000000 172 | 530,0.8620000000000 173 | 531,0.8738108000000 174 | 532,0.8849624000000 175 | 533,0.8954936000000 176 | 534,0.9054432000000 177 | 535,0.9148501000000 178 | 536,0.9237348000000 179 | 537,0.9320924000000 180 | 538,0.9399226000000 181 | 539,0.9472252000000 182 | 540,0.9540000000000 183 | 541,0.9602561000000 184 | 542,0.9660074000000 185 | 543,0.9712606000000 186 | 544,0.9760225000000 187 | 545,0.9803000000000 188 | 546,0.9840924000000 189 | 547,0.9874182000000 190 | 548,0.9903128000000 191 | 549,0.9928116000000 192 | 550,0.9949501000000 193 | 551,0.9967108000000 194 | 552,0.9980983000000 195 | 553,0.9991120000000 196 | 554,0.9997482000000 197 | 555,1.0000000000000 198 | 556,0.9998567000000 199 | 557,0.9993046000000 200 | 558,0.9983255000000 201 | 559,0.9968987000000 202 | 560,0.9950000000000 203 | 561,0.9926005000000 204 | 562,0.9897426000000 205 | 563,0.9864444000000 206 | 564,0.9827241000000 207 | 565,0.9786000000000 208 | 566,0.9740837000000 209 | 567,0.9691712000000 210 | 568,0.9638568000000 211 | 569,0.9581349000000 212 | 570,0.9520000000000 213 | 571,0.9454504000000 214 | 572,0.9384992000000 215 | 573,0.9311628000000 216 | 574,0.9234576000000 217 | 575,0.9154000000000 218 | 576,0.9070064000000 219 | 577,0.8982772000000 220 | 578,0.8892048000000 221 | 579,0.8797816000000 222 | 580,0.8700000000000 223 | 581,0.8598613000000 224 | 582,0.8493920000000 225 | 583,0.8386220000000 226 | 584,0.8275813000000 227 | 585,0.8163000000000 228 | 586,0.8047947000000 229 | 587,0.7930820000000 230 | 588,0.7811920000000 231 | 589,0.7691547000000 232 | 590,0.7570000000000 233 | 591,0.7447541000000 234 | 592,0.7324224000000 235 | 593,0.7200036000000 236 | 594,0.7074965000000 237 | 595,0.6949000000000 238 | 596,0.6822192000000 239 | 597,0.6694716000000 240 | 598,0.6566744000000 241 | 599,0.6438448000000 242 | 600,0.6310000000000 243 | 601,0.6181555000000 244 | 602,0.6053144000000 245 | 603,0.5924756000000 246 | 604,0.5796379000000 247 | 605,0.5668000000000 248 | 606,0.5539611000000 249 | 607,0.5411372000000 250 | 608,0.5283528000000 251 | 609,0.5156323000000 252 | 610,0.5030000000000 253 | 611,0.4904688000000 254 | 612,0.4780304000000 255 | 613,0.4656776000000 256 | 614,0.4534032000000 257 | 615,0.4412000000000 258 | 616,0.4290800000000 259 | 617,0.4170360000000 260 | 618,0.4050320000000 261 | 619,0.3930320000000 262 | 620,0.3810000000000 263 | 621,0.3689184000000 264 | 622,0.3568272000000 265 | 623,0.3447768000000 266 | 624,0.3328176000000 267 | 625,0.3210000000000 268 | 626,0.3093381000000 269 | 627,0.2978504000000 270 | 628,0.2865936000000 271 | 629,0.2756245000000 272 | 630,0.2650000000000 273 | 631,0.2547632000000 274 | 632,0.2448896000000 275 | 633,0.2353344000000 276 | 634,0.2260528000000 277 | 635,0.2170000000000 278 | 636,0.2081616000000 279 | 637,0.1995488000000 280 | 638,0.1911552000000 281 | 639,0.1829744000000 282 | 640,0.1750000000000 283 | 641,0.1672235000000 284 | 642,0.1596464000000 285 | 643,0.1522776000000 286 | 644,0.1451259000000 287 | 645,0.1382000000000 288 | 646,0.1315003000000 289 | 647,0.1250248000000 290 | 648,0.1187792000000 291 | 649,0.1127691000000 292 | 650,0.1070000000000 293 | 651,0.1014762000000 294 | 652,0.0961886400000 295 | 653,0.0911229600000 296 | 654,0.0862648500000 297 | 655,0.0816000000000 298 | 656,0.0771206400000 299 | 657,0.0728255200000 300 | 658,0.0687100800000 301 | 659,0.0647697600000 302 | 660,0.0610000000000 303 | 661,0.0573962100000 304 | 662,0.0539550400000 305 | 663,0.0506737600000 306 | 664,0.0475496500000 307 | 665,0.0445800000000 308 | 666,0.0417587200000 309 | 667,0.0390849600000 310 | 668,0.0365638400000 311 | 669,0.0342004800000 312 | 670,0.0320000000000 313 | 671,0.0299626100000 314 | 672,0.0280766400000 315 | 673,0.0263293600000 316 | 674,0.0247080500000 317 | 675,0.0232000000000 318 | 676,0.0218007700000 319 | 677,0.0205011200000 320 | 678,0.0192810800000 321 | 679,0.0181206900000 322 | 680,0.0170000000000 323 | 681,0.0159037900000 324 | 682,0.0148371800000 325 | 683,0.0138106800000 326 | 684,0.0128347800000 327 | 685,0.0119200000000 328 | 686,0.0110683100000 329 | 687,0.0102733900000 330 | 688,0.0095333110000 331 | 689,0.0088461570000 332 | 690,0.0082100000000 333 | 691,0.0076237810000 334 | 692,0.0070854240000 335 | 693,0.0065914760000 336 | 694,0.0061384850000 337 | 695,0.0057230000000 338 | 696,0.0053430590000 339 | 697,0.0049957960000 340 | 698,0.0046764040000 341 | 699,0.0043800750000 342 | 700,0.0041020000000 343 | 701,0.0038384530000 344 | 702,0.0035890990000 345 | 703,0.0033542190000 346 | 704,0.0031340930000 347 | 705,0.0029290000000 348 | 706,0.0027381390000 349 | 707,0.0025598760000 350 | 708,0.0023932440000 351 | 709,0.0022372750000 352 | 710,0.0020910000000 353 | 711,0.0019535870000 354 | 712,0.0018245800000 355 | 713,0.0017035800000 356 | 714,0.0015901870000 357 | 715,0.0014840000000 358 | 716,0.0013844960000 359 | 717,0.0012912680000 360 | 718,0.0012040920000 361 | 719,0.0011227440000 362 | 720,0.0010470000000 363 | 721,0.0009765896000 364 | 722,0.0009111088000 365 | 723,0.0008501332000 366 | 724,0.0007932384000 367 | 725,0.0007400000000 368 | 726,0.0006900827000 369 | 727,0.0006433100000 370 | 728,0.0005994960000 371 | 729,0.0005584547000 372 | 730,0.0005200000000 373 | 731,0.0004839136000 374 | 732,0.0004500528000 375 | 733,0.0004183452000 376 | 734,0.0003887184000 377 | 735,0.0003611000000 378 | 736,0.0003353835000 379 | 737,0.0003114404000 380 | 738,0.0002891656000 381 | 739,0.0002684539000 382 | 740,0.0002492000000 383 | 741,0.0002313019000 384 | 742,0.0002146856000 385 | 743,0.0001992884000 386 | 744,0.0001850475000 387 | 745,0.0001719000000 388 | 746,0.0001597781000 389 | 747,0.0001486044000 390 | 748,0.0001383016000 391 | 749,0.0001287925000 392 | 750,0.0001200000000 393 | 751,0.0001118595000 394 | 752,0.0001043224000 395 | 753,0.0000973356000 396 | 754,0.0000908458700 397 | 755,0.0000848000000 398 | 756,0.0000791466700 399 | 757,0.0000738580000 400 | 758,0.0000689160000 401 | 759,0.0000643026700 402 | 760,0.0000600000000 403 | 761,0.0000559818700 404 | 762,0.0000522256000 405 | 763,0.0000487184000 406 | 764,0.0000454474700 407 | 765,0.0000424000000 408 | 766,0.0000395610400 409 | 767,0.0000369151200 410 | 768,0.0000344486800 411 | 769,0.0000321481600 412 | 770,0.0000300000000 413 | 771,0.0000279912500 414 | 772,0.0000261135600 415 | 773,0.0000243602400 416 | 774,0.0000227246100 417 | 775,0.0000212000000 418 | 776,0.0000197785500 419 | 777,0.0000184528500 420 | 778,0.0000172168700 421 | 779,0.0000160645900 422 | 780,0.0000149900000 423 | 781,0.0000139872800 424 | 782,0.0000130515500 425 | 783,0.0000121781800 426 | 784,0.0000113625400 427 | 785,0.0000106000000 428 | 786,0.0000098858770 429 | 787,0.0000092173040 430 | 788,0.0000085923620 431 | 789,0.0000080091330 432 | 790,0.0000074657000 433 | 791,0.0000069595670 434 | 792,0.0000064879950 435 | 793,0.0000060486990 436 | 794,0.0000056393960 437 | 795,0.0000052578000 438 | 796,0.0000049017710 439 | 797,0.0000045697200 440 | 798,0.0000042601940 441 | 799,0.0000039717390 442 | 800,0.0000037029000 443 | 801,0.0000034521630 444 | 802,0.0000032183020 445 | 803,0.0000030003000 446 | 804,0.0000027971390 447 | 805,0.0000026078000 448 | 806,0.0000024312200 449 | 807,0.0000022665310 450 | 808,0.0000021130130 451 | 809,0.0000019699430 452 | 810,0.0000018366000 453 | 811,0.0000017122300 454 | 812,0.0000015962280 455 | 813,0.0000014880900 456 | 814,0.0000013873140 457 | 815,0.0000012934000 458 | 816,0.0000012058200 459 | 817,0.0000011241430 460 | 818,0.0000010480090 461 | 819,0.0000009770578 462 | 820,0.0000009109300 463 | 821,0.0000008492513 464 | 822,0.0000007917212 465 | 823,0.0000007380904 466 | 824,0.0000006881098 467 | 825,0.0000006415300 468 | 826,0.0000005980895 469 | 827,0.0000005575746 470 | 828,0.0000005198080 471 | 829,0.0000004846123 472 | 830,0.0000004518100 -------------------------------------------------------------------------------- /data/cie_1931_2deg_xyz_cc.csv: -------------------------------------------------------------------------------- 1 | wavelength,x,y,z 2 | 360,0.175560,0.005294,0.819146 3 | 361,0.175483,0.005286,0.819231 4 | 362,0.175400,0.005279,0.819321 5 | 363,0.175317,0.005271,0.819412 6 | 364,0.175237,0.005263,0.819500 7 | 365,0.175161,0.005256,0.819582 8 | 366,0.175088,0.005247,0.819665 9 | 367,0.175015,0.005236,0.819749 10 | 368,0.174945,0.005226,0.819829 11 | 369,0.174880,0.005221,0.819899 12 | 370,0.174821,0.005221,0.819959 13 | 371,0.174770,0.005229,0.820001 14 | 372,0.174722,0.005238,0.820040 15 | 373,0.174665,0.005236,0.820098 16 | 374,0.174595,0.005218,0.820187 17 | 375,0.174510,0.005182,0.820309 18 | 376,0.174409,0.005127,0.820464 19 | 377,0.174308,0.005068,0.820624 20 | 378,0.174222,0.005017,0.820761 21 | 379,0.174156,0.004981,0.820863 22 | 380,0.174112,0.004964,0.820924 23 | 381,0.174088,0.004964,0.820948 24 | 382,0.174073,0.004973,0.820955 25 | 383,0.174057,0.004982,0.820961 26 | 384,0.174036,0.004986,0.820978 27 | 385,0.174008,0.004981,0.821012 28 | 386,0.173972,0.004964,0.821064 29 | 387,0.173932,0.004943,0.821125 30 | 388,0.173889,0.004926,0.821185 31 | 389,0.173845,0.004916,0.821239 32 | 390,0.173801,0.004915,0.821284 33 | 391,0.173754,0.004925,0.821321 34 | 392,0.173705,0.004937,0.821358 35 | 393,0.173655,0.004944,0.821401 36 | 394,0.173606,0.004940,0.821454 37 | 395,0.173560,0.004923,0.821517 38 | 396,0.173514,0.004895,0.821590 39 | 397,0.173468,0.004865,0.821667 40 | 398,0.173424,0.004836,0.821740 41 | 399,0.173380,0.004813,0.821807 42 | 400,0.173337,0.004797,0.821866 43 | 401,0.173291,0.004786,0.821923 44 | 402,0.173238,0.004779,0.821983 45 | 403,0.173174,0.004775,0.822051 46 | 404,0.173101,0.004774,0.822125 47 | 405,0.173021,0.004775,0.822204 48 | 406,0.172934,0.004781,0.822285 49 | 407,0.172843,0.004791,0.822366 50 | 408,0.172751,0.004799,0.822450 51 | 409,0.172662,0.004802,0.822536 52 | 410,0.172577,0.004799,0.822624 53 | 411,0.172489,0.004795,0.822715 54 | 412,0.172396,0.004796,0.822808 55 | 413,0.172296,0.004803,0.822901 56 | 414,0.172192,0.004815,0.822993 57 | 415,0.172087,0.004833,0.823081 58 | 416,0.171982,0.004855,0.823163 59 | 417,0.171871,0.004889,0.823240 60 | 418,0.171741,0.004939,0.823319 61 | 419,0.171587,0.005010,0.823402 62 | 420,0.171407,0.005102,0.823490 63 | 421,0.171206,0.005211,0.823583 64 | 422,0.170993,0.005334,0.823674 65 | 423,0.170771,0.005470,0.823759 66 | 424,0.170541,0.005621,0.823838 67 | 425,0.170301,0.005789,0.823911 68 | 426,0.170050,0.005974,0.823976 69 | 427,0.169786,0.006177,0.824037 70 | 428,0.169505,0.006398,0.824097 71 | 429,0.169203,0.006639,0.824158 72 | 430,0.168878,0.006900,0.824222 73 | 431,0.168525,0.007184,0.824291 74 | 432,0.168146,0.007491,0.824363 75 | 433,0.167746,0.007821,0.824433 76 | 434,0.167328,0.008175,0.824496 77 | 435,0.166895,0.008556,0.824549 78 | 436,0.166446,0.008964,0.824589 79 | 437,0.165977,0.009402,0.824622 80 | 438,0.165483,0.009865,0.824652 81 | 439,0.164963,0.010351,0.824687 82 | 440,0.164412,0.010858,0.824731 83 | 441,0.163828,0.011385,0.824787 84 | 442,0.163210,0.011937,0.824853 85 | 443,0.162552,0.012520,0.824928 86 | 444,0.161851,0.013137,0.825011 87 | 445,0.161105,0.013793,0.825102 88 | 446,0.160310,0.014491,0.825199 89 | 447,0.159466,0.015232,0.825302 90 | 448,0.158573,0.016015,0.825412 91 | 449,0.157631,0.016840,0.825529 92 | 450,0.156641,0.017705,0.825654 93 | 451,0.155605,0.018609,0.825786 94 | 452,0.154525,0.019556,0.825920 95 | 453,0.153397,0.020554,0.826049 96 | 454,0.152219,0.021612,0.826169 97 | 455,0.150985,0.022740,0.826274 98 | 456,0.149691,0.023950,0.826359 99 | 457,0.148337,0.025247,0.826416 100 | 458,0.146928,0.026635,0.826437 101 | 459,0.145468,0.028118,0.826413 102 | 460,0.143960,0.029703,0.826337 103 | 461,0.142405,0.031394,0.826201 104 | 462,0.140796,0.033213,0.825991 105 | 463,0.139121,0.035201,0.825679 106 | 464,0.137364,0.037403,0.825233 107 | 465,0.135503,0.039879,0.824618 108 | 466,0.133509,0.042692,0.823798 109 | 467,0.131371,0.045876,0.822753 110 | 468,0.129086,0.049450,0.821464 111 | 469,0.126662,0.053426,0.819912 112 | 470,0.124118,0.057803,0.818079 113 | 471,0.121469,0.062588,0.815944 114 | 472,0.118701,0.067830,0.813468 115 | 473,0.115807,0.073581,0.810612 116 | 474,0.112776,0.079896,0.807328 117 | 475,0.109594,0.086843,0.803563 118 | 476,0.106261,0.094486,0.799253 119 | 477,0.102776,0.102864,0.794360 120 | 478,0.099128,0.112007,0.788865 121 | 479,0.095304,0.121945,0.782751 122 | 480,0.091294,0.132702,0.776004 123 | 481,0.087082,0.144317,0.768601 124 | 482,0.082680,0.156866,0.760455 125 | 483,0.078116,0.170420,0.751464 126 | 484,0.073437,0.185032,0.741531 127 | 485,0.068706,0.200723,0.730571 128 | 486,0.063993,0.217468,0.718539 129 | 487,0.059316,0.235254,0.705430 130 | 488,0.054667,0.254096,0.691238 131 | 489,0.050031,0.274002,0.675967 132 | 490,0.045391,0.294976,0.659633 133 | 491,0.040757,0.316981,0.642262 134 | 492,0.036195,0.339900,0.623905 135 | 493,0.031756,0.363598,0.604646 136 | 494,0.027494,0.387921,0.584584 137 | 495,0.023460,0.412703,0.563837 138 | 496,0.019705,0.437756,0.542539 139 | 497,0.016268,0.462955,0.520777 140 | 498,0.013183,0.488207,0.498610 141 | 499,0.010476,0.513404,0.476120 142 | 500,0.008168,0.538423,0.453409 143 | 501,0.006285,0.563068,0.430647 144 | 502,0.004875,0.587116,0.408008 145 | 503,0.003982,0.610447,0.385570 146 | 504,0.003636,0.633011,0.363352 147 | 505,0.003859,0.654823,0.341318 148 | 506,0.004646,0.675898,0.319456 149 | 507,0.006011,0.696120,0.297869 150 | 508,0.007988,0.715342,0.276670 151 | 509,0.010603,0.733413,0.255984 152 | 510,0.013870,0.750186,0.235943 153 | 511,0.017766,0.765612,0.216622 154 | 512,0.022244,0.779630,0.198126 155 | 513,0.027273,0.792104,0.180623 156 | 514,0.032820,0.802926,0.164254 157 | 515,0.038852,0.812016,0.149132 158 | 516,0.045328,0.819391,0.135281 159 | 517,0.052177,0.825164,0.122660 160 | 518,0.059326,0.829426,0.111249 161 | 519,0.066716,0.832274,0.101010 162 | 520,0.074302,0.833803,0.091894 163 | 521,0.082053,0.834090,0.083856 164 | 522,0.089942,0.833289,0.076769 165 | 523,0.097940,0.831593,0.070468 166 | 524,0.106021,0.829178,0.064801 167 | 525,0.114161,0.826207,0.059632 168 | 526,0.122347,0.822770,0.054882 169 | 527,0.130546,0.818928,0.050526 170 | 528,0.138702,0.814774,0.046523 171 | 529,0.146773,0.810395,0.042832 172 | 530,0.154722,0.805864,0.039414 173 | 531,0.162535,0.801238,0.036226 174 | 532,0.170237,0.796519,0.033244 175 | 533,0.177850,0.791687,0.030464 176 | 534,0.185391,0.786728,0.027881 177 | 535,0.192876,0.781629,0.025495 178 | 536,0.200309,0.776399,0.023292 179 | 537,0.207690,0.771055,0.021255 180 | 538,0.215030,0.765595,0.019375 181 | 539,0.222337,0.760020,0.017643 182 | 540,0.229620,0.754329,0.016051 183 | 541,0.236885,0.748524,0.014591 184 | 542,0.244133,0.742614,0.013253 185 | 543,0.251363,0.736606,0.012031 186 | 544,0.258578,0.730507,0.010916 187 | 545,0.265775,0.724324,0.009901 188 | 546,0.272958,0.718062,0.008980 189 | 547,0.280129,0.711725,0.008146 190 | 548,0.287292,0.705316,0.007391 191 | 549,0.294450,0.698842,0.006708 192 | 550,0.301604,0.692308,0.006088 193 | 551,0.308760,0.685712,0.005528 194 | 552,0.315914,0.679063,0.005022 195 | 553,0.323066,0.672367,0.004566 196 | 554,0.330216,0.665628,0.004156 197 | 555,0.337363,0.658848,0.003788 198 | 556,0.344513,0.652028,0.003459 199 | 557,0.351664,0.645172,0.003163 200 | 558,0.358814,0.638287,0.002899 201 | 559,0.365959,0.631379,0.002662 202 | 560,0.373102,0.624451,0.002448 203 | 561,0.380244,0.617502,0.002254 204 | 562,0.387379,0.610542,0.002079 205 | 563,0.394507,0.603571,0.001922 206 | 564,0.401626,0.596592,0.001782 207 | 565,0.408736,0.589607,0.001657 208 | 566,0.415836,0.582618,0.001546 209 | 567,0.422921,0.575631,0.001448 210 | 568,0.429989,0.568649,0.001362 211 | 569,0.437036,0.561676,0.001288 212 | 570,0.444062,0.554714,0.001224 213 | 571,0.451065,0.547766,0.001169 214 | 572,0.458041,0.540837,0.001123 215 | 573,0.464986,0.533930,0.001084 216 | 574,0.471899,0.527051,0.001051 217 | 575,0.478775,0.520202,0.001023 218 | 576,0.485612,0.513389,0.001000 219 | 577,0.492405,0.506615,0.000980 220 | 578,0.499151,0.499887,0.000962 221 | 579,0.505845,0.493211,0.000944 222 | 580,0.512486,0.486591,0.000923 223 | 581,0.519073,0.480029,0.000899 224 | 582,0.525600,0.473527,0.000872 225 | 583,0.532066,0.467091,0.000843 226 | 584,0.538463,0.460725,0.000812 227 | 585,0.544787,0.454434,0.000779 228 | 586,0.551031,0.448225,0.000744 229 | 587,0.557193,0.442099,0.000708 230 | 588,0.563269,0.436058,0.000673 231 | 589,0.569257,0.430102,0.000641 232 | 590,0.575151,0.424232,0.000616 233 | 591,0.580953,0.418447,0.000601 234 | 592,0.586650,0.412758,0.000591 235 | 593,0.592225,0.407190,0.000586 236 | 594,0.597658,0.401762,0.000580 237 | 595,0.602933,0.396497,0.000571 238 | 596,0.608035,0.391409,0.000556 239 | 597,0.612977,0.386486,0.000537 240 | 598,0.617779,0.381706,0.000516 241 | 599,0.622459,0.377047,0.000493 242 | 600,0.627037,0.372491,0.000472 243 | 601,0.631521,0.368026,0.000453 244 | 602,0.635900,0.363665,0.000435 245 | 603,0.640156,0.359428,0.000416 246 | 604,0.644273,0.355331,0.000396 247 | 605,0.648233,0.351395,0.000372 248 | 606,0.652028,0.347628,0.000344 249 | 607,0.655669,0.344018,0.000313 250 | 608,0.659166,0.340553,0.000281 251 | 609,0.662528,0.337221,0.000251 252 | 610,0.665764,0.334011,0.000226 253 | 611,0.668874,0.330919,0.000207 254 | 612,0.671859,0.327947,0.000194 255 | 613,0.674720,0.325095,0.000185 256 | 614,0.677459,0.322362,0.000179 257 | 615,0.680079,0.319747,0.000174 258 | 616,0.682582,0.317249,0.000170 259 | 617,0.684971,0.314863,0.000167 260 | 618,0.687250,0.312586,0.000164 261 | 619,0.689426,0.310414,0.000160 262 | 620,0.691504,0.308342,0.000154 263 | 621,0.693490,0.306366,0.000145 264 | 622,0.695389,0.304479,0.000133 265 | 623,0.697206,0.302675,0.000119 266 | 624,0.698944,0.300950,0.000106 267 | 625,0.700606,0.299301,0.000093 268 | 626,0.702193,0.297725,0.000083 269 | 627,0.703709,0.296217,0.000074 270 | 628,0.705163,0.294770,0.000067 271 | 629,0.706563,0.293376,0.000061 272 | 630,0.707918,0.292027,0.000055 273 | 631,0.709231,0.290719,0.000050 274 | 632,0.710500,0.289453,0.000047 275 | 633,0.711724,0.288232,0.000044 276 | 634,0.712901,0.287057,0.000041 277 | 635,0.714032,0.285929,0.000040 278 | 636,0.715117,0.284845,0.000038 279 | 637,0.716159,0.283804,0.000036 280 | 638,0.717159,0.282806,0.000035 281 | 639,0.718116,0.281850,0.000034 282 | 640,0.719033,0.280935,0.000032 283 | 641,0.719912,0.280058,0.000030 284 | 642,0.720753,0.279219,0.000028 285 | 643,0.721555,0.278420,0.000026 286 | 644,0.722315,0.277662,0.000023 287 | 645,0.723032,0.276948,0.000020 288 | 646,0.723702,0.276282,0.000016 289 | 647,0.724328,0.275660,0.000012 290 | 648,0.724914,0.275078,0.000007 291 | 649,0.725467,0.274530,0.000003 292 | 650,0.725992,0.274008,0.000000 293 | 651,0.726495,0.273505,0.000000 294 | 652,0.726975,0.273025,0.000000 295 | 653,0.727432,0.272568,0.000000 296 | 654,0.727864,0.272136,0.000000 297 | 655,0.728272,0.271728,0.000000 298 | 656,0.728656,0.271344,0.000000 299 | 657,0.729020,0.270980,0.000000 300 | 658,0.729361,0.270639,0.000000 301 | 659,0.729678,0.270322,0.000000 302 | 660,0.729969,0.270031,0.000000 303 | 661,0.730234,0.269766,0.000000 304 | 662,0.730474,0.269526,0.000000 305 | 663,0.730693,0.269307,0.000000 306 | 664,0.730896,0.269104,0.000000 307 | 665,0.731089,0.268911,0.000000 308 | 666,0.731280,0.268720,0.000000 309 | 667,0.731467,0.268533,0.000000 310 | 668,0.731650,0.268350,0.000000 311 | 669,0.731826,0.268174,0.000000 312 | 670,0.731993,0.268007,0.000000 313 | 671,0.732150,0.267850,0.000000 314 | 672,0.732300,0.267700,0.000000 315 | 673,0.732443,0.267557,0.000000 316 | 674,0.732581,0.267419,0.000000 317 | 675,0.732719,0.267281,0.000000 318 | 676,0.732859,0.267141,0.000000 319 | 677,0.733000,0.267000,0.000000 320 | 678,0.733142,0.266858,0.000000 321 | 679,0.733281,0.266719,0.000000 322 | 680,0.733417,0.266583,0.000000 323 | 681,0.733551,0.266449,0.000000 324 | 682,0.733683,0.266317,0.000000 325 | 683,0.733813,0.266187,0.000000 326 | 684,0.733936,0.266064,0.000000 327 | 685,0.734047,0.265953,0.000000 328 | 686,0.734143,0.265857,0.000000 329 | 687,0.734221,0.265779,0.000000 330 | 688,0.734286,0.265714,0.000000 331 | 689,0.734341,0.265659,0.000000 332 | 690,0.734390,0.265610,0.000000 333 | 691,0.734438,0.265562,0.000000 334 | 692,0.734482,0.265518,0.000000 335 | 693,0.734523,0.265477,0.000000 336 | 694,0.734560,0.265440,0.000000 337 | 695,0.734592,0.265408,0.000000 338 | 696,0.734621,0.265379,0.000000 339 | 697,0.734649,0.265351,0.000000 340 | 698,0.734673,0.265327,0.000000 341 | 699,0.734690,0.265310,0.000000 342 | 700,0.734690,0.265310,0.000000 343 | 701,0.734690,0.265310,0.000000 344 | 702,0.734690,0.265310,0.000000 345 | 703,0.734690,0.265310,0.000000 346 | 704,0.734690,0.265310,0.000000 347 | 705,0.734690,0.265310,0.000000 348 | 706,0.734690,0.265310,0.000000 349 | 707,0.734690,0.265310,0.000000 350 | 708,0.734690,0.265310,0.000000 351 | 709,0.734690,0.265310,0.000000 352 | 710,0.734690,0.265310,0.000000 353 | 711,0.734690,0.265310,0.000000 354 | 712,0.734690,0.265310,0.000000 355 | 713,0.734690,0.265310,0.000000 356 | 714,0.734690,0.265310,0.000000 357 | 715,0.734690,0.265310,0.000000 358 | 716,0.734690,0.265310,0.000000 359 | 717,0.734690,0.265310,0.000000 360 | 718,0.734690,0.265310,0.000000 361 | 719,0.734690,0.265310,0.000000 362 | 720,0.734690,0.265310,0.000000 363 | 721,0.734690,0.265310,0.000000 364 | 722,0.734690,0.265310,0.000000 365 | 723,0.734690,0.265310,0.000000 366 | 724,0.734690,0.265310,0.000000 367 | 725,0.734690,0.265310,0.000000 368 | 726,0.734690,0.265310,0.000000 369 | 727,0.734690,0.265310,0.000000 370 | 728,0.734690,0.265310,0.000000 371 | 729,0.734690,0.265310,0.000000 372 | 730,0.734690,0.265310,0.000000 373 | 731,0.734690,0.265310,0.000000 374 | 732,0.734690,0.265310,0.000000 375 | 733,0.734690,0.265310,0.000000 376 | 734,0.734690,0.265310,0.000000 377 | 735,0.734690,0.265310,0.000000 378 | 736,0.734690,0.265310,0.000000 379 | 737,0.734690,0.265310,0.000000 380 | 738,0.734690,0.265310,0.000000 381 | 739,0.734690,0.265310,0.000000 382 | 740,0.734690,0.265310,0.000000 383 | 741,0.734690,0.265310,0.000000 384 | 742,0.734690,0.265310,0.000000 385 | 743,0.734690,0.265310,0.000000 386 | 744,0.734690,0.265310,0.000000 387 | 745,0.734690,0.265310,0.000000 388 | 746,0.734690,0.265310,0.000000 389 | 747,0.734690,0.265310,0.000000 390 | 748,0.734690,0.265310,0.000000 391 | 749,0.734690,0.265310,0.000000 392 | 750,0.734690,0.265310,0.000000 393 | 751,0.734690,0.265310,0.000000 394 | 752,0.734690,0.265310,0.000000 395 | 753,0.734690,0.265310,0.000000 396 | 754,0.734690,0.265310,0.000000 397 | 755,0.734690,0.265310,0.000000 398 | 756,0.734690,0.265310,0.000000 399 | 757,0.734690,0.265310,0.000000 400 | 758,0.734690,0.265310,0.000000 401 | 759,0.734690,0.265310,0.000000 402 | 760,0.734690,0.265310,0.000000 403 | 761,0.734690,0.265310,0.000000 404 | 762,0.734690,0.265310,0.000000 405 | 763,0.734690,0.265310,0.000000 406 | 764,0.734690,0.265310,0.000000 407 | 765,0.734690,0.265310,0.000000 408 | 766,0.734690,0.265310,0.000000 409 | 767,0.734690,0.265310,0.000000 410 | 768,0.734690,0.265310,0.000000 411 | 769,0.734690,0.265310,0.000000 412 | 770,0.734690,0.265310,0.000000 413 | 771,0.734690,0.265310,0.000000 414 | 772,0.734690,0.265310,0.000000 415 | 773,0.734690,0.265310,0.000000 416 | 774,0.734690,0.265310,0.000000 417 | 775,0.734690,0.265310,0.000000 418 | 776,0.734690,0.265310,0.000000 419 | 777,0.734690,0.265310,0.000000 420 | 778,0.734690,0.265310,0.000000 421 | 779,0.734690,0.265310,0.000000 422 | 780,0.734690,0.265310,0.000000 423 | 781,0.734690,0.265310,0.000000 424 | 782,0.734690,0.265310,0.000000 425 | 783,0.734690,0.265310,0.000000 426 | 784,0.734690,0.265310,0.000000 427 | 785,0.734690,0.265310,0.000000 428 | 786,0.734690,0.265310,0.000000 429 | 787,0.734690,0.265310,0.000000 430 | 788,0.734690,0.265310,0.000000 431 | 789,0.734690,0.265310,0.000000 432 | 790,0.734690,0.265310,0.000000 433 | 791,0.734690,0.265310,0.000000 434 | 792,0.734690,0.265310,0.000000 435 | 793,0.734690,0.265310,0.000000 436 | 794,0.734690,0.265310,0.000000 437 | 795,0.734690,0.265310,0.000000 438 | 796,0.734690,0.265310,0.000000 439 | 797,0.734690,0.265310,0.000000 440 | 798,0.734690,0.265310,0.000000 441 | 799,0.734690,0.265310,0.000000 442 | 800,0.734690,0.265310,0.000000 443 | 801,0.734690,0.265310,0.000000 444 | 802,0.734690,0.265310,0.000000 445 | 803,0.734690,0.265310,0.000000 446 | 804,0.734690,0.265310,0.000000 447 | 805,0.734690,0.265310,0.000000 448 | 806,0.734690,0.265310,0.000000 449 | 807,0.734690,0.265310,0.000000 450 | 808,0.734690,0.265310,0.000000 451 | 809,0.734690,0.265310,0.000000 452 | 810,0.734690,0.265310,0.000000 453 | 811,0.734690,0.265310,0.000000 454 | 812,0.734690,0.265310,0.000000 455 | 813,0.734690,0.265310,0.000000 456 | 814,0.734690,0.265310,0.000000 457 | 815,0.734690,0.265310,0.000000 458 | 816,0.734690,0.265310,0.000000 459 | 817,0.734690,0.265310,0.000000 460 | 818,0.734690,0.265310,0.000000 461 | 819,0.734690,0.265310,0.000000 462 | 820,0.734690,0.265310,0.000000 463 | 821,0.734690,0.265310,0.000000 464 | 822,0.734690,0.265310,0.000000 465 | 823,0.734690,0.265310,0.000000 466 | 824,0.734690,0.265310,0.000000 467 | 825,0.734690,0.265310,0.000000 468 | 826,0.734690,0.265310,0.000000 469 | 827,0.734690,0.265310,0.000000 470 | 828,0.734690,0.265310,0.000000 471 | 829,0.734690,0.265310,0.000000 472 | 830,0.734690,0.265310,0.000000 -------------------------------------------------------------------------------- /data/stiles_burch_2deg_lms.csv: -------------------------------------------------------------------------------- 1 | wavelength,l,m,s 2 | 390,4.15003E-04,3.68349E-04,9.54729E-03 3 | 391,5.02650E-04,4.48015E-04,1.14794E-02 4 | 392,6.07367E-04,5.43965E-04,1.37986E-02 5 | 393,7.31850E-04,6.58983E-04,1.65746E-02 6 | 394,8.79012E-04,7.96121E-04,1.98869E-02 7 | 395,1.05192E-03,9.58658E-04,2.38250E-02 8 | 396,1.25373E-03,1.15002E-03,2.84877E-02 9 | 397,1.48756E-03,1.37367E-03,3.39832E-02 10 | 398,1.75633E-03,1.63296E-03,4.04274E-02 11 | 399,2.06261E-03,1.93089E-03,4.79417E-02 12 | 400,2.40836E-03,2.26991E-03,5.66498E-02 13 | 401,2.79522E-03,2.65210E-03,6.66757E-02 14 | 402,3.22640E-03,3.08110E-03,7.81479E-02 15 | 403,3.70617E-03,3.56156E-03,9.11925E-02 16 | 404,4.23972E-03,4.09900E-03,1.05926E-01 17 | 405,4.83339E-03,4.70010E-03,1.22451E-01 18 | 406,5.49335E-03,5.37186E-03,1.40844E-01 19 | 407,6.21933E-03,6.11757E-03,1.61140E-01 20 | 408,7.00631E-03,6.93795E-03,1.83325E-01 21 | 409,7.84503E-03,7.83144E-03,2.07327E-01 22 | 410,8.72127E-03,8.79369E-03,2.33008E-01 23 | 411,9.61879E-03,9.81865E-03,2.60183E-01 24 | 412,1.05324E-02,1.09044E-02,2.88723E-01 25 | 413,1.14620E-02,1.20509E-02,3.18512E-01 26 | 414,1.24105E-02,1.32582E-02,3.49431E-01 27 | 415,1.33837E-02,1.45277E-02,3.81363E-01 28 | 416,1.43870E-02,1.58600E-02,4.14141E-01 29 | 417,1.54116E-02,1.72496E-02,4.47350E-01 30 | 418,1.64424E-02,1.86878E-02,4.80439E-01 31 | 419,1.74614E-02,2.01638E-02,5.12767E-01 32 | 420,1.84480E-02,2.16649E-02,5.43618E-01 33 | 421,1.93852E-02,2.31801E-02,5.72399E-01 34 | 422,2.02811E-02,2.47139E-02,5.99284E-01 35 | 423,2.11545E-02,2.62785E-02,6.24786E-01 36 | 424,2.20286E-02,2.78905E-02,6.49576E-01 37 | 425,2.29317E-02,2.95714E-02,6.74474E-01 38 | 426,2.38896E-02,3.13438E-02,7.00186E-01 39 | 427,2.49026E-02,3.32151E-02,7.26460E-01 40 | 428,2.59631E-02,3.51889E-02,7.52726E-01 41 | 429,2.70619E-02,3.72683E-02,7.78333E-01 42 | 430,2.81877E-02,3.94566E-02,8.02555E-01 43 | 431,2.93303E-02,4.17546E-02,8.24818E-01 44 | 432,3.04898E-02,4.41544E-02,8.45422E-01 45 | 433,3.16694E-02,4.66432E-02,8.64961E-01 46 | 434,3.28731E-02,4.92050E-02,8.84100E-01 47 | 435,3.41054E-02,5.18199E-02,9.03573E-01 48 | 436,3.53670E-02,5.44645E-02,9.23844E-01 49 | 437,3.66400E-02,5.71131E-02,9.44055E-01 50 | 438,3.78988E-02,5.97369E-02,9.62920E-01 51 | 439,3.91148E-02,6.23038E-02,9.79057E-01 52 | 440,4.02563E-02,6.47782E-02,9.91020E-01 53 | 441,4.12989E-02,6.71329E-02,9.97765E-01 54 | 442,4.22582E-02,6.93844E-02,9.99982E-01 55 | 443,4.31627E-02,7.15658E-02,9.98861E-01 56 | 444,4.40444E-02,7.37164E-02,9.95628E-01 57 | 445,4.49380E-02,7.58812E-02,9.91515E-01 58 | 446,4.58729E-02,7.80980E-02,9.87377E-01 59 | 447,4.68459E-02,8.03538E-02,9.82619E-01 60 | 448,4.78446E-02,8.26198E-02,9.76301E-01 61 | 449,4.88555E-02,8.48644E-02,9.67513E-01 62 | 450,4.98639E-02,8.70524E-02,9.55393E-01 63 | 451,5.08618E-02,8.91640E-02,9.39499E-01 64 | 452,5.18731E-02,9.12523E-02,9.20807E-01 65 | 453,5.29317E-02,9.33950E-02,9.00592E-01 66 | 454,5.40746E-02,9.56775E-02,8.80040E-01 67 | 455,5.53418E-02,9.81934E-02,8.60240E-01 68 | 456,5.67734E-02,1.01031E-01,8.42031E-01 69 | 457,5.83973E-02,1.04229E-01,8.25572E-01 70 | 458,6.02409E-02,1.07814E-01,8.10860E-01 71 | 459,6.23353E-02,1.11817E-01,7.97902E-01 72 | 460,6.47164E-02,1.16272E-01,7.86704E-01 73 | 461,6.74131E-02,1.21204E-01,7.77119E-01 74 | 462,7.04040E-02,1.26573E-01,7.68365E-01 75 | 463,7.36489E-02,1.32311E-01,7.59538E-01 76 | 464,7.70978E-02,1.38334E-01,7.49777E-01 77 | 465,8.06894E-02,1.44541E-01,7.38268E-01 78 | 466,8.43613E-02,1.50828E-01,7.24389E-01 79 | 467,8.80904E-02,1.57146E-01,7.08113E-01 80 | 468,9.18630E-02,1.63457E-01,6.89572E-01 81 | 469,9.56637E-02,1.69721E-01,6.68927E-01 82 | 470,9.94755E-02,1.75893E-01,6.46359E-01 83 | 471,1.03286E-01,1.81938E-01,6.22112E-01 84 | 472,1.07103E-01,1.87872E-01,5.96591E-01 85 | 473,1.10947E-01,1.93731E-01,5.70216E-01 86 | 474,1.14838E-01,1.99557E-01,5.43373E-01 87 | 475,1.18802E-01,2.05398E-01,5.16411E-01 88 | 476,1.22863E-01,2.11302E-01,4.89647E-01 89 | 477,1.27026E-01,2.17283E-01,4.63406E-01 90 | 478,1.31293E-01,2.23347E-01,4.37965E-01 91 | 479,1.35666E-01,2.29501E-01,4.13549E-01 92 | 480,1.40145E-01,2.35754E-01,3.90333E-01 93 | 481,1.44731E-01,2.42108E-01,3.68394E-01 94 | 482,1.49415E-01,2.48545E-01,3.47582E-01 95 | 483,1.54189E-01,2.55037E-01,3.27724E-01 96 | 484,1.59038E-01,2.61554E-01,3.08676E-01 97 | 485,1.63952E-01,2.68063E-01,2.90322E-01 98 | 486,1.68932E-01,2.74561E-01,2.72626E-01 99 | 487,1.74063E-01,2.81180E-01,2.55772E-01 100 | 488,1.79457E-01,2.88097E-01,2.39945E-01 101 | 489,1.85241E-01,2.95508E-01,2.25280E-01 102 | 490,1.91556E-01,3.03630E-01,2.11867E-01 103 | 491,1.98532E-01,3.12649E-01,1.99719E-01 104 | 492,2.06182E-01,3.22565E-01,1.88674E-01 105 | 493,2.14485E-01,3.33319E-01,1.78557E-01 106 | 494,2.23411E-01,3.44844E-01,1.69217E-01 107 | 495,2.32926E-01,3.57061E-01,1.60526E-01 108 | 496,2.42992E-01,3.69895E-01,1.52368E-01 109 | 497,2.53616E-01,3.83355E-01,1.44620E-01 110 | 498,2.64810E-01,3.97467E-01,1.37173E-01 111 | 499,2.76587E-01,4.12260E-01,1.29937E-01 112 | 500,2.88959E-01,4.27764E-01,1.22839E-01 113 | 501,3.01934E-01,4.44001E-01,1.15834E-01 114 | 502,3.15508E-01,4.60947E-01,1.08922E-01 115 | 503,3.29673E-01,4.78562E-01,1.02118E-01 116 | 504,3.44416E-01,4.96795E-01,9.54374E-02 117 | 505,3.59716E-01,5.15587E-01,8.88965E-02 118 | 506,3.75550E-01,5.34868E-01,8.25343E-02 119 | 507,3.91895E-01,5.54575E-01,7.64613E-02 120 | 508,4.08722E-01,5.74640E-01,7.07769E-02 121 | 509,4.25998E-01,5.94984E-01,6.55491E-02 122 | 510,4.43683E-01,6.15520E-01,6.08210E-02 123 | 511,4.61731E-01,6.36162E-01,5.65919E-02 124 | 512,4.80094E-01,6.56872E-01,5.27659E-02 125 | 513,4.98717E-01,6.77624E-01,4.92440E-02 126 | 514,5.17539E-01,6.98393E-01,4.59470E-02 127 | 515,5.36494E-01,7.19154E-01,4.28123E-02 128 | 516,5.55493E-01,7.39844E-01,3.98014E-02 129 | 517,5.74386E-01,7.60235E-01,3.69227E-02 130 | 518,5.92995E-01,7.80039E-01,3.41909E-02 131 | 519,6.11124E-01,7.98941E-01,3.16158E-02 132 | 520,6.28561E-01,8.16610E-01,2.92033E-02 133 | 521,6.45139E-01,8.32783E-01,2.69536E-02 134 | 522,6.60907E-01,8.47550E-01,2.48575E-02 135 | 523,6.75993E-01,8.61113E-01,2.29047E-02 136 | 524,6.90542E-01,8.73698E-01,2.10855E-02 137 | 525,7.04720E-01,8.85550E-01,1.93912E-02 138 | 526,7.18662E-01,8.96873E-01,1.78145E-02 139 | 527,7.32323E-01,9.07638E-01,1.63514E-02 140 | 528,7.45606E-01,9.17757E-01,1.49980E-02 141 | 529,7.58410E-01,9.27137E-01,1.37497E-02 142 | 530,7.70630E-01,9.35687E-01,1.26013E-02 143 | 531,7.82208E-01,9.43362E-01,1.15466E-02 144 | 532,7.93290E-01,9.50309E-01,1.05766E-02 145 | 533,8.04084E-01,9.56733E-01,9.68268E-03 146 | 534,8.14813E-01,9.62844E-01,8.85746E-03 147 | 535,8.25711E-01,9.68858E-01,8.09453E-03 148 | 536,8.36943E-01,9.74919E-01,7.38890E-03 149 | 537,8.48349E-01,9.80850E-01,6.73799E-03 150 | 538,8.59676E-01,9.86388E-01,6.13947E-03 151 | 539,8.70656E-01,9.91267E-01,5.59073E-03 152 | 540,8.81011E-01,9.95217E-01,5.08900E-03 153 | 541,8.90496E-01,9.98007E-01,4.63120E-03 154 | 542,8.99052E-01,9.99595E-01,4.21366E-03 155 | 543,9.06669E-01,9.99982E-01,3.83286E-03 156 | 544,9.13341E-01,9.99177E-01,3.48559E-03 157 | 545,9.19067E-01,9.97193E-01,3.16893E-03 158 | 546,9.23898E-01,9.94102E-01,2.88021E-03 159 | 547,9.28099E-01,9.90204E-01,2.61698E-03 160 | 548,9.31995E-01,9.85855E-01,2.37701E-03 161 | 549,9.35916E-01,9.81404E-01,2.15829E-03 162 | 550,9.40198E-01,9.77193E-01,1.95896E-03 163 | 551,9.45076E-01,9.73441E-01,1.77737E-03 164 | 552,9.50367E-01,9.69881E-01,1.61218E-03 165 | 553,9.55775E-01,9.66133E-01,1.46215E-03 166 | 554,9.61000E-01,9.61823E-01,1.32606E-03 167 | 555,9.65733E-01,9.56583E-01,1.20277E-03 168 | 556,9.69744E-01,9.50167E-01,1.09118E-03 169 | 557,9.73133E-01,9.42773E-01,9.90135E-04 170 | 558,9.76086E-01,9.34709E-01,8.98564E-04 171 | 559,9.78793E-01,9.26271E-01,8.15524E-04 172 | 560,9.81445E-01,9.17750E-01,7.40174E-04 173 | 561,9.84186E-01,9.09339E-01,6.71772E-04 174 | 562,9.86965E-01,9.00895E-01,6.09693E-04 175 | 563,9.89678E-01,8.92197E-01,5.53372E-04 176 | 564,9.92220E-01,8.83035E-01,5.02292E-04 177 | 565,9.94486E-01,8.73205E-01,4.55979E-04 178 | 566,9.96386E-01,8.62565E-01,4.13997E-04 179 | 567,9.97895E-01,8.51173E-01,3.75940E-04 180 | 568,9.99004E-01,8.39132E-01,3.41439E-04 181 | 569,9.99706E-01,8.26545E-01,3.10160E-04 182 | 570,9.99993E-01,8.13509E-01,2.81800E-04 183 | 571,9.99837E-01,8.00082E-01,2.56084E-04 184 | 572,9.99123E-01,7.86166E-01,2.32764E-04 185 | 573,9.97719E-01,7.71635E-01,2.11616E-04 186 | 574,9.95491E-01,7.56376E-01,1.92436E-04 187 | 575,9.92310E-01,7.40291E-01,1.75039E-04 188 | 576,9.88146E-01,7.23369E-01,1.59257E-04 189 | 577,9.83345E-01,7.05890E-01,1.44940E-04 190 | 578,9.78342E-01,6.88184E-01,1.31948E-04 191 | 579,9.73564E-01,6.70554E-01,1.20157E-04 192 | 580,9.69429E-01,6.53274E-01,1.09454E-04 193 | 581,9.66211E-01,6.36524E-01,9.97367E-05 194 | 582,9.63630E-01,6.20217E-01,9.09125E-05 195 | 583,9.61273E-01,6.04211E-01,8.28976E-05 196 | 584,9.58732E-01,5.88375E-01,7.56160E-05 197 | 585,9.55602E-01,5.72597E-01,6.89991E-05 198 | 586,9.51569E-01,5.56783E-01,6.29846E-05 199 | 587,9.46654E-01,5.40896E-01,5.75163E-05 200 | 588,9.40962E-01,5.24912E-01,5.25432E-05 201 | 589,9.34600E-01,5.08817E-01,4.80192E-05 202 | 590,9.27673E-01,4.92599E-01,4.39024E-05 203 | 591,9.20264E-01,4.76268E-01,4.01551E-05 204 | 592,9.12391E-01,4.59893E-01,3.67431E-05 205 | 593,9.04050E-01,4.43551E-01,3.36353E-05 206 | 594,8.95243E-01,4.27314E-01,3.08037E-05 207 | 595,8.85969E-01,4.11246E-01,2.82228E-05 208 | 596,8.76242E-01,3.95396E-01,2.58697E-05 209 | 597,8.66117E-01,3.79782E-01,2.37235E-05 210 | 598,8.55658E-01,3.64410E-01,2.17653E-05 211 | 599,8.44926E-01,3.49289E-01,1.99779E-05 212 | 600,8.33982E-01,3.34429E-01,1.83459E-05 213 | 601,8.22859E-01,3.19843E-01,1.68551E-05 214 | 602,8.11491E-01,3.05564E-01,1.54929E-05 215 | 603,7.99794E-01,2.91625E-01,1.42476E-05 216 | 604,7.87689E-01,2.78053E-01,1.31087E-05 217 | 605,7.75103E-01,2.64872E-01,1.20667E-05 218 | 606,7.61996E-01,2.52099E-01,1.11131E-05 219 | 607,7.48425E-01,2.39747E-01,1.02399E-05 220 | 608,7.34470E-01,2.27822E-01,9.43999E-06 221 | 609,7.20208E-01,2.16330E-01,8.70695E-06 222 | 610,7.05713E-01,2.05273E-01,8.03488E-06 223 | 611,6.91044E-01,1.94650E-01,7.41844E-06 224 | 612,6.76212E-01,1.84448E-01,6.85279E-06 225 | 613,6.61220E-01,1.74654E-01,6.33352E-06 226 | 614,6.46072E-01,1.65256E-01,5.85662E-06 227 | 615,6.30773E-01,1.56243E-01,5.41843E-06 228 | 616,6.15349E-01,1.47602E-01, 229 | 617,5.99888E-01,1.39329E-01, 230 | 618,5.84489E-01,1.31416E-01, 231 | 619,5.69240E-01,1.23856E-01, 232 | 620,5.54224E-01,1.16641E-01, 233 | 621,5.39469E-01,1.09766E-01, 234 | 622,5.24827E-01,1.03226E-01, 235 | 623,5.10124E-01,9.70205E-02, 236 | 624,4.95206E-01,9.11430E-02, 237 | 625,4.79941E-01,8.55872E-02, 238 | 626,4.64270E-01,8.03428E-02, 239 | 627,4.48338E-01,7.53913E-02, 240 | 628,4.32329E-01,7.07136E-02, 241 | 629,4.16406E-01,6.62924E-02, 242 | 630,4.00711E-01,6.21120E-02, 243 | 631,3.85355E-01,5.81595E-02, 244 | 632,3.70377E-01,5.44276E-02, 245 | 633,3.55793E-01,5.09098E-02, 246 | 634,3.41618E-01,4.75991E-02, 247 | 635,3.27864E-01,4.44879E-02, 248 | 636,3.14541E-01,4.15659E-02, 249 | 637,3.01662E-01,3.88152E-02, 250 | 638,2.89239E-01,3.62181E-02, 251 | 639,2.77278E-01,3.37599E-02, 252 | 640,2.65784E-01,3.14282E-02, 253 | 641,2.54740E-01,2.92176E-02, 254 | 642,2.44054E-01,2.71403E-02, 255 | 643,2.33634E-01,2.52084E-02, 256 | 644,2.23399E-01,2.34286E-02, 257 | 645,2.13284E-01,2.18037E-02, 258 | 646,2.03257E-01,2.03285E-02, 259 | 647,1.93370E-01,1.89779E-02, 260 | 648,1.83688E-01,1.77272E-02, 261 | 649,1.74263E-01,1.65560E-02, 262 | 650,1.65141E-01,1.54480E-02, 263 | 651,1.56354E-01,1.43924E-02, 264 | 652,1.47916E-01,1.33896E-02, 265 | 653,1.39834E-01,1.24414E-02, 266 | 654,1.32111E-01,1.15488E-02, 267 | 655,1.24749E-01,1.07120E-02, 268 | 656,1.17744E-01,9.92994E-03, 269 | 657,1.11081E-01,9.20057E-03, 270 | 658,1.04747E-01,8.52126E-03, 271 | 659,9.87277E-02,7.88945E-03, 272 | 660,9.30085E-02,7.30255E-03, 273 | 661,8.75769E-02,6.75820E-03, 274 | 662,8.24219E-02,6.25474E-03, 275 | 663,7.75328E-02,5.79045E-03, 276 | 664,7.28989E-02,5.36347E-03, 277 | 665,6.85100E-02,4.97179E-03, 278 | 666,6.43554E-02,4.61300E-03, 279 | 667,6.04242E-02,4.28339E-03, 280 | 668,5.67057E-02,3.97940E-03, 281 | 669,5.31896E-02,3.69803E-03, 282 | 670,4.98661E-02,3.43667E-03, 283 | 671,4.67258E-02,3.19326E-03, 284 | 672,4.37598E-02,2.96653E-03, 285 | 673,4.09594E-02,2.75543E-03, 286 | 674,3.83165E-02,2.55896E-03, 287 | 675,3.58233E-02,2.37617E-03, 288 | 676,3.34725E-02,2.20618E-03, 289 | 677,3.12583E-02,2.04809E-03, 290 | 678,2.91751E-02,1.90110E-03, 291 | 679,2.72173E-02,1.76442E-03, 292 | 680,2.53790E-02,1.63734E-03, 293 | 681,2.36541E-02,1.51916E-03, 294 | 682,2.20336E-02,1.40913E-03, 295 | 683,2.05092E-02,1.30655E-03, 296 | 684,1.90735E-02,1.21078E-03, 297 | 685,1.77201E-02,1.12128E-03, 298 | 686,1.64451E-02,1.03766E-03, 299 | 687,1.52510E-02,9.59892E-04, 300 | 688,1.41404E-02,8.87951E-04, 301 | 689,1.31137E-02,8.21729E-04, 302 | 690,1.21701E-02,7.61051E-04, 303 | 691,1.13063E-02,7.05623E-04, 304 | 692,1.05131E-02,6.54874E-04, 305 | 693,9.78127E-03,6.08240E-04, 306 | 694,9.10300E-03,5.65240E-04, 307 | 695,8.47170E-03,5.25457E-04, 308 | 696,7.88227E-03,4.88550E-04, 309 | 697,7.33213E-03,4.54277E-04, 310 | 698,6.81928E-03,4.22436E-04, 311 | 699,6.34173E-03,3.92839E-04, 312 | 700,5.89749E-03,3.65317E-04, 313 | 701,5.48444E-03,3.39710E-04, 314 | 702,5.09978E-03,3.15856E-04, 315 | 703,4.74086E-03,2.93607E-04, 316 | 704,4.40538E-03,2.72834E-04, 317 | 705,4.09129E-03,2.53417E-04, 318 | 706,3.79703E-03,2.35265E-04, 319 | 707,3.52187E-03,2.18331E-04, 320 | 708,3.26520E-03,2.02574E-04, 321 | 709,3.02632E-03,1.87948E-04, 322 | 710,2.80447E-03,1.74402E-04, 323 | 711,2.59882E-03,1.61878E-04, 324 | 712,2.40849E-03,1.50305E-04, 325 | 713,2.23259E-03,1.39612E-04, 326 | 714,2.07024E-03,1.29734E-04, 327 | 715,1.92058E-03,1.20608E-04, 328 | 716,1.78269E-03,1.12176E-04, 329 | 717,1.65540E-03,1.04373E-04, 330 | 718,1.53762E-03,9.71383E-05, 331 | 719,1.42839E-03,9.04202E-05, 332 | 720,1.32687E-03,8.41716E-05, 333 | 721,1.23238E-03,7.83538E-05, 334 | 722,1.14456E-03,7.29425E-05, 335 | 723,1.06308E-03,6.79164E-05, 336 | 724,9.87592E-04,6.32542E-05, 337 | 725,9.17777E-04,5.89349E-05, 338 | 726,8.53264E-04,5.49360E-05, 339 | 727,7.93589E-04,5.12291E-05, 340 | 728,7.38306E-04,4.77872E-05, 341 | 729,6.87018E-04,4.45862E-05, 342 | 730,6.39373E-04,4.16049E-05, 343 | 731,5.95057E-04,3.88245E-05, 344 | 732,5.53797E-04,3.62302E-05, 345 | 733,5.15350E-04,3.38086E-05, 346 | 734,4.79496E-04,3.15474E-05, 347 | 735,4.46035E-04,2.94354E-05, 348 | 736,4.14809E-04,2.74634E-05, 349 | 737,3.85749E-04,2.56268E-05, 350 | 738,3.58792E-04,2.39217E-05, 351 | 739,3.33861E-04,2.23432E-05, 352 | 740,3.10869E-04,2.08860E-05, 353 | 741,2.89699E-04,1.95424E-05, 354 | 742,2.70145E-04,1.82990E-05, 355 | 743,2.52007E-04,1.71423E-05, 356 | 744,2.35117E-04,1.60611E-05, 357 | 745,2.19329E-04,1.50458E-05, 358 | 746,2.04535E-04,1.40893E-05, 359 | 747,1.90692E-04,1.31899E-05, 360 | 748,1.77771E-04,1.23462E-05, 361 | 749,1.65736E-04,1.15569E-05, 362 | 750,1.54549E-04,1.08200E-05, 363 | 751,1.44167E-04,1.01334E-05, 364 | 752,1.34528E-04,9.49367E-06, 365 | 753,1.25574E-04,8.89736E-06, 366 | 754,1.17251E-04,8.34135E-06, 367 | 755,1.09508E-04,7.82271E-06, 368 | 756,1.02300E-04,7.33865E-06, 369 | 757,9.55828E-05,6.88612E-06, 370 | 758,8.93161E-05,6.46228E-06, 371 | 759,8.34631E-05,6.06462E-06, 372 | 760,7.79912E-05,5.69093E-06, 373 | 761,7.28730E-05,5.33942E-06, 374 | 762,6.80921E-05,5.00929E-06, 375 | 763,6.36342E-05,4.69984E-06, 376 | 764,5.94841E-05,4.41034E-06, 377 | 765,5.56264E-05,4.13998E-06, 378 | 766,5.20430E-05,3.88772E-06, 379 | 767,4.87063E-05,3.65186E-06, 380 | 768,4.55900E-05,3.43070E-06, 381 | 769,4.26710E-05,3.22278E-06, 382 | 770,3.99295E-05,3.02683E-06, 383 | 771,3.73509E-05,2.84192E-06, 384 | 772,3.49326E-05,2.66795E-06, 385 | 773,3.26730E-05,2.50491E-06, 386 | 774,3.05690E-05,2.35267E-06, 387 | 775,2.86163E-05,2.21100E-06, 388 | 776,2.68077E-05,2.07946E-06, 389 | 777,2.51286E-05,1.95700E-06, 390 | 778,2.35645E-05,1.84258E-06, 391 | 779,2.21026E-05,1.73528E-06, 392 | 780,2.07321E-05,1.63433E-06, 393 | 781,1.94444E-05,1.53910E-06, 394 | 782,1.82351E-05,1.44932E-06, 395 | 783,1.71008E-05,1.36478E-06, 396 | 784,1.60380E-05,1.28526E-06, 397 | 785,1.50432E-05,1.21054E-06, 398 | 786,1.41127E-05,1.14038E-06, 399 | 787,1.32420E-05,1.07446E-06, 400 | 788,1.24263E-05,1.01247E-06, 401 | 789,1.16618E-05,9.54130E-07, 402 | 790,1.09446E-05,8.99170E-07, 403 | 791,1.02716E-05,8.47379E-07, 404 | 792,9.64036E-06,7.98635E-07, 405 | 793,9.04897E-06,7.52832E-07, 406 | 794,8.49535E-06,7.09857E-07, 407 | 795,7.97750E-06,6.69594E-07, 408 | 796,7.49341E-06,6.31907E-07, 409 | 797,7.04079E-06,5.96604E-07, 410 | 798,6.61744E-06,5.63495E-07, 411 | 799,6.22133E-06,5.32408E-07, 412 | 800,5.85057E-06,5.03187E-07, 413 | 801,5.50333E-06,4.75686E-07, 414 | 802,5.17756E-06,4.49753E-07, 415 | 803,4.87135E-06,4.25249E-07, 416 | 804,4.58300E-06,4.02050E-07, 417 | 805,4.31102E-06,3.80046E-07, 418 | 806,4.05422E-06,3.59156E-07, 419 | 807,3.81213E-06,3.39356E-07, 420 | 808,3.58438E-06,3.20633E-07, 421 | 809,3.37053E-06,3.02966E-07, 422 | 810,3.17009E-06,2.86329E-07, 423 | 811,2.98248E-06,2.70687E-07, 424 | 812,2.80691E-06,2.55980E-07, 425 | 813,2.64257E-06,2.42147E-07, 426 | 814,2.48873E-06,2.29130E-07, 427 | 815,2.34468E-06,2.16878E-07, 428 | 816,2.20974E-06,2.05338E-07, 429 | 817,2.08315E-06,1.94449E-07, 430 | 818,1.96419E-06,1.84155E-07, 431 | 819,1.85222E-06,1.74407E-07, 432 | 820,1.74666E-06,1.65158E-07, 433 | 821,1.64705E-06,1.56373E-07, 434 | 822,1.55307E-06,1.48031E-07, 435 | 823,1.46448E-06,1.40117E-07, 436 | 824,1.38100E-06,1.32615E-07, 437 | 825,1.30241E-06,1.25508E-07, 438 | 826,1.22844E-06,1.18781E-07, 439 | 827,1.15888E-06,1.12416E-07, 440 | 828,1.09348E-06,1.06398E-07, 441 | 829,1.03203E-06,1.00711E-07, 442 | 830,9.74306E-07,9.53411E-08, -------------------------------------------------------------------------------- /data/cie_1931_2deg_xyz_cmf.csv: -------------------------------------------------------------------------------- 1 | wavelength,x,y,z 2 | 360,0.000129900000,0.000003917000,0.000606100000 3 | 361,0.000145847000,0.000004393581,0.000680879200 4 | 362,0.000163802100,0.000004929604,0.000765145600 5 | 363,0.000184003700,0.000005532136,0.000860012400 6 | 364,0.000206690200,0.000006208245,0.000966592800 7 | 365,0.000232100000,0.000006965000,0.001086000000 8 | 366,0.000260728000,0.000007813219,0.001220586000 9 | 367,0.000293075000,0.000008767336,0.001372729000 10 | 368,0.000329388000,0.000009839844,0.001543579000 11 | 369,0.000369914000,0.000011043230,0.001734286000 12 | 370,0.000414900000,0.000012390000,0.001946000000 13 | 371,0.000464158700,0.000013886410,0.002177777000 14 | 372,0.000518986000,0.000015557280,0.002435809000 15 | 373,0.000581854000,0.000017442960,0.002731953000 16 | 374,0.000655234700,0.000019583750,0.003078064000 17 | 375,0.000741600000,0.000022020000,0.003486000000 18 | 376,0.000845029600,0.000024839650,0.003975227000 19 | 377,0.000964526800,0.000028041260,0.004540880000 20 | 378,0.001094949000,0.000031531040,0.005158320000 21 | 379,0.001231154000,0.000035215210,0.005802907000 22 | 380,0.001368000000,0.000039000000,0.006450001000 23 | 381,0.001502050000,0.000042826400,0.007083216000 24 | 382,0.001642328000,0.000046914600,0.007745488000 25 | 383,0.001802382000,0.000051589600,0.008501152000 26 | 384,0.001995757000,0.000057176400,0.009414544000 27 | 385,0.002236000000,0.000064000000,0.010549990000 28 | 386,0.002535385000,0.000072344210,0.011965800000 29 | 387,0.002892603000,0.000082212240,0.013655870000 30 | 388,0.003300829000,0.000093508160,0.015588050000 31 | 389,0.003753236000,0.000106136100,0.017730150000 32 | 390,0.004243000000,0.000120000000,0.020050010000 33 | 391,0.004762389000,0.000134984000,0.022511360000 34 | 392,0.005330048000,0.000151492000,0.025202880000 35 | 393,0.005978712000,0.000170208000,0.028279720000 36 | 394,0.006741117000,0.000191816000,0.031897040000 37 | 395,0.007650000000,0.000217000000,0.036210000000 38 | 396,0.008751373000,0.000246906700,0.041437710000 39 | 397,0.010028880000,0.000281240000,0.047503720000 40 | 398,0.011421700000,0.000318520000,0.054119880000 41 | 399,0.012869010000,0.000357266700,0.060998030000 42 | 400,0.014310000000,0.000396000000,0.067850010000 43 | 401,0.015704430000,0.000433714700,0.074486320000 44 | 402,0.017147440000,0.000473024000,0.081361560000 45 | 403,0.018781220000,0.000517876000,0.089153640000 46 | 404,0.020748010000,0.000572218700,0.098540480000 47 | 405,0.023190000000,0.000640000000,0.110200000000 48 | 406,0.026207360000,0.000724560000,0.124613300000 49 | 407,0.029782480000,0.000825500000,0.141701700000 50 | 408,0.033880920000,0.000941160000,0.161303500000 51 | 409,0.038468240000,0.001069880000,0.183256800000 52 | 410,0.043510000000,0.001210000000,0.207400000000 53 | 411,0.048995600000,0.001362091000,0.233692100000 54 | 412,0.055022600000,0.001530752000,0.262611400000 55 | 413,0.061718800000,0.001720368000,0.294774600000 56 | 414,0.069212000000,0.001935323000,0.330798500000 57 | 415,0.077630000000,0.002180000000,0.371300000000 58 | 416,0.086958110000,0.002454800000,0.416209100000 59 | 417,0.097176720000,0.002764000000,0.465464200000 60 | 418,0.108406300000,0.003117800000,0.519694800000 61 | 419,0.120767200000,0.003526400000,0.579530300000 62 | 420,0.134380000000,0.004000000000,0.645600000000 63 | 421,0.149358200000,0.004546240000,0.718483800000 64 | 422,0.165395700000,0.005159320000,0.796713300000 65 | 423,0.181983100000,0.005829280000,0.877845900000 66 | 424,0.198611000000,0.006546160000,0.959439000000 67 | 425,0.214770000000,0.007300000000,1.039050100000 68 | 426,0.230186800000,0.008086507000,1.115367300000 69 | 427,0.244879700000,0.008908720000,1.188497100000 70 | 428,0.258777300000,0.009767680000,1.258123300000 71 | 429,0.271807900000,0.010664430000,1.323929600000 72 | 430,0.283900000000,0.011600000000,1.385600000000 73 | 431,0.294943800000,0.012573170000,1.442635200000 74 | 432,0.304896500000,0.013582720000,1.494803500000 75 | 433,0.313787300000,0.014629680000,1.542190300000 76 | 434,0.321645400000,0.015715090000,1.584880700000 77 | 435,0.328500000000,0.016840000000,1.622960000000 78 | 436,0.334351300000,0.018007360000,1.656404800000 79 | 437,0.339210100000,0.019214480000,1.685295900000 80 | 438,0.343121300000,0.020453920000,1.709874500000 81 | 439,0.346129600000,0.021718240000,1.730382100000 82 | 440,0.348280000000,0.023000000000,1.747060000000 83 | 441,0.349599900000,0.024294610000,1.760044600000 84 | 442,0.350147400000,0.025610240000,1.769623300000 85 | 443,0.350013000000,0.026958570000,1.776263700000 86 | 444,0.349287000000,0.028351250000,1.780433400000 87 | 445,0.348060000000,0.029800000000,1.782600000000 88 | 446,0.346373300000,0.031310830000,1.782968200000 89 | 447,0.344262400000,0.032883680000,1.781699800000 90 | 448,0.341808800000,0.034521120000,1.779198200000 91 | 449,0.339094100000,0.036225710000,1.775867100000 92 | 450,0.336200000000,0.038000000000,1.772110000000 93 | 451,0.333197700000,0.039846670000,1.768258900000 94 | 452,0.330041100000,0.041768000000,1.764039000000 95 | 453,0.326635700000,0.043766000000,1.758943800000 96 | 454,0.322886800000,0.045842670000,1.752466300000 97 | 455,0.318700000000,0.048000000000,1.744100000000 98 | 456,0.314025100000,0.050243680000,1.733559500000 99 | 457,0.308884000000,0.052573040000,1.720858100000 100 | 458,0.303290400000,0.054980560000,1.705936900000 101 | 459,0.297257900000,0.057458720000,1.688737200000 102 | 460,0.290800000000,0.060000000000,1.669200000000 103 | 461,0.283970100000,0.062601970000,1.647528700000 104 | 462,0.276721400000,0.065277520000,1.623412700000 105 | 463,0.268917800000,0.068042080000,1.596022300000 106 | 464,0.260422700000,0.070911090000,1.564528000000 107 | 465,0.251100000000,0.073900000000,1.528100000000 108 | 466,0.240847500000,0.077016000000,1.486111400000 109 | 467,0.229851200000,0.080266400000,1.439521500000 110 | 468,0.218407200000,0.083666800000,1.389879900000 111 | 469,0.206811500000,0.087232800000,1.338736200000 112 | 470,0.195360000000,0.090980000000,1.287640000000 113 | 471,0.184213600000,0.094917550000,1.237422300000 114 | 472,0.173327300000,0.099045840000,1.187824300000 115 | 473,0.162688100000,0.103367400000,1.138761100000 116 | 474,0.152283300000,0.107884600000,1.090148000000 117 | 475,0.142100000000,0.112600000000,1.041900000000 118 | 476,0.132178600000,0.117532000000,0.994197600000 119 | 477,0.122569600000,0.122674400000,0.947347300000 120 | 478,0.113275200000,0.127992800000,0.901453100000 121 | 479,0.104297900000,0.133452800000,0.856619300000 122 | 480,0.095640000000,0.139020000000,0.812950100000 123 | 481,0.087299550000,0.144676400000,0.770517300000 124 | 482,0.079308040000,0.150469300000,0.729444800000 125 | 483,0.071717760000,0.156461900000,0.689913600000 126 | 484,0.064580990000,0.162717700000,0.652104900000 127 | 485,0.057950010000,0.169300000000,0.616200000000 128 | 486,0.051862110000,0.176243100000,0.582328600000 129 | 487,0.046281520000,0.183558100000,0.550416200000 130 | 488,0.041150880000,0.191273500000,0.520337600000 131 | 489,0.036412830000,0.199418000000,0.491967300000 132 | 490,0.032010000000,0.208020000000,0.465180000000 133 | 491,0.027917200000,0.217119900000,0.439924600000 134 | 492,0.024144400000,0.226734500000,0.416183600000 135 | 493,0.020687000000,0.236857100000,0.393882200000 136 | 494,0.017540400000,0.247481200000,0.372945900000 137 | 495,0.014700000000,0.258600000000,0.353300000000 138 | 496,0.012161790000,0.270184900000,0.334857800000 139 | 497,0.009919960000,0.282293900000,0.317552100000 140 | 498,0.007967240000,0.295050500000,0.301337500000 141 | 499,0.006296346000,0.308578000000,0.286168600000 142 | 500,0.004900000000,0.323000000000,0.272000000000 143 | 501,0.003777173000,0.338402100000,0.258817100000 144 | 502,0.002945320000,0.354685800000,0.246483800000 145 | 503,0.002424880000,0.371698600000,0.234771800000 146 | 504,0.002236293000,0.389287500000,0.223453300000 147 | 505,0.002400000000,0.407300000000,0.212300000000 148 | 506,0.002925520000,0.425629900000,0.201169200000 149 | 507,0.003836560000,0.444309600000,0.190119600000 150 | 508,0.005174840000,0.463394400000,0.179225400000 151 | 509,0.006982080000,0.482939500000,0.168560800000 152 | 510,0.009300000000,0.503000000000,0.158200000000 153 | 511,0.012149490000,0.523569300000,0.148138300000 154 | 512,0.015535880000,0.544512000000,0.138375800000 155 | 513,0.019477520000,0.565690000000,0.128994200000 156 | 514,0.023992770000,0.586965300000,0.120075100000 157 | 515,0.029100000000,0.608200000000,0.111700000000 158 | 516,0.034814850000,0.629345600000,0.103904800000 159 | 517,0.041120160000,0.650306800000,0.096667480000 160 | 518,0.047985040000,0.670875200000,0.089982720000 161 | 519,0.055378610000,0.690842400000,0.083845310000 162 | 520,0.063270000000,0.710000000000,0.078249990000 163 | 521,0.071635010000,0.728185200000,0.073208990000 164 | 522,0.080462240000,0.745463600000,0.068678160000 165 | 523,0.089739960000,0.761969400000,0.064567840000 166 | 524,0.099456450000,0.777836800000,0.060788350000 167 | 525,0.109600000000,0.793200000000,0.057250010000 168 | 526,0.120167400000,0.808110400000,0.053904350000 169 | 527,0.131114500000,0.822496200000,0.050746640000 170 | 528,0.142367900000,0.836306800000,0.047752760000 171 | 529,0.153854200000,0.849491600000,0.044898590000 172 | 530,0.165500000000,0.862000000000,0.042160000000 173 | 531,0.177257100000,0.873810800000,0.039507280000 174 | 532,0.189140000000,0.884962400000,0.036935640000 175 | 533,0.201169400000,0.895493600000,0.034458360000 176 | 534,0.213365800000,0.905443200000,0.032088720000 177 | 535,0.225749900000,0.914850100000,0.029840000000 178 | 536,0.238320900000,0.923734800000,0.027711810000 179 | 537,0.251066800000,0.932092400000,0.025694440000 180 | 538,0.263992200000,0.939922600000,0.023787160000 181 | 539,0.277101700000,0.947225200000,0.021989250000 182 | 540,0.290400000000,0.954000000000,0.020300000000 183 | 541,0.303891200000,0.960256100000,0.018718050000 184 | 542,0.317572600000,0.966007400000,0.017240360000 185 | 543,0.331438400000,0.971260600000,0.015863640000 186 | 544,0.345482800000,0.976022500000,0.014584610000 187 | 545,0.359700000000,0.980300000000,0.013400000000 188 | 546,0.374083900000,0.984092400000,0.012307230000 189 | 547,0.388639600000,0.987418200000,0.011301880000 190 | 548,0.403378400000,0.990312800000,0.010377920000 191 | 549,0.418311500000,0.992811600000,0.009529306000 192 | 550,0.433449900000,0.994950100000,0.008749999000 193 | 551,0.448795300000,0.996710800000,0.008035200000 194 | 552,0.464336000000,0.998098300000,0.007381600000 195 | 553,0.480064000000,0.999112000000,0.006785400000 196 | 554,0.495971300000,0.999748200000,0.006242800000 197 | 555,0.512050100000,1.000000000000,0.005749999000 198 | 556,0.528295900000,0.999856700000,0.005303600000 199 | 557,0.544691600000,0.999304600000,0.004899800000 200 | 558,0.561209400000,0.998325500000,0.004534200000 201 | 559,0.577821500000,0.996898700000,0.004202400000 202 | 560,0.594500000000,0.995000000000,0.003900000000 203 | 561,0.611220900000,0.992600500000,0.003623200000 204 | 562,0.627975800000,0.989742600000,0.003370600000 205 | 563,0.644760200000,0.986444400000,0.003141400000 206 | 564,0.661569700000,0.982724100000,0.002934800000 207 | 565,0.678400000000,0.978600000000,0.002749999000 208 | 566,0.695239200000,0.974083700000,0.002585200000 209 | 567,0.712058600000,0.969171200000,0.002438600000 210 | 568,0.728828400000,0.963856800000,0.002309400000 211 | 569,0.745518800000,0.958134900000,0.002196800000 212 | 570,0.762100000000,0.952000000000,0.002100000000 213 | 571,0.778543200000,0.945450400000,0.002017733000 214 | 572,0.794825600000,0.938499200000,0.001948200000 215 | 573,0.810926400000,0.931162800000,0.001889800000 216 | 574,0.826824800000,0.923457600000,0.001840933000 217 | 575,0.842500000000,0.915400000000,0.001800000000 218 | 576,0.857932500000,0.907006400000,0.001766267000 219 | 577,0.873081600000,0.898277200000,0.001737800000 220 | 578,0.887894400000,0.889204800000,0.001711200000 221 | 579,0.902318100000,0.879781600000,0.001683067000 222 | 580,0.916300000000,0.870000000000,0.001650001000 223 | 581,0.929799500000,0.859861300000,0.001610133000 224 | 582,0.942798400000,0.849392000000,0.001564400000 225 | 583,0.955277600000,0.838622000000,0.001513600000 226 | 584,0.967217900000,0.827581300000,0.001458533000 227 | 585,0.978600000000,0.816300000000,0.001400000000 228 | 586,0.989385600000,0.804794700000,0.001336667000 229 | 587,0.999548800000,0.793082000000,0.001270000000 230 | 588,1.009089200000,0.781192000000,0.001205000000 231 | 589,1.018006400000,0.769154700000,0.001146667000 232 | 590,1.026300000000,0.757000000000,0.001100000000 233 | 591,1.033982700000,0.744754100000,0.001068800000 234 | 592,1.040986000000,0.732422400000,0.001049400000 235 | 593,1.047188000000,0.720003600000,0.001035600000 236 | 594,1.052466700000,0.707496500000,0.001021200000 237 | 595,1.056700000000,0.694900000000,0.001000000000 238 | 596,1.059794400000,0.682219200000,0.000968640000 239 | 597,1.061799200000,0.669471600000,0.000929920000 240 | 598,1.062806800000,0.656674400000,0.000886880000 241 | 599,1.062909600000,0.643844800000,0.000842560000 242 | 600,1.062200000000,0.631000000000,0.000800000000 243 | 601,1.060735200000,0.618155500000,0.000760960000 244 | 602,1.058443600000,0.605314400000,0.000723680000 245 | 603,1.055224400000,0.592475600000,0.000685920000 246 | 604,1.050976800000,0.579637900000,0.000645440000 247 | 605,1.045600000000,0.566800000000,0.000600000000 248 | 606,1.039036900000,0.553961100000,0.000547866700 249 | 607,1.031360800000,0.541137200000,0.000491600000 250 | 608,1.022666200000,0.528352800000,0.000435400000 251 | 609,1.013047700000,0.515632300000,0.000383466700 252 | 610,1.002600000000,0.503000000000,0.000340000000 253 | 611,0.991367500000,0.490468800000,0.000307253300 254 | 612,0.979331400000,0.478030400000,0.000283160000 255 | 613,0.966491600000,0.465677600000,0.000265440000 256 | 614,0.952847900000,0.453403200000,0.000251813300 257 | 615,0.938400000000,0.441200000000,0.000240000000 258 | 616,0.923194000000,0.429080000000,0.000229546700 259 | 617,0.907244000000,0.417036000000,0.000220640000 260 | 618,0.890502000000,0.405032000000,0.000211960000 261 | 619,0.872920000000,0.393032000000,0.000202186700 262 | 620,0.854449900000,0.381000000000,0.000190000000 263 | 621,0.835084000000,0.368918400000,0.000174213300 264 | 622,0.814946000000,0.356827200000,0.000155640000 265 | 623,0.794186000000,0.344776800000,0.000135960000 266 | 624,0.772954000000,0.332817600000,0.000116853300 267 | 625,0.751400000000,0.321000000000,0.000100000000 268 | 626,0.729583600000,0.309338100000,0.000086133330 269 | 627,0.707588800000,0.297850400000,0.000074600000 270 | 628,0.685602200000,0.286593600000,0.000065000000 271 | 629,0.663810400000,0.275624500000,0.000056933330 272 | 630,0.642400000000,0.265000000000,0.000049999990 273 | 631,0.621514900000,0.254763200000,0.000044160000 274 | 632,0.601113800000,0.244889600000,0.000039480000 275 | 633,0.581105200000,0.235334400000,0.000035720000 276 | 634,0.561397700000,0.226052800000,0.000032640000 277 | 635,0.541900000000,0.217000000000,0.000030000000 278 | 636,0.522599500000,0.208161600000,0.000027653330 279 | 637,0.503546400000,0.199548800000,0.000025560000 280 | 638,0.484743600000,0.191155200000,0.000023640000 281 | 639,0.466193900000,0.182974400000,0.000021813330 282 | 640,0.447900000000,0.175000000000,0.000020000000 283 | 641,0.429861300000,0.167223500000,0.000018133330 284 | 642,0.412098000000,0.159646400000,0.000016200000 285 | 643,0.394644000000,0.152277600000,0.000014200000 286 | 644,0.377533300000,0.145125900000,0.000012133330 287 | 645,0.360800000000,0.138200000000,0.000010000000 288 | 646,0.344456300000,0.131500300000,0.000007733333 289 | 647,0.328516800000,0.125024800000,0.000005400000 290 | 648,0.313019200000,0.118779200000,0.000003200000 291 | 649,0.298001100000,0.112769100000,0.000001333333 292 | 650,0.283500000000,0.107000000000,0.000000000000 293 | 651,0.269544800000,0.101476200000,0.000000000000 294 | 652,0.256118400000,0.096188640000,0.000000000000 295 | 653,0.243189600000,0.091122960000,0.000000000000 296 | 654,0.230727200000,0.086264850000,0.000000000000 297 | 655,0.218700000000,0.081600000000,0.000000000000 298 | 656,0.207097100000,0.077120640000,0.000000000000 299 | 657,0.195923200000,0.072825520000,0.000000000000 300 | 658,0.185170800000,0.068710080000,0.000000000000 301 | 659,0.174832300000,0.064769760000,0.000000000000 302 | 660,0.164900000000,0.061000000000,0.000000000000 303 | 661,0.155366700000,0.057396210000,0.000000000000 304 | 662,0.146230000000,0.053955040000,0.000000000000 305 | 663,0.137490000000,0.050673760000,0.000000000000 306 | 664,0.129146700000,0.047549650000,0.000000000000 307 | 665,0.121200000000,0.044580000000,0.000000000000 308 | 666,0.113639700000,0.041758720000,0.000000000000 309 | 667,0.106465000000,0.039084960000,0.000000000000 310 | 668,0.099690440000,0.036563840000,0.000000000000 311 | 669,0.093330610000,0.034200480000,0.000000000000 312 | 670,0.087400000000,0.032000000000,0.000000000000 313 | 671,0.081900960000,0.029962610000,0.000000000000 314 | 672,0.076804280000,0.028076640000,0.000000000000 315 | 673,0.072077120000,0.026329360000,0.000000000000 316 | 674,0.067686640000,0.024708050000,0.000000000000 317 | 675,0.063600000000,0.023200000000,0.000000000000 318 | 676,0.059806850000,0.021800770000,0.000000000000 319 | 677,0.056282160000,0.020501120000,0.000000000000 320 | 678,0.052971040000,0.019281080000,0.000000000000 321 | 679,0.049818610000,0.018120690000,0.000000000000 322 | 680,0.046770000000,0.017000000000,0.000000000000 323 | 681,0.043784050000,0.015903790000,0.000000000000 324 | 682,0.040875360000,0.014837180000,0.000000000000 325 | 683,0.038072640000,0.013810680000,0.000000000000 326 | 684,0.035404610000,0.012834780000,0.000000000000 327 | 685,0.032900000000,0.011920000000,0.000000000000 328 | 686,0.030564190000,0.011068310000,0.000000000000 329 | 687,0.028380560000,0.010273390000,0.000000000000 330 | 688,0.026344840000,0.009533311000,0.000000000000 331 | 689,0.024452750000,0.008846157000,0.000000000000 332 | 690,0.022700000000,0.008210000000,0.000000000000 333 | 691,0.021084290000,0.007623781000,0.000000000000 334 | 692,0.019599880000,0.007085424000,0.000000000000 335 | 693,0.018237320000,0.006591476000,0.000000000000 336 | 694,0.016987170000,0.006138485000,0.000000000000 337 | 695,0.015840000000,0.005723000000,0.000000000000 338 | 696,0.014790640000,0.005343059000,0.000000000000 339 | 697,0.013831320000,0.004995796000,0.000000000000 340 | 698,0.012948680000,0.004676404000,0.000000000000 341 | 699,0.012129200000,0.004380075000,0.000000000000 342 | 700,0.011359160000,0.004102000000,0.000000000000 343 | 701,0.010629350000,0.003838453000,0.000000000000 344 | 702,0.009938846000,0.003589099000,0.000000000000 345 | 703,0.009288422000,0.003354219000,0.000000000000 346 | 704,0.008678854000,0.003134093000,0.000000000000 347 | 705,0.008110916000,0.002929000000,0.000000000000 348 | 706,0.007582388000,0.002738139000,0.000000000000 349 | 707,0.007088746000,0.002559876000,0.000000000000 350 | 708,0.006627313000,0.002393244000,0.000000000000 351 | 709,0.006195408000,0.002237275000,0.000000000000 352 | 710,0.005790346000,0.002091000000,0.000000000000 353 | 711,0.005409826000,0.001953587000,0.000000000000 354 | 712,0.005052583000,0.001824580000,0.000000000000 355 | 713,0.004717512000,0.001703580000,0.000000000000 356 | 714,0.004403507000,0.001590187000,0.000000000000 357 | 715,0.004109457000,0.001484000000,0.000000000000 358 | 716,0.003833913000,0.001384496000,0.000000000000 359 | 717,0.003575748000,0.001291268000,0.000000000000 360 | 718,0.003334342000,0.001204092000,0.000000000000 361 | 719,0.003109075000,0.001122744000,0.000000000000 362 | 720,0.002899327000,0.001047000000,0.000000000000 363 | 721,0.002704348000,0.000976589600,0.000000000000 364 | 722,0.002523020000,0.000911108800,0.000000000000 365 | 723,0.002354168000,0.000850133200,0.000000000000 366 | 724,0.002196616000,0.000793238400,0.000000000000 367 | 725,0.002049190000,0.000740000000,0.000000000000 368 | 726,0.001910960000,0.000690082700,0.000000000000 369 | 727,0.001781438000,0.000643310000,0.000000000000 370 | 728,0.001660110000,0.000599496000,0.000000000000 371 | 729,0.001546459000,0.000558454700,0.000000000000 372 | 730,0.001439971000,0.000520000000,0.000000000000 373 | 731,0.001340042000,0.000483913600,0.000000000000 374 | 732,0.001246275000,0.000450052800,0.000000000000 375 | 733,0.001158471000,0.000418345200,0.000000000000 376 | 734,0.001076430000,0.000388718400,0.000000000000 377 | 735,0.000999949300,0.000361100000,0.000000000000 378 | 736,0.000928735800,0.000335383500,0.000000000000 379 | 737,0.000862433200,0.000311440400,0.000000000000 380 | 738,0.000800750300,0.000289165600,0.000000000000 381 | 739,0.000743396000,0.000268453900,0.000000000000 382 | 740,0.000690078600,0.000249200000,0.000000000000 383 | 741,0.000640515600,0.000231301900,0.000000000000 384 | 742,0.000594502100,0.000214685600,0.000000000000 385 | 743,0.000551864600,0.000199288400,0.000000000000 386 | 744,0.000512429000,0.000185047500,0.000000000000 387 | 745,0.000476021300,0.000171900000,0.000000000000 388 | 746,0.000442453600,0.000159778100,0.000000000000 389 | 747,0.000411511700,0.000148604400,0.000000000000 390 | 748,0.000382981400,0.000138301600,0.000000000000 391 | 749,0.000356649100,0.000128792500,0.000000000000 392 | 750,0.000332301100,0.000120000000,0.000000000000 393 | 751,0.000309758600,0.000111859500,0.000000000000 394 | 752,0.000288887100,0.000104322400,0.000000000000 395 | 753,0.000269539400,0.000097335600,0.000000000000 396 | 754,0.000251568200,0.000090845870,0.000000000000 397 | 755,0.000234826100,0.000084800000,0.000000000000 398 | 756,0.000219171000,0.000079146670,0.000000000000 399 | 757,0.000204525800,0.000073858000,0.000000000000 400 | 758,0.000190840500,0.000068916000,0.000000000000 401 | 759,0.000178065400,0.000064302670,0.000000000000 402 | 760,0.000166150500,0.000060000000,0.000000000000 403 | 761,0.000155023600,0.000055981870,0.000000000000 404 | 762,0.000144621900,0.000052225600,0.000000000000 405 | 763,0.000134909800,0.000048718400,0.000000000000 406 | 764,0.000125852000,0.000045447470,0.000000000000 407 | 765,0.000117413000,0.000042400000,0.000000000000 408 | 766,0.000109551500,0.000039561040,0.000000000000 409 | 767,0.000102224500,0.000036915120,0.000000000000 410 | 768,0.000095394450,0.000034448680,0.000000000000 411 | 769,0.000089023900,0.000032148160,0.000000000000 412 | 770,0.000083075270,0.000030000000,0.000000000000 413 | 771,0.000077512690,0.000027991250,0.000000000000 414 | 772,0.000072313040,0.000026113560,0.000000000000 415 | 773,0.000067457780,0.000024360240,0.000000000000 416 | 774,0.000062928440,0.000022724610,0.000000000000 417 | 775,0.000058706520,0.000021200000,0.000000000000 418 | 776,0.000054770280,0.000019778550,0.000000000000 419 | 777,0.000051099180,0.000018452850,0.000000000000 420 | 778,0.000047676540,0.000017216870,0.000000000000 421 | 779,0.000044485670,0.000016064590,0.000000000000 422 | 780,0.000041509940,0.000014990000,0.000000000000 423 | 781,0.000038733240,0.000013987280,0.000000000000 424 | 782,0.000036142030,0.000013051550,0.000000000000 425 | 783,0.000033723520,0.000012178180,0.000000000000 426 | 784,0.000031464870,0.000011362540,0.000000000000 427 | 785,0.000029353260,0.000010600000,0.000000000000 428 | 786,0.000027375730,0.000009885877,0.000000000000 429 | 787,0.000025524330,0.000009217304,0.000000000000 430 | 788,0.000023793760,0.000008592362,0.000000000000 431 | 789,0.000022178700,0.000008009133,0.000000000000 432 | 790,0.000020673830,0.000007465700,0.000000000000 433 | 791,0.000019272260,0.000006959567,0.000000000000 434 | 792,0.000017966400,0.000006487995,0.000000000000 435 | 793,0.000016749910,0.000006048699,0.000000000000 436 | 794,0.000015616480,0.000005639396,0.000000000000 437 | 795,0.000014559770,0.000005257800,0.000000000000 438 | 796,0.000013573870,0.000004901771,0.000000000000 439 | 797,0.000012654360,0.000004569720,0.000000000000 440 | 798,0.000011797230,0.000004260194,0.000000000000 441 | 799,0.000010998440,0.000003971739,0.000000000000 442 | 800,0.000010253980,0.000003702900,0.000000000000 443 | 801,0.000009559646,0.000003452163,0.000000000000 444 | 802,0.000008912044,0.000003218302,0.000000000000 445 | 803,0.000008308358,0.000003000300,0.000000000000 446 | 804,0.000007745769,0.000002797139,0.000000000000 447 | 805,0.000007221456,0.000002607800,0.000000000000 448 | 806,0.000006732475,0.000002431220,0.000000000000 449 | 807,0.000006276423,0.000002266531,0.000000000000 450 | 808,0.000005851304,0.000002113013,0.000000000000 451 | 809,0.000005455118,0.000001969943,0.000000000000 452 | 810,0.000005085868,0.000001836600,0.000000000000 453 | 811,0.000004741466,0.000001712230,0.000000000000 454 | 812,0.000004420236,0.000001596228,0.000000000000 455 | 813,0.000004120783,0.000001488090,0.000000000000 456 | 814,0.000003841716,0.000001387314,0.000000000000 457 | 815,0.000003581652,0.000001293400,0.000000000000 458 | 816,0.000003339127,0.000001205820,0.000000000000 459 | 817,0.000003112949,0.000001124143,0.000000000000 460 | 818,0.000002902121,0.000001048009,0.000000000000 461 | 819,0.000002705645,0.000000977058,0.000000000000 462 | 820,0.000002522525,0.000000910930,0.000000000000 463 | 821,0.000002351726,0.000000849251,0.000000000000 464 | 822,0.000002192415,0.000000791721,0.000000000000 465 | 823,0.000002043902,0.000000738090,0.000000000000 466 | 824,0.000001905497,0.000000688110,0.000000000000 467 | 825,0.000001776509,0.000000641530,0.000000000000 468 | 826,0.000001656215,0.000000598090,0.000000000000 469 | 827,0.000001544022,0.000000557575,0.000000000000 470 | 828,0.000001439440,0.000000519808,0.000000000000 471 | 829,0.000001341977,0.000000484612,0.000000000000 472 | 830,0.000001251141,0.000000451810,0.000000000000 -------------------------------------------------------------------------------- /temp.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import pandas as pd\n", 11 | "import matplotlib.pyplot as plt\n", 12 | "from matplotlib.cm import ScalarMappable\n", 13 | "from matplotlib.colors import ListedColormap, Normalize\n", 14 | "from matplotlib.ticker import MultipleLocator\n", 15 | "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", 16 | "\n", 17 | "from common import *" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "def save_fig(fig, filename):\n", 27 | " filepath = './fig/' + filename\n", 28 | " fig.savefig(filepath, dpi=300, bbox_inches='tight')" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 8, 34 | "metadata": {}, 35 | "outputs": [ 36 | { 37 | "data": { 38 | "text/plain": [ 39 | "Text(0, 0.5, 'y')" 40 | ] 41 | }, 42 | "execution_count": 8, 43 | "metadata": {}, 44 | "output_type": "execute_result" 45 | }, 46 | { 47 | "data": { 48 | "image/png": "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", 49 | "text/plain": [ 50 | "
" 51 | ] 52 | }, 53 | "metadata": {}, 54 | "output_type": "display_data" 55 | } 56 | ], 57 | "source": [ 58 | "fig, ax = plt.subplots()\n", 59 | "ax.set_aspect('equal')\n", 60 | "ax.set_xlim(0, 1)\n", 61 | "ax.set_ylim(0, 1)\n", 62 | "\n", 63 | "x = np.linspace(0, 1, 100)\n", 64 | "y1 = x**2.2\n", 65 | "y2 = x**(1 / 2.2)\n", 66 | "y3 = gamma_encoding(x)\n", 67 | "\n", 68 | "ax.plot(x, x, ls='--', lw=1, c='gray')\n", 69 | "ax.plot(x, y1, c='r', label='$y=x^{2.2}$')\n", 70 | "ax.plot(x, y2, c='g', label='$y=x^{1/2.2}$')\n", 71 | "ax.plot(x, y3, c='b', label='sRGB')\n", 72 | "ax.legend()\n", 73 | "\n", 74 | "ax.set_xlabel('x', fontsize='large')\n", 75 | "ax.set_ylabel('y', fontsize='large', rotation=0)\n", 76 | "# save_fig(fig, 'gamma_curve.png')" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 9, 82 | "metadata": {}, 83 | "outputs": [ 84 | { 85 | "data": { 86 | "text/plain": [ 87 | "Text(0.5, 1.0, 'With Gamma')" 88 | ] 89 | }, 90 | "execution_count": 9, 91 | "metadata": {}, 92 | "output_type": "execute_result" 93 | }, 94 | { 95 | "data": { 96 | "image/png": "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LALDm36vW7dO99xzj1q1aqXY2Fj1799fW7du9WO1aChv3981du3aJafTqR49ejRugbDK235fuHBBs2bNUocOHRQeHq5bbrlFr732mp+qRUN52+8VK1YoKSlJUVFRio+P1y9/+UuVl5f7qVo0xI4dOzRixAjddNNNcjgcys7O/t51rOQ146VVq1YZl8tllixZYoqLi83UqVNNdHS0+eKLL+pcvqSkxERFRZmpU6ea4uJis2TJEuNyucyaNWu83TUCwNt+T5061cybN8+8//775uDBg2bmzJnG5XKZDz74wM+Vwxfe9rvGyZMnTadOncyQIUNMUlKSf4pFg/nS75EjR5q+ffuanJwcc+jQIfPee++ZXbt2+bFq+MrbfhcUFJiQkBDz8ssvm5KSElNQUGBuu+02c9999/m5cvhi8+bNZtasWWbt2rVGklm/fv1Vl7eV17wOlikpKWby5MkeY127djUzZsyoc/np06ebrl27eow99NBDpl+/ft7uGgHgbb/r0q1bNzNnzhzbpaER+NrvsWPHmt/85jcmMzOTYHkd8bbfb7/9tomLizPl5eX+KA+WedvvF154wXTq1Mlj7JVXXjEJCQmNViMax7UES1t5zatD4RcvXtTevXs1ZMgQj/EhQ4bo73//e53r7N69u9by9957r/bs2aOqqiqvZlfhX770+0qXL19WRUWFmjdv3hglwiJf+71s2TJ9/vnnyszMbOwSYZEv/d6wYYN69+6t559/Xu3atVPnzp315JNP6vz58/4oGQ3gS79TU1NVWlqqzZs3yxijr7/+WmvWrNGwYcP8UTL8zFZec3qz07KyMl26dElt2rTxGG/Tpo2OHTtW5zrHjh2rc/nq6mqVlZUpPj7emxLgR770+0ovvviizp49q5/97GeNUSIs8qXf//jHPzRjxgwVFBTI6fTq1wkCzJd+l5SUaOfOnYqIiND69etVVlamKVOm6MSJE5xnGeR86XdqaqpWrFihsWPHqrKyUtXV1Ro5cqT++Mc/+qNk+JmtvObTxTsOh8PjvjGm1tj3LV/XOIKTt/2u8dZbb2n27NlavXq1Wrdu3VjlwbJr7felS5c0btw4zZkzR507d/ZXebDMm/f35cuX5XA4tGLFCqWkpGjo0KGaP3++li9fzqzldcKbfhcXF+uxxx7TM888o71792rLli06dOiQJk+e7I9SEQA28ppXUwwtW7ZUaGhorf9uvvnmm1opt0bbtm3rXN7pdKpFixbe7B5+5ku/a6xevVoTJ07UX/7yFw0ePLgxy4Ql3va7oqJCe/bsUVFRkR599FFJ3wYPY4ycTqe2bdumQYMG+aV2eM+X93d8fLzatWunuLg491hiYqKMMSotLdWtt97aqDXDd770e+7cuRowYIB+/etfS5K6d++u6OhoDRw4UL///e854vgDYyuveTVjGRYWpl69eiknJ8djPCcnR6mpqXWu079//1rLb9u2Tb1795bL5fJm9/AzX/otfTtTOWHCBK1cuZJzca4j3vY7NjZW+/fv1759+9y3yZMnq0uXLtq3b5/69u3rr9LhA1/e3wMGDNCRI0d05swZ99jBgwcVEhKihISERq0XDeNLv8+dO6eQEM+YEBoaKumfM1n44bCW17y61Mf88+MKsrKyTHFxsXn88cdNdHS0OXz4sDHGmBkzZpgHHnjAvXzN5eu/+tWvTHFxscnKyuLjhq4j3vZ75cqVxul0mgULFpijR4+6bydPngzUU4AXvO33lbgq/Pribb8rKipMQkKCGTNmjDlw4IDJz883t956q5k0aVKgngK84G2/ly1bZpxOp1m4cKH5/PPPzc6dO03v3r1NSkpKoJ4CvFBRUWGKiopMUVGRkWTmz59vioqK3B8v1Vh5zetgaYwxCxYsMB06dDBhYWEmOTnZ5Ofnux8bP368SUtL81g+Ly/P9OzZ04SFhZmOHTuaRYsW+bJbBIg3/U5LSzOSat3Gjx/v/8LhE2/f399FsLz+eNvvTz75xAwePNhERkaahIQEM23aNHPu3Dk/Vw1fedvvV155xXTr1s1ERkaa+Ph484tf/MKUlpb6uWr4Ijc396p/jxsrrzmMYT4bAAAADcd3hQMAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwAqCJQAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwAqCJQAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwAqCJQAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwAqCJQAAAKwgWAKwZs2aNXI4HFq9enWtx5KSkuRwOLR169Zaj91yyy1KTk6WJOXl5cnhcCgvL8/9+ObNmzV79uw69+lwOPToo482qO6vv/5aTz/9tHr06KHY2FiFhYUpISFBo0eP1oYNG3Tp0qUGbR8AmgqCJQBr0tPT5XA4lJub6zF+4sQJ7d+/X9HR0bUeKy0tVUlJiTIyMiRJycnJ2r17tztoSt8Gyzlz5jRKze+++67uuOMOLVmyRCNHjtSqVau0fft2Pffcc3K5XBo9erSWL1/eKPsGgB8aZ6ALAPDD0bJlS91+++0es42SlJ+fL6fTqYkTJ9YKljX3a4JlbGys+vXr55d6T548qfvuu08xMTHatWuX4uPjPR6///779dFHH6m8vNwv9QDA9Y4ZSwBWZWRk6LPPPtPRo0fdY3l5eerTp4+GDh2qvXv3qqKiwuOx0NBQDRw40H3/u4fCJ0yYoAULFkj69rB3ze3w4cMe+33jjTeUmJioqKgoJSUlaePGjd9b65IlS/T111/r+eefrxUqa3Tv3t0deiXp+PHjmjJlirp166aYmBi1bt1agwYNUkFBgcd6hw8flsPh0AsvvKB58+apY8eOioyMVHp6ug4ePKiqqirNmDFDN910k+Li4jRq1Ch98803Htvo2LGjhg8fro0bN6pnz56KjIxUYmKi+7ktX75ciYmJio6OVkpKivbs2eOx/p49e/Tzn//cve+OHTvqX//1X/XFF19872sDAL4gWAKwqiaEfXfWMjc3V2lpaRowYIAcDodHCMvNzVVycrLi4uLq3N5vf/tbjRkzRpK0e/du9+27QXDTpk169dVX9eyzz2rt2rVq3ry5Ro0apZKSkqvWmpOTo9DQUA0dOvSan9+JEyckSZmZmdq0aZOWLVumTp06KT09vdZMrSQtWLBAu3bt0oIFC7R06VJ9+umnGjFihCZOnKjjx4/rtdde0/PPP6/t27dr0qRJtdb/8MMPNXPmTD311FNat26d4uLiNHr0aGVmZmrp0qX6wx/+oBUrVujUqVMaPny4zp8/71738OHD6tKli1566SVt3bpV8+bN09GjR9WnTx+VlZVd83MGgGtmAMCiEydOmJCQEPPggw8aY4wpKyszDofDbNmyxRhjTEpKinnyySeNMcZ8+eWXRpKZPn26e/3c3FwjyeTm5rrHHnnkEVPfrytJpk2bNub06dPusWPHjpmQkBAzd+7cq9batWtX07Zt21rjly5dMlVVVe7bpUuX6t1GdXW1qaqqMnfffbcZNWqUe/zQoUNGkklKSvJY/6WXXjKSzMiRIz228/jjjxtJ5tSpU+6xDh06mMjISFNaWuoe27dvn5Fk4uPjzdmzZ93j2dnZRpLZsGHDVWs9c+aMiY6ONi+//HK9ywGAr5ixBGDVjTfeqKSkJPfsXX5+vkJDQzVgwABJUlpamvu8yivPr/RVRkaGmjVr5r7fpk0btW7d2udDvtOmTZPL5XLfRo4c6fH44sWLlZycrIiICDmdTrlcLv3tb3/TJ598UmtbQ4cOVUjIP3/VJiYmSpKGDRvmsVzN+Jdffukx3qNHD7Vr167Wcunp6YqKiqo1/t3nfObMGT311FP68Y9/LKfTKafTqZiYGJ09e7bOWgGgoQiWAKzLyMjQwYMHdeTIEeXm5qpXr16KiYmR9G2wLCoq0qlTp5Sbmyun06k777yzQftr0aJFrbHw8HCPw8J1+dGPfqTjx4/r3LlzHuNPPPGECgsLVVhYWOvcy/nz5+vhhx9W3759tXbtWr377rsqLCzUT37ykzr317x5c4/7YWFhVx2vrKy0tv64ceP06quvatKkSdq6davef/99FRYWqlWrVt/72gCAL7gqHIB1GRkZmj9/vvLy8pSXl+dxDmNNiNyxY4f7op6a0Olv99xzj7Zt26bNmze7z+OUpPbt26t9+/aS/hnYarz55ptKT0/XokWLPMa/e0FSMDh16pQ2btyozMxMzZgxwz1+4cIF93miAGAbM5YArLvrrrsUGhqqNWvW6MCBA0pPT3c/FhcXpx49euj111/X4cOHr+kweHh4uCRZn2WbNGmS2rRpo+nTp3tcxX41DofDXU+Njz76SLt377ZaW0M5HA4ZY2rVunTpUj7wHUCjYcYSgHWxsbFKTk5Wdna2QkJC3OdX1khLS9NLL70k6drOr7zjjjskSfPmzdNPf/pThYaGqnv37rVmE711ww03KDs7WyNGjFBSUpIefvhh9evXTzExMSovL9eOHTt07NgxpaamutcZPny4fve73ykzM1NpaWn67LPP9Oyzz+rmm29WdXV1g+qxKTY2VnfddZdeeOEFtWzZUh07dlR+fr6ysrJ0ww03BLo8AD9QzFgCaBQZGRkyxqhnz56KjY31eCwtLU3GGIWFhXmEtvqMGzdOkyZN0sKFC9W/f3/16dNHR44csVJnv3799PHHH2vSpEnKzs7Wv/zLv+juu+/WI488ov/93//VkiVL9Oc//9m9/KxZs/TEE08oKytLw4YN09KlS7V48eIGnyfaGFauXKmMjAxNnz5do0eP1p49e5STk1PvRzsBQEM5jDEm0EUAAADg+seMJQAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwIpG+YD0yspKXbx4sTE2DQAAAAvCwsIUERFhdZvWg2VlZaUiIyNtbxYAAAAWtW3bVocOHbIaLq0Hy2CfqRw8eHCgS6hXQkJCoEuoU6tWrQJdQr2C+avprvy2mWDSrFmzQJdQp5iYmECXUK+oqKhAl1CvYP5nPlhfN9uzNDYFcz+v/O75YBKsPQ3Wuk6fPq327dvr4sWLwR0sg53L5Qp0CfVq6PceNxZ+kfgmmP84BOsf+2CtS5Kio6MDXUK9gvl1C9bagvn9Gcy1BfPv3GCtLVjraixcvAMAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsIJgCQAAACsIlgAAALCCYAkAAAArCJYAAACwgmAJAAAAKwiWAAAAsMIZ6AL8raqqKtAl1OvixYuBLqFOFy5cCHQJ9aqsrAx0CfUKCwsLdAn1cjqD860fEsL/ur64fPlyoEuoV7DWVl1dHegS6hXMtQXr3ykpeGsL1rpOnz7dKNu1/tfFGKOYmBidOXPG9qat2L59e6BLAAAACLiYmBgZY6xu03qwdDgcOnPmjL766ivFxsba3jyCzOnTp9W+fXv63UTQ76aFfjct9Ltpqem3w+Gwut1GOx4WGxvLD2YTQr+bFvrdtNDvpoV+oyE4oQkAAABWECwBAABghfVgGR4erszMTIWHh9veNIIQ/W5a6HfTQr+bFvrdtDRWvx3G9uVAAAAAaJI4FA4AAAArCJYAAACwgmAJAAAAKwiWAAAAsMKnYLlw4ULdfPPNioiIUK9evVRQUHDV5fPz89WrVy9FRESoU6dOWrx4sU/FIjC86fe6det0zz33qFWrVoqNjVX//v21detWP1aLhvL2/V1j165dcjqd6tGjR+MWCKu87feFCxc0a9YsdejQQeHh4brlllv02muv+alaNJS3/V6xYoWSkpIUFRWl+Ph4/fKXv1R5ebmfqkVD7NixQyNGjNBNN90kh8Oh7Ozs713HSl4zXlq1apVxuVxmyZIlpri42EydOtVER0ebL774os7lS0pKTFRUlJk6daopLi42S5YsMS6Xy6xZs8bbXSMAvO331KlTzbx588z7779vDh48aGbOnGlcLpf54IMP/Fw5fOFtv2ucPHnSdOrUyQwZMsQkJSX5p1g0mC/9HjlypOnbt6/Jyckxhw4dMu+9957ZtWuXH6uGr7ztd0FBgQkJCTEvv/yyKSkpMQUFBea2224z9913n58rhy82b95sZs2aZdauXWskmfXr1191eVt5zetgmZKSYiZPnuwx1rVrVzNjxow6l58+fbrp2rWrx9hDDz1k+vXr5+2uEQDe9rsu3bp1M3PmzLFdGhqBr/0eO3as+c1vfmMyMzMJltcRb/v99ttvm7i4OFNeXu6P8mCZt/1+4YUXTKdOnTzGXnnlFZOQkNBoNaJxXEuwtJXXvDoUfvHiRe3du1dDhgzxGB8yZIj+/ve/17nO7t27ay1/7733as+ePaqqqvJqdhX+5Uu/r3T58mVVVFSoefPmjVEiLPK138uWLdPnn3+uzMzMxi4RFvnS7w0bNqh37956/vnn1a5dO3Xu3FlPPvmkzp8/74+S0QC+9Ds1NVWlpaXavHmzjDH6+uuvtWbNGg0bNswfJcPPbOU1pzc7LSsr06VLl9SmTRuP8TZt2ujYsWN1rnPs2LE6l6+urlZZWZni4+O9KQF+5Eu/r/Tiiy/q7Nmz+tnPftYYJcIiX/r9j3/8QzNmzFBBQYGcTq9+nSDAfOl3SUmJdu7cqYiICK1fv15lZWWaMmWKTpw4wXmWQc6XfqempmrFihUaO3asKisrVV1drZEjR+qPf/yjP0qGn9nKaz5dvONwODzuG2NqjX3f8nWNIzh52+8ab731lmbPnq3Vq1erdevWjVUeLLvWfl+6dEnjxo3TnDlz1LlzZ3+VB8u8eX9fvnxZDodDK1asUEpKioYOHar58+dr+fLlzFpeJ7zpd3FxsR577DE988wz2rt3r7Zs2aJDhw5p8uTJ/igVAWAjr3k1xdCyZUuFhobW+u/mm2++qZVya7Rt27bO5Z1Op1q0aOHN7uFnvvS7xurVqzVx4kT95S9/0eDBgxuzTFjibb8rKiq0Z88eFRUV6dFHH5X0bfAwxsjpdGrbtm0aNGiQX2qH93x5f8fHx6tdu3aKi4tzjyUmJsoYo9LSUt16662NWjN850u/586dqwEDBujXv/61JKl79+6Kjo7WwIED9fvf/54jjj8wtvKaVzOWYWFh6tWrl3JycjzGc3JylJqaWuc6/fv3r7X8tm3b1Lt3b7lcLm92Dz/zpd/StzOVEyZM0MqVKzkX5zribb9jY2O1f/9+7du3z32bPHmyunTpon379qlv377+Kh0+8OX9PWDAAB05ckRnzpxxjx08eFAhISFKSEho1HrRML70+9y5cwoJ8YwJoaGhkv45k4UfDmt5zatLfcw/P64gKyvLFBcXm8cff9xER0ebw4cPG2OMmTFjhnnggQfcy9dcvv6rX/3KFBcXm6ysLD5u6Dribb9XrlxpnE6nWbBggTl69Kj7dvLkyUA9BXjB235fiavCry/e9ruiosIkJCSYMWPGmAMHDpj8/Hxz6623mkmTJgXqKcAL3vZ72bJlxul0moULF5rPP//c7Ny50/Tu3dukpKQE6inACxUVFaaoqMgUFRUZSWb+/PmmqKjI/fFSjZXXvA6WxhizYMEC06FDBxMWFmaSk5NNfn6++7Hx48ebtLQ0j+Xz8vJMz549TVhYmOnYsaNZtGiRL7tFgHjT77S0NCOp1m38+PH+Lxw+8fb9/V0Ey+uPt/3+5JNPzODBg01kZKRJSEgw06ZNM+fOnfNz1fCVt/1+5ZVXTLdu3UxkZKSJj483v/jFL0xpaamfq4YvcnNzr/r3uLHymsMY5rMBAADQcHxXOAAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwAqCJQAAAKwgWAIAAMAKgiUAAACsIFgCAADACoIlAAAArCBYAgAAwIr/B9SHRToGz/vHAAAAAElFTkSuQmCC", 97 | "text/plain": [ 98 | "
" 99 | ] 100 | }, 101 | "metadata": {}, 102 | "output_type": "display_data" 103 | } 104 | ], 105 | "source": [ 106 | "RGB1 = np.ones(3) * np.linspace(0, 1, 16)[:, np.newaxis]\n", 107 | "RGB2 = gamma_encoding(RGB1)\n", 108 | "\n", 109 | "mappable1 = ScalarMappable(cmap=ListedColormap(RGB1))\n", 110 | "mappable2 = ScalarMappable(cmap=ListedColormap(RGB2))\n", 111 | "\n", 112 | "fig, axes = plt.subplots(2, 1, figsize=(8, 2))\n", 113 | "fig.subplots_adjust(hspace=1.5)\n", 114 | "fig.colorbar(mappable1, cax=axes[0], orientation='horizontal')\n", 115 | "fig.colorbar(mappable2, cax=axes[1], orientation='horizontal')\n", 116 | "axes[0].set_title('Without Gamma')\n", 117 | "axes[1].set_title('With Gamma')\n", 118 | "# save_fig('gamma_grayscale.png')" 119 | ] 120 | } 121 | ], 122 | "metadata": { 123 | "kernelspec": { 124 | "display_name": "base", 125 | "language": "python", 126 | "name": "python3" 127 | }, 128 | "language_info": { 129 | "codemirror_mode": { 130 | "name": "ipython", 131 | "version": 3 132 | }, 133 | "file_extension": ".py", 134 | "mimetype": "text/x-python", 135 | "name": "python", 136 | "nbconvert_exporter": "python", 137 | "pygments_lexer": "ipython3", 138 | "version": "3.9.12" 139 | }, 140 | "orig_nbformat": 4 141 | }, 142 | "nbformat": 4, 143 | "nbformat_minor": 2 144 | } 145 | -------------------------------------------------------------------------------- /03_blackbody_radiation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "from scipy.constants import h, c, k\n", 11 | "import matplotlib.pyplot as plt\n", 12 | "\n", 13 | "from common import *\n", 14 | "from chromaticity_diagram import xyDiagram" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "def unit_scale(unit):\n", 24 | " return {'m': 1e0, 'um': 1e-6, 'nm': 1e-9}[unit]\n", 25 | "\n", 26 | "def planck_function(wavelength, T, unit='m'):\n", 27 | " scale = unit_scale(unit)\n", 28 | " wavelength = wavelength * scale\n", 29 | " dividend = 2 * h * c**2 / wavelength**5\n", 30 | " divisor = np.exp(h * c / k / T / wavelength) - 1\n", 31 | " result = dividend / divisor * scale\n", 32 | " \n", 33 | " return result\n", 34 | "\n", 35 | "def max_wavelength(T, unit='m'):\n", 36 | " return 2.897e-3 / unit_scale(unit) / T" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "name": "stderr", 46 | "output_type": "stream", 47 | "text": [ 48 | "C:\\Users\\USER\\AppData\\Local\\Temp\\ipykernel_16852\\1912354767.py:8: RuntimeWarning: overflow encountered in exp\n", 49 | " divisor = np.exp(h * c / k / T / wavelength) - 1\n" 50 | ] 51 | }, 52 | { 53 | "data": { 54 | "text/plain": [ 55 | "Text(0, 0.5, 'Radiance ($W \\\\cdot m^{-2} \\\\cdot sr^{-1} \\\\cdot \\\\mu m^{-1}$)')" 56 | ] 57 | }, 58 | "execution_count": 3, 59 | "metadata": {}, 60 | "output_type": "execute_result" 61 | }, 62 | { 63 | "data": { 64 | "image/png": "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", 65 | "text/plain": [ 66 | "
" 67 | ] 68 | }, 69 | "metadata": {}, 70 | "output_type": "display_data" 71 | } 72 | ], 73 | "source": [ 74 | "fig, ax = plt.subplots(figsize=(8, 5))\n", 75 | "wavelength = np.logspace(-2, 3, 1000)\n", 76 | "for T in [300, 2800, 6000]:\n", 77 | " radiance = planck_function(wavelength, T, unit='um')\n", 78 | " ax.plot(wavelength, radiance, label=f'T={T}K')\n", 79 | "ax.axvspan(0.36, 0.83, color='gray', alpha=0.2, label='visible')\n", 80 | "ax.legend(fontsize='large')\n", 81 | "\n", 82 | "ax.set_xscale('log')\n", 83 | "ax.set_yscale('log')\n", 84 | "ax.set_xlim(1e-2, 1e3)\n", 85 | "ax.set_ylim(1e-1, 1e9)\n", 86 | "ax.minorticks_off()\n", 87 | "ax.set_xlabel('Wavelength (μm)', fontsize='large')\n", 88 | "unit_str = r'$W \\cdot m^{-2} \\cdot sr^{-1} \\cdot \\mu m^{-1}$'\n", 89 | "ax.set_ylabel(f'Radiance ({unit_str})', fontsize='large')" 90 | ] 91 | } 92 | ], 93 | "metadata": { 94 | "kernelspec": { 95 | "display_name": "base", 96 | "language": "python", 97 | "name": "python3" 98 | }, 99 | "language_info": { 100 | "codemirror_mode": { 101 | "name": "ipython", 102 | "version": 3 103 | }, 104 | "file_extension": ".py", 105 | "mimetype": "text/x-python", 106 | "name": "python", 107 | "nbconvert_exporter": "python", 108 | "pygments_lexer": "ipython3", 109 | "version": "3.9.12" 110 | }, 111 | "orig_nbformat": 4 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 2 115 | } 116 | --------------------------------------------------------------------------------