У меня есть изображение, снятое с помощью стандартной камеры, как показано в приведенной ниже настройке. Мне посчастливилось предположить, что я знаю фокусное расстояние (в миллиметрах), коэффициент урожая и размер датчика, и можно предположить, что центр проекции является центром изображения - поэтому я знаю его положение в пикселях и в терминах датчик.Правильное изображение перспективы, заданное фокусное расстояние и положение/вращение камеры
Я также знаю угол камеры относительно голубой плоскости и ее высоты над этой плоскостью. Камера вращается только по оси x, которую мы считаем параллельной мировой оси x.
Теперь мне нужно, чтобы получить метрику выпрямление изображения таким образом, что я могу измерить объект на голубой плоскости в миллиметрах (в 2D).
Я пробовал разные вещи в Matlab, чтобы заставить это работать, но мои результаты до сих пор были разочаровывающими. Ясно, что это проблема горизонтальной плоскости, и я думаю, что масштаб должен быть разрешимым, исходя из того, что я знаю размер датчика и количество пикселей в нем.
Мой поиск привел меня к этому подобный вопрос, но методология в ответах не работает для меня (пояснено ниже): How to do perspective correction in Matlab from known Intrinsic and Extrinsic parameters?
Я попытался вычисления внутренние и внешние матрицы, то получение гомография:
f = 4.9; % Focal length is given as 4.9mm
sensor_size = [6.17 4.55]; % Again in mm
cc = sensor_size ./ 2;
% Calculate intrinsic matrix
KK = [f 0 cc(1);0 f cc(2); 0 0 1];
theta = 21.8; % Angle of camera above plane, degrees
Rc = xrotate(theta) % xrotate fcn given below
Tc = [0 0 60]'; % Camera is 60mm above plane along camera z-axis
H = KK * [R(:,1) R(:,2) Tc];
figure;imshow(imtransform(I,maketform('projective',H), 'Size', image_size))
function R = xrotate(theta)
R = [ 1 0 0;
0 cosd(theta) sind(theta);
0 -sind(theta) cosd(theta) ];
end
К сожалению, это дает мне барахло - учитывая полноразмерный оригинал этого изображения:
я получаю этот результат из приведенной выше коды:
Учитывая его лишь вращение по оси X. Я думаю, что мы должны получить форму трапеции, как результат омографии, но я не кажется. Может ли кто-нибудь указать на очевидные ошибки, которые я здесь сделал?
Спасибо, я был обеспокоен тем, что может быть так. К сожалению, их замена для значений пикселей (масштаб, рассчитанный с использованием размера датчика и размера изображения), по-видимому, не значительно улучшает результат. – n00dle