Перейти к содержимому
Compvision.ru
kilop

работа с искажениями

Recommended Posts

Имеется систем зеркал, отражаясь от которой инфракрасный луч падает на границу объекта.В результате, объект полчуеться немного искаженным. Какие есть методики для работы с такими искажениями?

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


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

Не совсем понятна постановка задачи, идет-ли речь о неровности поверхности зеркал, или имеется ввиду преобразования аффинные/гомографии?

Что имеется ввиду под "искажением"?

PS: Неплохо бы поясняющую схемку/картинку привести.

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


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

http://s019.radikal.ru/i630/1208/9e/972e4a7170ac.jpg

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

http://s42.radikal.ru/i097/1208/3b/792038762e47.jpg

Прямой пластиной калибруем область (вместе с точным электронным микрометром) получаем зависимость пиксельной координаты и "реальной" по горизонтали(в мкм).

Потом калибруем по вертикали, по вертикали тоже получаем зависимость.

То есть имеем зависимости координат по измеряемой области.

При анализе такой пластины(то есть в любой точку пространства ставим, и сверяем координаты показываемую микрометром и расчитанную, при помощи микрометра) получаем разницу ~6-12 микрон.

Теперь пытаемся проанализировать "бабку", то есть круглую деталь радиусом 1,5 мм.

Получаем такое изображение:

http://s018.radikal.ru/i513/1208/5e/01b4978076ad.jpg

Теперь если применить наши калибровочные матрицы(например, для левой полуокружности) получим следующий результат

http://s018.radikal.ru/i504/1208/30/4213ad8d64eb.jpg

То есть окружность преобразовалась в эллипс, как сделать чтобы окружность преобразовалось в окружность и за счет чего это происходит?

Я думал за счет коррекции по калибровочным файлам убираем дисторсию, и для прямой пластины дисторсия не так сильно проявляется. Может дело в отражении зеркал, действуют аналогично проекции? И как это подавить?

Либо эти точку описать эллипсом и найти функцию преобразующего эллипс в окружность известного радиуса.

Жду советов и предложений, если что, опишу подробнее:)

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


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

немного неправильно нарисовал)) там линии от лазеров должны пересекаться после отражения от зеркал)

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


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

Берем трубу, режем ножиком наискосок :) и получаем Ваш эллипс.

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

Вот рисунка :)

post-1-0-73481800-1346407225_thumb.jpg

Преобразование линейное (коэффициент будет равен тангенсу угла), соответственно масштабируете обратно вдоль масштабированной оси и получите неискаженный рисунок.

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
масштабируете обратно вдоль масштабированной оси и получите неискаженный рисунок.

Не понял, можете пояснить насчет неискаженного рисунка и что делать)

я преобразовал пиксельные координаты в миллиметровые, следующий шаг?

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


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

Насколько я могу видеть по изображению торца цилиндра(не графику из экселя), он "сплющен" по горизонтали.

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

Поделите длину искаженной на длину неискаженной, получите коэффициент.

Так вот на этот коэффициент и нужно масштабировать ваши картинки вдоль оси "сплющивания" .

Если неизвестно какая ось "настоящая", то верно все что выше (взять любую из осей в качестве "неискаженной"), только в конце надо пересчитать общий масштаб картинки.

Кусочек из Multiple View Geometry (восстановление эллипса по 5 точкам):

post-1-0-21555400-1346409824_thumb.jpg

  • Like 1

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


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

а если произвольную кривую рассматривать, придется смотреть строить проекцию или какой-то другой способ есть?

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


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

Можно калибровочную сетку построить.

Сканируем по поверхности зеркала смотрим куда попадает, записываем соответствия.

После этого cv::remap.

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


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

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

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


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

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

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


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

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

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


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

Представьте сетку точек (растр), точнее множество лучей идущих параллельно друг другу и отражающихся от вашего зеркала.

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

