Skip to content

Instantly share code, notes, and snippets.

@alexzam
Last active September 12, 2022 13:52
Show Gist options
  • Select an option

  • Save alexzam/1ea96e11b060b50cee9512519e420660 to your computer and use it in GitHub Desktop.

Select an option

Save alexzam/1ea96e11b060b50cee9512519e420660 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"### Вычисление допустимых спектральных цветов внутри заданного в пространстве XY четырёхугольника\n",
"Это нужно, чтобы подобрать цвета светодиодов, соответствующих спецификации МППСС.\n",
"\n",
"Формулы взяты из [Википедии](https://en.wikipedia.org/wiki/CIE_1931_color_space#Meaning_of_X,_Y_and_Z)\n",
"\n",
"Задаём функцию\n",
"$$g(x, \\mu, \\sigma_1, \\sigma_2) = \\begin{cases} e ^ {-\\frac{(x - \\mu)^2}{2\\sigma_1^2}} & x < \\mu \\\\ e ^ {-\\frac{(x - \\mu)^2}{2\\sigma_2^2}} & x >= \\mu \\end{cases} $$\n",
"\n",
"Это гауссиана с разными дисперсиями слева и справа."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"import math\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def double_gauss(x: float, mu: float, s1:float, s2:float):\n",
" t = -((x - mu) ** 2.0) / 2.0\n",
" if x < mu:\n",
" return math.exp(t / s1 ** 2.0)\n",
" else:\n",
" return math.exp(t / s2 ** 2.0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"Дальше определяем \"стандартного наблюдателя\", это три функции, отображающие точку спектра в пространство XYZ. И потом две функции, отображающие пространство XYZ в xyY."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def x(l):\n",
" return 1.056 * double_gauss(l, 599.8, 37.9, 31.0) \\\n",
" + 0.362 * double_gauss(l, 442.0, 16.0, 26.7) \\\n",
" - 0.065 * double_gauss(l, 501.1, 20.4, 26.2)\n",
"\n",
"\n",
"def y(l):\n",
" return 0.821 * double_gauss(l, 568.8, 46.9, 40.5) \\\n",
" + 0.286 * double_gauss(l, 530.9, 16.3, 31.1)\n",
"\n",
"\n",
"def z(l):\n",
" return 1.217 * double_gauss(l, 437.0, 11.8, 36.0) \\\n",
" + 0.681 * double_gauss(l, 459.0, 26.0, 13.8)\n",
"\n",
"\n",
"def xy_x(x, y, z):\n",
" return x / (x + y + z)\n",
"\n",
"\n",
"def xy_y(x, y, z):\n",
" return y / (x + y + z)\n",
"\n",
"def xl(l):\n",
" return xy_x(x(l), y(l), z(l))\n",
"\n",
"def yl(l):\n",
" return xy_y(x(l), y(l), z(l))"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"Границы допустимых цветов в пространстве xyY по МППСС. Координату Y игнорируем везде, потому что это яркость."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"green_polygon = [[0.028, 0.385], [0.009, 0.723], [0.3, 0.511], [0.203, 0.356]]\n",
"red_polygon = [[0.68, 0.32], [0.66, 0.32], [0.721, 0.259], [0.735, 0.265]]\n",
"green_fig = green_polygon + [green_polygon[0]]\n",
"red_fig = red_polygon + [red_polygon[0]]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"spectre = [l for l in range(400, 690, 5)]\n",
"spectreX = [xl(l) for l in spectre]\n",
"spectreY = [yl(l) for l in spectre]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"text/plain": "<Figure size 432x432 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"lx = [493.5, 508, 613]\n",
"tx = [xl(l) for l in lx]\n",
"ty = [yl(l) for l in lx]\n",
"\n",
"fig = plt.figure(1, [6, 6])\n",
"ax = fig.add_axes([0, 0, 1, 1])\n",
"plt.plot([p[0] for p in green_fig], [p[1] for p in green_fig], \"green\")\n",
"plt.plot([p[0] for p in red_fig], [p[1] for p in red_fig], \"red\")\n",
"plt.plot(spectreX, spectreY,\"orange\")\n",
"plt.plot(tx, ty, \"bo\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"Оказалось проще угадать границы, но вот получаем:\n",
"зелёный в пределах 493.5nm — 508nm\n",
"красный от 613nm и, видимо, до конца в пределах видимости (780?)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment