Изменение положения изображения в зависимости от высоты камеры

#algorithm #image #math #image-processing #camera

Вопрос:

У меня небольшая проблема, может быть, кто-нибудь здесь сможет мне помочь.

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

Определение размера прямоугольника не составляет проблемы, так как известен размер манекена, расстояние до камеры и фокусное расстояние. ( pixelsize = (size*focallength)/distance )

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

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

Поэтому мой вопрос в том, есть ли способ или формула для определения смещения положения манекена на снимке в зависимости от высоты камеры. Я уже искал решения, но не нашел ничего конкретного. Заранее благодарю вас!

Комментарии:

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

2. @SneakyPolarBear Гомография вызвана не искажением, а эффектом нормальной перспективы.

3. Если ваша камера остается в вертикальном положении, видимый размер не меняется. Поэтому, предположительно, вы наклоняете его, и прямоугольник превращается в трапецию. Вы должны прибегнуть к уравнениям перспективной проекции.

4. Все эффекты перспективы должны быть линейными, искажение объектива-единственное, что может вызвать нелинейные проблемы

5. @Okayyo как сказал Ив, вам придется наклонить камеру и подвести ее намного ближе к манекену, посмотрите рисунок в моем ответе ниже .

Ответ №1:

диаграмма

как вы видите на изображении выше:

  1. когда вы поднимаете камеру выше, вам нужно наклонить ее под углом (фиолетовый угол) и приблизиться, чтобы манекен поместился внутри прямоугольника (красный прямоугольник).
  2. в этом случае, когда вы используете свою формулу ( pixelsize = (size*focallength)/distance ) , вы получите длину оранжевой линии, которая даст меньшее значение, которое является правильным, вам нужна длина зеленой линии
  3. вы можете получить длину зеленой линии по длине оранжевой линии и фиолетовому углу
  4. чтобы получить фиолетовый угол, вы можете использовать акселерометр, если используете мобильный телефон, или получить его вручную, так как вы наклоняете камеру, чтобы поместить манекен внутри красного прямоугольника.
  5. итак, формула такова orang line length / sin(purple angle) = green line length

Или Green = Orange / sin(Purple)

Комментарии:

1. Извините за мой поздний ответ, но большое спасибо 🙂