Перейти к содержанию
    

Точно описать и исправлять дисторсию китайского широкоугольного объектива

Добрый день,

 

хочется из говна и палок, ибо бюджет не позволяет.

 

Имеется ИК (850нм) широкоугольная (160 градусов) 2мегапиксельная видеокамера, подключенная к esp32. Разрешение на максимуме 1600х1200 и около 10 фреймов в секунду. Типичный пример искажения на этом железе - фотография миллиметровки - внизу, расстояние до миллиметровки при съеме было около 5см. От камеры к камере картинка слегка меняется.

 

Хочу научиться калибровать такие камеры, чтобы полностью удалить дисторсию. Видел модель, по этой ссылке, но еще не пробовал ее прикрутить.

 

Более того, я хотел бы запрограммировать эту калибровку внутри самого ESP32, и, по возможности отказаться от шахматной доски, а в качестве картинки для калибровки иметь плату с ИК светодиодами, расположенными в углах квадратной сетки, то есть всяко мне эту калибровку переписывать придется.

 

Вопрос.

 

Скажите, пожалуйста, а сможет ли эта модель, как по ссылке

\( r = \sqrt{x^2 + y^2} \)

\( x_d = x(1+k_1r^2+k_2r^4+k_3r^6) \)

\( y_d = y(1+k_1r^2+k_2r^4+k_3r^6) \)

 

\( x_d=x+[2p_1 x y+p_2(r^2+2x^2)] \)

\( y_d=y+[p_1(r^2+2y^2)+2p_2xy] \)

 

\( \begin{equation*} CameraMatrix = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \end{equation*} \)

 

точно описать этот мой кривой широкоугольник, или надо что-то более существенно сложное в модель вносить, а, возможно есть еще какие-то подводные камни, пожалуйста, тыкните меня в них носом!

 

Спасибо!

 

Distortion.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы уверены, что не дурите нас с картинкой? В смысле, что на расстоянии 5 см будет сильно влиять неплоскостность миллиметровки и непараллельность плоскости матрицы. По картинке кажется, что так и есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 minutes ago, Alex11 said:

А Вы уверены, что не дурите нас с картинкой? В смысле, что на расстоянии 5 см будет сильно влиять неплоскостность миллиметровки и непараллельность плоскости матрицы. По картинке кажется, что так и есть.

Не дурю.... Я сам снимал, и снимал для того, чтобы отградуироваться, но получил вот это... Если бы я нашел бы другой вариант ИК широкоугольной камеры с процессором по цене за все за 10-20 бакс без таких ужасных аберраций, я очевидно бы эту не использовал бы. Кстати, причины аберраций тоже понятны, там корпус камеры с линзой вворачивают на милипизерную пластиковую корпусину на гибком шлейфе, поэтому стоит камеру слегка потрогать, как все сразу съезжает. Я планировал заливать горячим клеем это соединение, чтобы по крайней мере аберрации не плыли со временем и все это закрывать сверху прозрачной корпусиной, которая тоже будет давать свою долю аберрации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, iiv сказал:

для калибровки иметь плату с ИК светодиодами, расположенными в углах квадратной сетки

Каким образом это должно работать? Ведь надо снять три точки, описывающие кривую — например, направить камеру на дисплей и определить её ракурс на нём, посредством развёртки горизонтальной и вертикальной линиями, затем собственно калибровка — проходом точки по половине диагонали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Plain said:

Каким образом это должно работать? Ведь надо снять три точки, описывающие кривую — например, направить камеру на дисплей и определить её ракурс на нём, посредством развёртки горизонтальной и вертикальной линиями, затем собственно калибровка — проходом точки по половине диагонали.

Спасибо за комментарий! Не, я же много точек планировал снять, пусть у меня из ИК светодиодов будет квадрат 10х10, то есть 100 светодиодов, или еще больший квадрат. И я его даже буду двигать немного влево-вправо и наклонять, то есть по всем 6 степеням свободы. Там данных будет достаточно. Я конечно могу задать дисторсию поточечно - то есть искать решение для каждого пикселя, но я не смогу это сделать на esp32, так как для этого надо решать систему уравнений с 2 миллионами неизвестных и много раз, я просто по памяти не влезу в eps32. Даже в его fsram. Можно сплайнами аппроксимировать, но все равно много памяти потребуется, но будет уже довольно заумно, и где-то может возникнуть численная неустойчивость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К чему такие сложности? Ну можно снять кривизну по всем четырём радиусам, а не по одному, и затем теми же сплайнами получать кривизну при любом угле. И всё ещё не понятно, зачем лепить какие-то светодиоды и вручную, чем не устраивает калибровка примитивной программой на любом дисплее и автоматически.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, Plain said:

чем не устраивает калибровка примитивной программой на любом дисплее и автоматически.

Спасибо за комментарии!

 

Во-первых, мне надо калибровать камеру, после ее установки в аппарат, где она будет находиться только под защитным стеклом, которое не пропускает обычный свет, и пропускает только ИК.

