Как бы вы нашли высоту объектов с учетом изображения? - PullRequest
20 голосов
/ 18 мая 2010

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

Допустим, у вас есть изображение нескольких деревьев в формате, скажем, jpg. Как бы вы нашли высоты каждого из этих деревьев? Фотография - единственный вход, который у вас есть.

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

Небольшая коррекция: Высота не должна быть фактической высотой дерева. Высота может быть взята в любом масштабе. Но должен соответствовать всем объектам на картинке.

Ответы [ 6 ]

8 голосов
/ 18 мая 2010

Да, это возможно. То, что вы описываете, имеет целую индустрию, которая называется Фотограмметрия

4 голосов
/ 13 апреля 2017

С помощью фотограмметрии легко определить размер объекта по изображениям. Фотограмметрия - это наука об измерениях по фотографиям. Для этого нам нужно знать две вещи,

  • расстояние между камерой и плоскостью изображения (расстояние от камеры до объекта).
  • Фокусное расстояние (в мм и пикселях на мм) или физический размер датчика изображения.

Ниже приведены шаги:

Калибровка камеры

Используйте openCV для калибровки камеры. Вы можете использовать инструмент OpenCV calibrate.py и PNG-шаблон шахматной доски, предоставленные в исходном коде, для генерации калибровочной матрицы. Калибровка камеры выполняется для определения параметров камеры. Я сделал около дюжины фотографий шахматной доски с разных ракурсов, как мог с помощью своей веб-камеры (для калибровки своей веб-камеры). Для более подробной информации проверьте калибровка камеры openCV .

Мы получим f_x, f_y, c_x, c_y из калибровочной матрицы.

Проверяя детали сделанных снимков, вы найдете исходное разрешение фотографий (heightXwidth) и в их EXIF ​​заголовках вы можете найти значение фокусного расстояния (f). Эти элементы могут различаться в зависимости от вашей камеры.

Пикселей на миллиметр

Нам нужно знать количество пикселей на миллиметр (px / mm) на датчике изображения.

f_x = е * m_x

f_y = е * M_Y

Поскольку у нас есть две переменные для каждой формулы, которые мы можем найти для m_x и m_y. Я просто усреднил f_x и f_y, чтобы получить f_xy.

м = f_xy / focal_length_of_camera

Вставьте изображение

Вставьте свое изображение, из которого вам нужно найти фактический размер изображения. Вы должны знать расстояние между объектом и камерой. Найти размер изображения (height1Xwidth1)

Найти размер объекта в пикселях

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

Конвертировать px / mm в нижнем разрешении

pxpermm_in_lower_resolution = (ширина1 * м) / ширина

Размер объекта в датчике изображения

size_of_object_in_image_sensor = object_size_in_pixels / (pxpermm_in_lower_resolution)

Фактический размер объекта

Фактический размер объекта можно найти с помощью приведенных выше данных, как,

real_size = (dist * size_of_object_in_image_sensor) / focal_length

4 голосов
/ 19 мая 2010

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

1 голос
/ 18 мая 2010

Предполагая, что они все на одинаковом расстоянии, все в масштабе, вы захотите найти одну единицу измерения, которую вы можете гарантировать. Например, если на фотографии снова человек того же масштаба, и вы знаете, что он ровно 6 футов, вы используете это в качестве меры. Затем вы берете это и подсчитываете, сколько уложено в дерево. Например, если вам нужно 3,5 этого человека, то:

3.5 * 6 = 21

дает вам дерево 21 фут высотой.

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

0 голосов
/ 11 ноября 2014

Если ваше изображение 3 * 3 и вы хотите узнать размер изображения (т.е. 3x3..so 3x3 = 9), теперь у нас есть 8 пикселей, начиная с 0 до 8. Итак, 9/8 = (___) кб.

Если вы хотите найти размер изображения в МБ, как в примере выше, просто сделайте это (9/8) / (1024) = (----) МБ ..

Таким образом, вы получите результат в Мб.

0 голосов
/ 18 мая 2010

Я бы полагался на объект известных размеров, присутствующий на картинке. Например, мужчина.

Или, возможно, мы могли бы использовать данные EXIF ​​для обратного инжиниринга размера объекта на основе размеров датчика камеры, объектива и используемого фокусного расстояния. Это снова зависит от угла. Мы должны получать наиболее точные результаты, когда камеру держат перпендикулярно объекту.

...