Автор Тема: Поляризационная видеокамера  (Прочитано 64355 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #90 : 06 Декабрь 2012, 23:46:36 »
если делать 2 фото
1 фото  0  градусов
2 фото 90 градусов
угол можно вычислить ArcTan(k1/k2)
угол меняется в пределах от 0 до 90 градусов

поляризация существует в диапазоне от 0 до 180 градусов

вы написали формулу для 3 снимков
там в каком диапазоне поляризация меняется?

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #91 : 07 Декабрь 2012, 00:34:40 »
для формулы есть значения
фи = 0.5*arcsin(2*G/(R+B) - 1)
вызывающие в программе ошибку так как выражение 2*G/(R+B) - 1  иногда выходит за пределы -1  до +1

можно ли остановится на формуле где есть 2 значения
как расширить ее диапазон от 0 до 180


правильно ли написано
Arctan2 правильно определяет квадрант, то есть умеет различать углы, отличающиеся на 180, и выводит ответ в диапазоне от 0 до 360 градусов.

Arctan вычисляет честный арктангенс и выдает ответ в диапазоне от -90 до 90, не различая углы, отличающиеся на 180.

тоесть текст
if (k2>0) and (k1>0) then kut:=(180*ArcTan(k1/k2))/PI;
if (k2>0) and (k1<0) then kut:=(180*ArcTan(k1/k2))/PI+360;
if (k2<0) and (k1>0) then kut:=(180*ArcTan(k1/k2))/PI+180;
if (k2<0) and (k1<0) then kut:=(180*ArcTan(k1/k2))/PI+180;
if (k2=0) and (k1>0) then kut:=90;
if (k2=0) and (k1<0) then kut:=270;
if (k2=0) and (k1=0) then kut:=0;

заменяется одной командой  kut:=(180*ArcTan2(k1,k2))/PI;
« Последнее редактирование: 07 Декабрь 2012, 00:43:26 от barbucha »

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #92 : 07 Декабрь 2012, 11:04:42 »
если делать 2 фото
1 фото  0  градусов
2 фото 90 градусов
угол можно вычислить ArcTan(k1/k2)
угол меняется в пределах от 0 до 90 градусов

поляризация существует в диапазоне от 0 до 180 градусов

вы написали формулу для 3 снимков
там в каком диапазоне поляризация меняется?
Во всем диапазоне, от 0 до 180 градусов.

Если угол вычислять как ArcTan(k1/k2), то угол получается от 0 до 90 градусов, но это всего ОДИН из двух возможных вариантов. Второй вариант получается по формуле ArcTan(-k1/k2), и он дает угол от 90 до 180 градусов. Из этих вариантов верен только один, а какой именно - надо определять по третьему каналу.

У меня в выкладках была эта формула.

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #93 : 07 Декабрь 2012, 11:15:51 »
для формулы есть значения
фи = 0.5*arcsin(2*G/(R+B) - 1)
вызывающие в программе ошибку так как выражение 2*G/(R+B) - 1  иногда выходит за пределы -1  до +1

можно ли остановится на формуле где есть 2 значения
как расширить ее диапазон от 0 до 180

Ее диапазон и так от 0 до 180 (или, что то же самое, от -90 до 90).

Выход за пределы от -1 до +1 получается из-за того, что поляризация на самом деле не только линейная и не одна. Присутствие круговой или двух линейных одновременно дает такой эффект. Я думаю, вы понимаете, что если поляризация не одна, то никакой "угол" посчитать не удастся. Дело в том, что сумма поляризаций раскладывается на компоненты бесконечным числом разных способов.

Цитировать
правильно ли написано
Arctan2 правильно определяет квадрант, то есть умеет различать углы, отличающиеся на 180, и выводит ответ в диапазоне от 0 до 360 градусов.

Arctan вычисляет честный арктангенс и выдает ответ в диапазоне от -90 до 90, не различая углы, отличающиеся на 180.
Отчасти.

Главная разница в том, что ArcTan2 не боится деления на ноль. Он для того и сделан, чтобы можно было спокойно подставлять два числа, не разбираясь, есть там ноль или нет. Поскольку знаки обоих чисел известны по отдельности, он может определить и квадрант. Но в нашем случае оба числа положительны, поэтому квадрант всегда будет первым (от 0 до 90). Второй квадрант получится, если мы поменяем знак чисел (см. выше).

Цитировать
тоесть текст
if (k2>0) and (k1>0) then kut:=(180*ArcTan(k1/k2))/PI;
if (k2>0) and (k1<0) then kut:=(180*ArcTan(k1/k2))/PI+360;
if (k2<0) and (k1>0) then kut:=(180*ArcTan(k1/k2))/PI+180;
if (k2<0) and (k1<0) then kut:=(180*ArcTan(k1/k2))/PI+180;
if (k2=0) and (k1>0) then kut:=90;
if (k2=0) and (k1<0) then kut:=270;
if (k2=0) and (k1=0) then kut:=0;

заменяется одной командой  kut:=(180*ArcTan2(k1,k2))/PI;
Верно, и более того. Этот текст работал неправильно, а ArcTan2 будет работать правильно. При k2, близком к нулю, но НЕРАВНОМ нулю, деление k1/k2 могло привести к переполнению и к неверному вычислению ArcTan (хотя, казалось бы, никакого деления на ноль нету). ArcTan2 этим не болеет.

Сейчас болезнь есть не в программе, а в постановке задачи. Нельзя спрашивать про угол поляризации, если поляризация не линейна. При этом программа не может сделать расчет, синус выходит за диапазон -1...+1. Надо придумать другой способ задать вопрос - например, попросить раскрасить поляризацию разным цветом, в зависимости от угла. Например, вертикальная - синяя, горизонтальная - красная, если под углом - синий с красным смешиваем, фиолетовая, а если неполяризованный свет - то белая. К сожалению, в одну картинку все типы поляризации не влезут, но можно посмотреть сначала на линейные, а потом отдельно на круговые - переключить картинку.

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #94 : 07 Декабрь 2012, 12:00:04 »
для начала нужно вычислить есть ли поляризация или нет
если поляризация есть закрашивать пиксел в белый цвет
если поляризации нет закрашивать пиксел в черный цвет
как это определить?


могут ли в одном месте быть 2 разных луча света
например красный и синий. И у красного поляризация одна, а у синего другая?
Цитировать
Ее диапазон и так от 0 до 180 (или, что то же самое, от -90 до 90).

если брать формулу с арктангенсом то при всех возможных комбинациях диапазон выходит от 0 до 90
как переделать формулу или схему чтобы из 2 снимков получать диапазон 0 - 180
« Последнее редактирование: 07 Декабрь 2012, 12:10:54 от barbucha »

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #95 : 07 Декабрь 2012, 13:11:01 »
якобы формула показывающая степень поляризации
P = (I 0 * I 90 + 2 * I 45) / (I0 + I 90)
переделал в
P := (r * b + 2 * g) /( r + b);

максимальное возможное значение вышло 510 вместо 1
значит формула не правильная.

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #96 : 07 Декабрь 2012, 13:36:38 »
для начала нужно вычислить есть ли поляризация или нет
если поляризация есть закрашивать пиксел в белый цвет
если поляризации нет закрашивать пиксел в черный цвет
как это определить?
Не очень правильно стоит задача, но можно так.
Если со всех каналов идет примерно одинаковый сигнал, то поляризации нет или она слабая.
Если каналы резко отличаются, поляризация есть и она сильная.


могут ли в одном месте быть 2 разных луча света
например красный и синий. И у красного поляризация одна, а у синего другая?
Да, разумеется. Хуже того, может быть два, например, красных близкой длины волны, и у обоих поляризация разная. (лазер ЛГН-304 как раз такой луч дает)

Поэтому и не имеет особого смысла показывать именно угол - ведь может потребоваться показать и два, и три, и пятьдесят разных углов.

Цитировать
если брать формулу с арктангенсом то при всех возможных комбинациях диапазон выходит от 0 до 90
как переделать формулу или схему чтобы из 2 снимков получать диапазон 0 - 180
Формул ДВЕ. В одной знак "минус" перед делением.
Та, которая с минусом, всегда дает от 90 до 180. (Точнее, от -90 до 0, но это неважно).
В зависимости от показаний третьего канала надо выбрать формулу без минуса или формулу с минусом.

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #97 : 07 Декабрь 2012, 13:40:46 »
якобы формула показывающая степень поляризации
P = (I 0 * I 90 + 2 * I 45) / (I0 + I 90)
переделал в
P := (r * b + 2 * g) /( r + b);

максимальное возможное значение вышло 510 вместо 1
значит формула не правильная.
Ее неправильность очевидна сразу. Смотрите:

I - это интенсивность света. Например, милливатты на квадратный сантиметр или милливольты с фотоэлемента. Будем считать, что ее единица измерения - "попугай".

Итак, I0, I90 и I45 у нас измеряются в попугаях. Тогда произведение I0*I90 измеряется в квадратных попугаях. Знаменатель дроби I0+I90 измеряется в попугаях. А числитель? 2*I45 - в попугаях. Квадратные попугаи + попугаи = ? Явная ошибка.

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #98 : 07 Декабрь 2012, 18:55:32 »
Цитировать
sin(2*фи) = (2G/ ( R + B)) - 1.
 G использовать только для определения знака, плюс или минус (если фи от 0 до 90, то плюс, а если от 90 до 180, то минус).

тоесть смотреть знак который получится в   (2G/ ( R + B)) - 1

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #99 : 07 Декабрь 2012, 19:27:06 »
тоесть смотреть знак который получится в   (2G/ ( R + B)) - 1
Да. То есть, просто сравнить 2G и R+B. Если 2G>R+B, то разность больше нуля, иначе меньше.

И напоминаю про проблему, если поляризаций сразу несколько. Тогда ответ будет неверен. Например, для неполяризованного света всегда будет получаться угол 45 градусов.

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #100 : 08 Декабрь 2012, 11:18:05 »
если 2G>R+B то U =  ArcTan( R / B) 
если 2G<=R+B то U = 180 + ArcTan(R / B) 
так?

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #101 : 08 Декабрь 2012, 11:43:19 »
Не плюс, а минус, в остальном верно.

180 - ArcTan(R / B) 

Оффлайн barbucha

  • Старожил
  • ****
  • Сообщений: 295
  • Репутация: +2/-13
Re: Поляризационная видеокамера
« Ответ #102 : 08 Декабрь 2012, 16:55:14 »
можно ли сказать что если ваша формула выходит за пределы -1  +1 это значит нелинейную поляризацию.

Если у разных длин волн разная поляризация то какую поляризацию видят креветки, осьминоги , пчелы ?

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #103 : 08 Декабрь 2012, 18:35:27 »
можно ли сказать что если ваша формула выходит за пределы -1  +1 это значит нелинейную поляризацию.
По идее, нет; другая поляризация должна быть видна примерно как 45-градусная линейная.

Выход за диапазон -1...+1 скорее всего обусловлен просто погрешностью при округлении до целых чисел от 0 до 255. Например, R и B округлились вниз, а G округлилось вверх. И вместо числа, равного 0.99999, получилось 1.00001. Понятно, что это просто такая единица с погрешностью. Игнорируйте такой маленький выход за границы диапазона.

Большой выход за границы диапазона означает ошибку в установке поляризаторов (не под тем углом стоят) или неисправность камеры.

Если у разных длин волн разная поляризация то какую поляризацию видят креветки, осьминоги , пчелы ?
Сразу несколько. И иногда их путают. Точно так же, как человеческий глаз не различает длины волн в спектре, а очень грубо делит все цвета на "зеленый", "красно-желто-зеленый" и "сине-зеленый". Поэтому его можно обмануть, подсунув вместо белого цвета смесь красного, зеленого и синего. (Небольшой процент людей различает не три, а четыре основных цвета).

Наземные организмы обычно хорошо видят длины волн в районе 530 нм, то есть зеленый. Это как раз цвет хлорофилла, зеленой листвы, и зрение в нем очень полезно для выживания. Многие хорошо видят синий. Человек уникален тем, что он видит красный. Зато насекомые обычно видят ультрафиолет.

Те, кто видит поляризацию, скорее всего видят ее так, как мы видим цвет. То есть, вертикальная поляризация для них выглядит, допустим, как желтая, а горизонтальная - как фиолетовая. А если на двух разных длинах волн есть две разные поляризации, они видят это так же, как если бы поляризация была одна, но наклонная. То есть, такой глаз тоже можно обмануть.

Для фотографов выпускаются фильтры, окрашивающие разные поляризации в разные цвета. Думаю, креветка видит примерно так.

Оффлайн Gall

  • Ветеран
  • *****
  • Сообщений: 2739
  • Репутация: +173/-0
    • Sam's Laser FAQ на русском
Re: Поляризационная видеокамера
« Ответ #104 : 08 Декабрь 2012, 19:15:59 »
Вот, для сравнения, как видит человеческий глаз.

Видно, что "красный" и "зеленый" глаз различает довольно слабо - по ничтожному отличию чувствительности разных колбочек выше 630 нм. Именно поэтому большая разница в длине волны в красном свете почти не видна (что 630, что 650, что 680 - все едино), а вот желтый и голубой отличаются от соседей буквально на несколько нанометров.


Еще очень хорошо видна "рациональность" Природы - наибольшую чувствительность глаз имеет в области зеленых и синих оттенков, то есть именно тех, которые чаще всего встречаются в природе: листва, небо, водная гладь. У большинства животных примерно такие же кривые чувствительности, но их только две - нету "красной". Видимо, "красная" потребовалась обезьяне, чтобы отличать спелые фрукты от неспелых.

Зрение всех животных в той или иной мере несовершенно. Например, многие крупные кошки (тигр) для человеческого глаза рыжие. Но для многой их добычи этот цвет неотличим от зеленой травы.
« Последнее редактирование: 08 Декабрь 2012, 19:21:29 от Gall »

 



SimplePortal 2.3.3 © 2008-2010, SimplePortal