Проекция коррекции объектива - PullRequest
4 голосов
/ 13 февраля 2009

Какой самый простой способ деформировать фотографию, сделанную с помощью «рыбьего глаза» или широкоугольного объектива? Я смотрю формулу проекции пикселей, которая имеет несколько параметров. Параметры камеры и объектива не будут известны, поэтому пользователь должен изменить параметры визуально. Спасибо

Ответы [ 4 ]

4 голосов
/ 13 февраля 2009

Здесь есть хорошая бумага , в которой представлены некоторые прилично выглядящие математические модели искажения объектива. Это по крайней мере. Я думаю, что SDX2000 был на правильном пути с сеткой. Я думаю, что наиболее распространенный способ решения этой проблемы - сопоставить изображение с сеткой, а затем разрешить применение параметров деформации для получения подушкообразных и бочкообразных искажений. См., Например, фильтры искажения объектива в Lightroom или Photoshop.

1 голос
/ 29 июля 2014

Отличная дискуссия от ImageMagick . Они дают уравнение, которое они используют.

Обратите внимание, что это не исправляет искажения так же, как в Photoshop CS6 (т.е. вы не можете брать коэффициенты из профилей объективов Adobe и просто вставлять их).

Бумага , на которую Камиль указывает , выглядит превосходно в деталях.

0 голосов
/ 13 февраля 2009

Если это возможно, попросите пользователя сделать фотографию эталонного изображения (например, шахматной доски), используя ту же камеру, а затем использовать эту информацию для анализа характеристик объектива. Затем эту информацию можно использовать для деформации других фотографий, сделанных той же камерой.

Для реализации вы можете использовать нейронные сети / генетические алгоритмы.

0 голосов
/ 13 февраля 2009

Я бы предположил, что вы можете использовать уравнение объектива, чтобы сделать это.

1 / f = 1 / object_distance + 1 / image_distance

Где f - фокусное расстояние (пользовательский ввод). Соотношение расстояния изображения и расстояния до объекта может быть использовано для соответствующего изменения размера изображения с использованием уравнения увеличения. Чтобы получить то, что вы действительно хотите, вам нужно изменить структуру уравнения:

1 / object_distance = 1 / f - 1 / image_distance

А затем используйте уравнение увеличения, чтобы изменить высоту объекта:

-image_distance / object_distance = image_height / object_height

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

...