2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 14:09 


21/07/17
46
Нужно найти длину волны используя RGB характеристики. У меня есть код, который находит RGB характеристики данного пикселя.

Используется синтаксис Python
from PIL import Image
im = Image.open('laba.png')
rgb_im = im.convert('RGB')
print(rgb_im)
r, g, b = rgb_im.getpixel((159, 150))
print(r, g, b)
 

В интернете есть информация как по длине волны получить RGB. Данный вариант мне не подходит. Также я нашел ссылку, в которой есть способ нахождения, но я не уверен в нем.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 14:20 
Заслуженный участник


04/03/09
910
А этого попросту нельзя сделать. Каждой длине волны соответствует тройка RGB(и не одна, потому что яркость можно менять), но в обратную сторону это неверно.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 14:23 


21/07/17
46
Существуют альтернативные пути решение данной проблемы?

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 14:58 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Какой проблемы? Какую длину волны Вам надо получить?

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:11 


21/07/17
46
Цитата:
Какой проблемы? Какую длину волны Вам надо получить?


У меня есть фотография спектральных линий ртутной лампы. Нужно найти длину волны каждой линии.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:19 
Заслуженный участник


27/04/09
28128
12d3 в сообщении #1259890 писал(а):
Каждой длине волны соответствует тройка RGB(и не одна, потому что яркость можно менять)
Притом как минимум важно, какое из всевозможных пространств с названиями …RGB используется. Часто это sRGB, но не всегда. Плюс конкретный дисплей может быть неоткалиброван.

pbm в сообщении #1259897 писал(а):
У меня есть фотография спектральных линий ртутной лампы. Нужно найти длину волны каждой линии.
Значит, вместо неизвестного преобразования экрана неизвестное преобразование фотоаппарата. Тут можно попытаться использовать одновременно и расстояния между линиями, и «цвета», но, во-первых, это будет в отсутствии иной информации лишь некая эвристика и, во-вторых, с весьма неудобными вычислениями, которые я даже не до конца сейчас представляю. Лучше попытайтесь получить другие исходные данные получше.

К тому же это ведь весьма известный спектр, так? Найдите длины волн по какому-нибудь справочнику. Чем это не устраивает?

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:28 


05/09/16
12066
pbm в сообщении #1259897 писал(а):
У меня есть фотография спектральных линий ртутной лампы. Нужно найти длину волны каждой линии.

надо приделать линейку типа вот так:
Изображение

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:28 


21/07/17
46
Цитата:
К тому же это ведь весьма известный спектр, так? Найдите длины волн по какому-нибудь справочнику

Я знаю, что в интернете есть спектр и длины волн ртутной лампы.
Цитата:
Чем это не устраивает?

Я хотел проверить, возможно ли найти длины волн имея только фотографии спектра.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:31 


05/09/16
12066
arseniiv в сообщении #1259898 писал(а):
Плюс конкретный дисплей может быть неоткалиброван.

Вот как раз именно дисплей тут не при чем :lol:

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:38 
Заслуженный участник


27/04/09
28128
pbm в сообщении #1259903 писал(а):
Я хотел проверить, возможно ли найти длины волн имея только фотографии спектра.
Тогда самый лучший ответ — нет. Такими задачами заниматься не стоит. А если вы, например, собрались делать спектрограф из веб-камеры, его можно будет с помощью известных спектров сначала откалибровать, и потом вы будете знать, где на изображении какая длина волны, не обращая внимание на цвет.

-- Сб окт 28, 2017 17:38:31 --

wrest в сообщении #1259905 писал(а):
Вот как раз именно дисплей тут не при чем :lol:
Я это писал до появления ответа про фотографию. :-)

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:41 


05/09/16
12066
pbm в сообщении #1259903 писал(а):
Я хотел проверить, возможно ли найти длины волн имея только фотографии спектра.

если у вас есть raw фотка (то есть значения снятые с фотодиодов за цветными фильтрами) плюс точно промерянная спектральная характеристика фотоаппарата (объектив+матрица+постобработка до помещения чисел в raw), плюс априорное знание что на фотке только спектральные цвета, то вот тогда может быть можно.
а если у вас какое-то непонятно какое RGB то нет, нельзя. можно только сказать что цвет примерно красный или примерно фиолетовый.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:45 
Заслуженный участник


09/05/12
25179
В идеале (считая, что регистрирующая аппаратура не искажает цвета, что на самом деле ниоткуда не следует): взять какую-то реализацию функции $\lambda \mapsto \{ R,G,B\}$ и решать обратную задачу. Как уже было замечено, решение может быть не единственным.

В реальности: отснять один или несколько спектров сравнения (надо, чтобы весь рабочий диапазон был достаточно хорошо заполнен линиями, поэтому одного спектра может оказаться мало), для которых известны длины волн линий, получить для этих линий $\{ R,G,B\}$, по этим данным табулировать функцию $\lambda \mapsto \{ R,G,B\}$ для данной аппаратуры, после чего уже с ней реализовать предыдущий пункт.

 Профиль  
                  
 
 Posted automatically
Сообщение28.10.2017, 15:46 
Заслуженный участник


09/05/12
25179
 i  Тема перемещена из форума «Программирование» в форум «Помогите решить / разобраться (Ф)»
Причина переноса: к программированию этот вопрос отношения не имеет, задача сугубо физическая.

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:51 


21/07/17
46
Если я сфотографирую не весь спектр, а каждую линию отдельно. Это упростит ситуацию, находжегння длины волны?

 Профиль  
                  
 
 Re: Python: как конвертировать RGB в длину волны?
Сообщение28.10.2017, 15:55 
Заслуженный участник


27/04/09
28128
Pphantom в сообщении #1259909 писал(а):
В реальности: отснять один или несколько спектров сравнения (надо, чтобы весь рабочий диапазон был достаточно хорошо заполнен линиями, поэтому одного спектра может оказаться мало), для которых известны длины волн линий, получить для этих линий $\{ R,G,B\}$, по этим данным табулировать функцию $\lambda \mapsto \{ R,G,B\}$ для данной аппаратуры, после чего уже с ней реализовать предыдущий пункт.
Мне кажется, тогда лучше всё-таки зафиксировать камеру относительно остальной аппаратуры, и после этого работать только с положением, а не цветами точек. Ну, конечно, если там что-то развинтится, и спектр на изображении сдвинется, цвета дадут какую-то коррекцию, но обычно, вроде, ничего не развинчивается.

pbm в сообщении #1259911 писал(а):
Если я сфотографирую не весь спектр, а каждую линию отдельно. Это упростит ситуацию, находжегння длины волны?
Наоборот.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Модераторы: photon, whiterussian, profrotter, Jnrty, Aer, Парджеттер, Eule_A, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group