Учитывая размер известного объекта на изображении, как мы можем вычислить размер других объектов на том же изображении?

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

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

В идеале я планирую построить что-то вроде этого: https://www.youtube.com/watch?v=jmoPCN2NM78

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

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

Делается ли больше одной фотографии (с разных позиций, чтобы можно было сделать фотограмметрию)? Вы получаете информацию о диапазоне? Используете ли вы структурированное 3D освещение ? Вам нужно будет сказать немного больше о том, какие именно данные вы берете, потому что вам нужно каким-то образом вывести информацию о диапазоне, чтобы заставить эту идею работать.
Хорошо. Итак, у меня будет только одно фото, не более одного. Данных как таковых у меня, наверное, нет, так как дело обстоит так же, как с фотографией с мобильного телефона например. И я не использую структурированное 3D-освещение. Меня беспокоят только два измерения (высота и ширина). У меня также нет сферических объектов. Я думаю, ссылка, которую я предоставил, может помочь вам лучше понять постановку задачи.
Вам нужно обратное тому, что делают художники, если они хотят правильных пропорций eprints.fortlewis.edu/27/1/…

Ответы (1)

Такого рода проблемы очень распространены в компьютерной графике. То, что я объясню, работает только в том случае, если расстояние, которое вы хотите измерить, и ваш эталонный объект находятся в одной плоскости (например, лист бумаги на столе, который вы хотите измерить).
Если бы вы знали, как эта плоскость лежит на изображении, то есть как точки плоскости отображаются в точки на изображении, то это было бы легко. К счастью, у этой задачи уже есть хороший ответ здесь ! Давайте применим это к измерению расстояния между двумя точками на изображении. Возьмите этот скриншот из вашего видео в качестве примера:

Таблица

Углы листа бумаги п 1 "=" ( 496 , 255 ) , п 2 "=" ( 607 , 224 ) , п 3 "=" ( 508 , 171 ) , и п 4 "=" ( 405 , 194 ) и углы стола д 1 "=" ( 7 , 244 ) , д 2 "=" ( 654 , 389 ) , д 3 "=" ( 860 , 47 ) , и д 4 "=" ( 511 , 23 ) (все в пикселях). Углы бумаги DIN A3 е 1 "=" ( 0 , 0 ) , е 2 "=" ( 0,3 , 0 ) , е 3 "=" ( 0,3 , 0,42 ) , и е 4 "=" ( 0 , 0,42 ) (все в м).
Теперь построим матрицы преобразования по эталону . Для нас «целевое изображение» — это лист бумаги, а «исходное изображение» — заданный стол. Матрицы преобразования:

А "=" ( 400.027 530.049 377,977 134.686 172.899 212.787 0,806505 0,873228 0,933278 ) ,
Б "=" ( 0. 0,3 0. 0. 0. 0,42 1. 1. 1. ) ,
и  С "=" Б А 1 "=" ( 0,00218481 0,00325931 1,62797 0,00145442 0,00520777 0,148304 0,0000581739 0,00284785 1.74436 ) .
Матрица C преобразуется из координат пикселя в координаты «листа бумаги». Обратите внимание на то, что мы используем однородные координаты . Чтобы преобразовать углы стола в координаты листа, мы сначала применяем С : С ( д 1 , 1 ) "=" ( 1.03252 , 0,768499 , 1.23704 ) , С ( д 2 , 1 ) "=" ( 0,0915473 , 0,927641 , 1.61234 ) , С ( д 3 , 1 ) "=" ( 1.47321 , 0,553807 , 0,62639 ) , и С ( д 4 , 1 ) "=" ( 0,788933 , 1.18639 , 0,578344 ) . Затем выполните дегомогенизацию, чтобы получить д 1 "=" ( 0,834672 , 0,621241 ) , д 2 "=" ( 0,0567792 , 0,575339 ) , д 3 "=" ( 2.35191 , 0,884125 ) , и д 4 "=" ( 1.36412 , 2.05135 ) . Отсюда мы можем непосредственно вычислить расстояния (в м) и найти г ( д 1 , д 2 ) "=" 1,43 (должно быть 1,53 ), г ( д 2 , д 3 ) "=" 2,82 (должно быть 2,73 ), г ( д 3 , д 4 ) "=" 1,53 (должно быть 1,53 ), и г ( д 4 , д 1 ) "=" 2,62 (должно быть 2,73 ). Эти значения не идеальны. Возможные причины в том, что я недостаточно точно выбрал точки на изображении. Но, как было указано в видео, очень важно выбрать опорные точки как можно точнее. Игра с этими значениями показывает, что они оказывают огромное влияние на конечный результат. Этот метод также не учитывает дисторсию объектива.