пройдя за этот экран все лучи отражаются от зеркала, и идут в сторону, ко второму экрану, на котором формируется искаженное изображение (расстояние между точками изменится решетка станет, в общем случае ромбическая (если нет нелинейных искажений)).

Каждый луч оставляет точку как на одном, так и на втором экране.

Найдете соответствие для каждого луча (точки растра) - сможете выправить искажение.

ЗЫ: Если прямая переходит в прямую, это не значит что нет искажений, это значит что они однородные (гомогеные).

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

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


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

Вы куда-то не в ту тему.

У автора график не в масштабе нарисован. По вертикали и по горизонтали не совпадает.

Во-вторых никакого круга на рисунке нету. А в лучшем случае 1/4 от круга. Насколько понимаю автору точно не известно на сколько она что там выступает поэтому применить калибровку так не получится. Нужно что-бы цилиндр целиком попадал в поле датчика, а не часть.

Хотя колли бровку вы уже сделали, когда микрометром двигали.

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


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

График возникает при переводе в пиксельные координаты. Масштаб такой получается, так как по горизонтали и по вертикали разная величина шага.

Круг виден практически полностью. Слева и справа части одного и того же круга, такое изображение получается за счет зеркал.

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


Ссылка на сообщение
Поделиться на других сайтах
График возникает при переводе в пиксельные координаты. Масштаб такой получается, так как по горизонтали и по вертикали разная величина шага.

Вот возьми и нарисуй так что бы были одинаковые. Делов то.

Круг виден практически полностью.

По закону физики ты больше 1/2 круга видеть не можешь. У другой половины лучи вниз отражаются, а там зеркал и датчика нет.

Но все равно там у тебя 1/4. Легко увидеть если провести касательную к концу дуги. То там порядка 45 градусов. А что бы исказить до 0 градусов. Так это зеркало у тебя должно быть не прямое, а кривое и расстояния удачно совпасть с фокусным расстоянием.

  • Like 1

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


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

Зеркала если они плоские то дают линейные искажения.

x_m=с1*x;

y_m=c2*y;

Т.е круг будет превращаться в элипс.

Если перед датчиком стоит линза, то у вас будут бочкообразные или подушко образные искажения. Круг так и останится кругом. А вот прямые станут выгнутыми.

Но и это не всё. Дело в том что ваша заготовка может перемещаться в 3-х направлениях. Это тоже надо учесть.

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


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

kilop, что то ты со схемой установки никак не разберёшься.

Сделал по исходному чертежу модель в блендере. Взял цилиндр для наглядности добавил фаску.

image.png

А вот что видит камера.

untitled.png

  • Like 1

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


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

ммм, интересно. А что это за программа? В которой модели построили. Надо тоже посмотреть. Я не понял, по ней получается, что в квадрат переходит? Что-то нето)А где в вашей системе лазеры, что-то не пойму. Мне в принципе главное узнать, насколько центр окружности сдвигается для дальнейших вычислений.

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

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


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

Программа Blender можно было и в 3D Max и майа. Просто взял то, что знаю.

Функцию создания “Фаски” в некоторых билдах(версиях) ломали.

что в квадрат переходит? Что-то нето)А где в вашей системе лазеры, что-то не пойму.

По центру цилиндр. Сверху расположил чёрный квадрат(заслон), чтобы лишнее не отсвечивало в камеру. Поэтому на снимке выше посерёдке квадрат.

Он же отражается в зеркале и сливается с цилиндром.

Само зеркало идеальное, поэтому краев не видно. Можно и дорисовать.

Лазер расположен слева, обозначен солнышком и парой лучей. Свет от него расходится, чтобы попасть на края цилиндра. Можно и узко направленный.

В материале цилиндра выставлена функция моделирование бликов.

Основной трюк в этой модели это Фаска+Блик.

image.jpg

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


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

Pavia00, если не сложно, пришлите, пожалуйста, сохраненный пакет. Я посмотрю как вы накидали, а то интерфейс пока пугает))) Вы,кстати, немного неправильно расположили.

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


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

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×