我有一張使用標準相機拍攝的圖像,如下面的設置所示。我很幸運地假設我知道焦距(以毫米爲單位),作物因素和傳感器尺寸,並且可以假設投影的中心是圖像的中心 - 所以我知道它的像素位置以及傳感器。給定焦距和相機位置/旋轉的正確透視圖像
我也知道相對於藍色平面及其在該平面上方的高度的相機角度。攝像機僅在其x軸上旋轉,我們假定它與世界x軸平行。
現在我需要獲得圖像的度量整治,這樣我可以衡量毫米藍色平面上的物體(二維)。
我一直在嘗試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