Во-вторых - у меня нет с камеры канала, по которому я смогу сбросить картинку на внешний компьютер, из esp32 торчит только ком-порт, на другой более слабый МК, и там протащить картинку просто технически очень не просто.

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

В-четвертых, после установки камеры в аппаратуру у меня нет возможности точно отюстировать направление ее оптической оси относительно нормали картинки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, iiv said:

Во-первых, мне надо калибровать камеру, после ее установки в аппарат, где она будет находиться только под защитным стеклом, которое не пропускает обычный свет, и пропускает только ИК.

Так подсвечивайте Вашу мишень (милимитровка или что там у вас) ИК-светом (светодиоды на этот диапазон стоят как спички). Это проще, чем делать опорную геометрию из светодиодов.

дисторсия бл... Искажения!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, alexunder said:

 

дисторсия бл... Искажения!

"Дисторсия" это абсолютно законный термин в оптике


Л.Л. Сикорук "Телескопы для любителей астрономии" 1982 г

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, iiv сказал:

под защитным стеклом, которое не пропускает обычный свет, и пропускает только ИК

Тогда один светодиод и стенд с линейным энкодером, чтобы можно было как раз руками двигать. От процессора ничего выдающегося не требуется, просто следить за точкой и получать её координаты снаружи.

 

26 минут назад, iiv сказал:

нет возможности точно отюстировать направление ее оптической оси относительно нормали картинки

Это зачем? Качество калибровки зависит лишь от того, насколько физическая ось перпендикулярна калибровочной плоскости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, Джеймс said:

Не встречал. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Plain said:

Тогда один светодиод и стенд с линейным энкодером, чтобы можно было как раз руками двигать. От процессора ничего выдающегося не требуется, просто следить за точкой и получать её координаты снаружи.

Спасибо, plain, что отвечаете. Так вопрос-то у меня не в механике был, а в модели дисторсии. Я ее планирую на esp32 считать. А как я буду получать координаты точки, или панно точек, это действительно не сложно. ИМХО, развести плату с набором светодиодов будет наиболее быстрый способ, хотя, не спорю, можно сделать механикой, как вы предлагаете, но, ИМХО, это дольше по времени разработки.

 

Но вопрос в этой теме как раз о модели дисторсии. Всяко мне модель дисторсии нужна, и ее коэффициенты я буду считать на esp32. У меня есть большое подозрение, что простая модель, как я привел выше, и которая применяется в OpenCV, может быть использована только для объективов с не большой дисторсией, а не такой, как у меня - и в центре, и по краям свои коэффициенты. Я конечно понимаю, что наверное, можно первые два уравнения

xd=x(1+k1r2+k2r4+k3r6)

yd=y(1+k1r2+k2r4+k3r6)

 

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

3 hours ago, Джеймс said:

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

 

4 hours ago, alexunder said:

Так подсвечивайте Вашу мишень (милимитровка или что там у вас) ИК-светом (светодиоды на этот диапазон стоят как спички). Это проще, чем делать опорную геометрию из светодиодов.

Спасибо! Так я так пока и делаю, по крайней мере картинка в этом топике именно так и была получена.

2 plain, я, кажется, понял о чем Вы имели ввиду. Согласен, что я могу получить координаты или одного двигающегося светодиода, или панно со светодиодами, и передать это все по компорту наверх на какой-то обычный компьютер. Но даже если я так сделаю, я не смогу воспользоваться сразу моделью с OpenCV, так как она ожидает получения видео от специальной картинки, чтобы посчитать коэффициенты дисторсии, то есть и модель и алгоритм получения коэффициентов этой модели мне всяко надо самому выбрать и запрограммировать. А, так как в аппаратуре у меня много (10-20 таких камер), и внешний компьютер не предусмотрен, я, все-таки планирую эту модель таки считать на eps32, вернее на каждой esp32 свои коэффициенты, благо у меня этих контроллеров столько же, сколько и камер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

42 minutes ago, iiv said:

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

@iiv
Ого! Respect! А фотографии прибора  не сохранилось? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, Джеймс said:

Ого! Respect! А фотографии прибора  не сохранилось? 

Спасибо! Не, под рукой нет, хотя в альбомах у родителей должны быть фотки. Но зеркало еще у родителей живо и здорово, а станина не пережила - я тогда в механике совсем не разбирался, и как раз механика была на соплях, и на паралактику я не замахивался, и это было реально мучением - гидировать по часу по обеим осям. А зимой по два часа выжидать надо было, так как стекло клеенное было, 4 слоя по 7мм, и пока оно равномерно не замерзнет, ничего не было видно. Зеркало все собираюсь привести себе, но не знаю когда это произойдет, да и не тривиально это сейчас. А сколько я на это зеркало эпоксидки извел...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

вот тут помимо радиальных, в тангенциальных искажениях опять полином от радиуса добавлен, то есть не только "поворот", а ещё и типа твист.

но то что на картинке из-за своей несимметричности похоже надо лечить каким-то произвольным полиномом от x,y, а не радиально симетричным по r с чётными степенями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...