Параметры камеры Webot по умолчанию, такие как размер пикселя и фокус

Я использую две камеры без объектива или каких-либо других настроек в webot для измерения положения объекта. Чтобы применить локализацию, мне нужно знать фокусное расстояние, которое представляет собой расстояние от центра камеры до центра плоскости изображения, а именно f. Я вижу параметр фокуса в узле камеры, но когда я устанавливаю его NULL по умолчанию, изображение остается нормальным. Таким образом, я считаю, что этот параметр не имеет никакого отношения к f. Кроме того, мне нужно знать ширину и высоту пикселя в изображении, а именно dx и dy соответственно. Но я понятия не имею, как получить эту информацию. введите здесь описание изображения

Это модель калибровки, которую я использовал, где c означает камеру, а w означает мировую координату. Мне нужно вычислить xw,yw,zw из u,v. Для идеальной камеры гама равна 0, u0, v0 — это только половина разрешения. Так что мои проблемы существуют в fx и fy.


person Barry Liang    schedule 02.05.2020    source источник


Ответы (1)


Первое, что нужно знать, это то, что в Webots пиксели квадратные, поэтому dx и dy эквивалентны.

Затем в узле Camera вы найдете 'fieldOfView', который даст вам горизонтальное поле зрения, используя разрешение камеры, вы также можете вычислить вертикальное поле зрения:

 2 * atan(tan(fieldOfView * 0.5) / (resolutionX / resolutionY))

Наконец, вы также можете получить ближнюю проекционную плоскость из поля «ближняя» нода «Камера».

Также обратите внимание, что камеры Webots являются обычными камерами OpenGL, поэтому вы можете найти дополнительную информацию о матрице проекции OpenGL, например, здесь: http://www.songho.ca/opengl/gl_projectionmatrix.html

person David Mansolino    schedule 04.05.2020
comment
Спасибо, Дэвид. Я заметил, что поле зрения. Когда я делаю измерения, я просто использую внутреннюю и внешнюю матрицу камеры. Я прочитал ссылку на openGL, которой вы поделились, и нашел ее почти такой же с идеальной камерой. Отсечение только определяет диапазон света, попадающего в камеру, но не влияет на параметры камеры. Следовательно, для идеальной внутренней матрицы камеры мне нужно знать значение fx=fy=f/dx=f/dy в нашем случае. У нас есть 2 * f * tan(fieldOfView * 0,5) / (разрешениеX)=dx, тогда у нас есть fx=разрешение X/2/tan(fieldOfView * 0,5). Как вы думаете, это правильно? - person Barry Liang; 05.05.2020
comment
На самом деле, используя это, я все еще получаю неправильное 3D-положение. Я несколько раз проверял, что вращение и перемещение системы камер корректно трансформируются во внешнюю матрицу. Поэтому я думаю, что проблема все еще существует во внутренней матрице, возможно, в fx и fy. Но я не уверен. Могу ли я применить идеальную внутреннюю и внешнюю матрицу для случая openGL? - person Barry Liang; 05.05.2020
comment
Да, использование идеальной внутренней и внешней внешности действительно правильно. - person David Mansolino; 05.05.2020
comment
Большое спасибо! Я решил это только сейчас. Проблема существует в части вращения. Я был слишком глуп, чтобы проверить это раньше. - person Barry Liang; 05.05.2020