我正在嘗試使用單個圖像對網球場進行相機校準和3D估計。首先作爲預處理,我做canny邊緣檢測,然後應用hoare變換來獲取線條。從這我清理圖像,以獲得法院的邊緣。 。從這我試圖估計法院的3D姿勢(可能是在照相機校準之後)。 opencv中的相機校準方法似乎適用於現有的模式。據我所知,法庭維度是否有任何方法從單個圖像獲取3D參數?或者我們可以更容易地從平行線計算相應的矩陣嗎?使用opencv對網球場進行3D估計
2
A
回答
1
下面是它的企圖......
步驟1:我點擊了攝像機圖像在你基本上已經找到了「已知的」世界點。我在MATLAB中運行了ginput
並單擊了14點交點,這些交點應該可以從你的霍夫線上推導出來。下面是這些點,以像素爲單位(可以繪製他們凌駕原始圖像的,看看他們在哪裏):
x = [
161 118
193 119
382 116
412 116
181 149
288 147
393 146
134 268
287 266
440 266
36 358
98 358
473 352
535 353
]';
第2步:我計算出相應的世界分,治療法院的左上角作爲原點(0,0,0)並向下和向右遞增。由於法院是飛機,每個點的Z座標等於0。下面是這些點,在腳的單位:
y = [
0 0 0
4.5 0 0
31.5 0 0
36 0 0
4.5 18 0
18 18 0
31.5 18 0
4.5 60 0
18 60 0
31.5 60 0
0 78 0
4.5 78 0
31.5 78 0
36 78 0
]';
第3步:我們現在有一堆攝像點和世界點之間的對應關係。我使用相機校準工具箱來導出相機的外部和內部參數。請注意,由於我們的通信數量非常少,因此我忽略了失真參數和縱橫比的計算(無論如何它應該非常接近1.0)。此處生成的圖像顯示映射到圖像的原始世界點,只有校準信息給出了。我們可以看到校準是有效的,因爲所有的世界點都非常接近它們在圖像中的正確位置。
下面是最終代碼:
clc;
clear all;
img = imread('HSY1A.jpg');
nx = size(img,2);
ny = size(img,1);
% imshow(img,[]);
x = [
161 118
193 119
382 116
412 116
181 149
288 147
393 146
134 268
287 266
440 266
36 358
98 358
473 352
535 353
]';
y = [
0 0 0
4.5 0 0
31.5 0 0
36 0 0
4.5 18 0
18 18 0
31.5 18 0
4.5 60 0
18 60 0
31.5 60 0
0 78 0
4.5 78 0
31.5 78 0
36 78 0
]';
num_pts = size(y,2);
% Required by camera calibration toolbox
x_1 = x;
X_1 = y;
% Setting up calibration parameters
n_ima = 1;
est_aspect_ratio = 0;
est_dist = zeros(5,1);
% check_cond = 0;
% Run calibration
go_calib_optim;
%% Estimate original points
est_x_1 = KK * [Rc_1 Tc_1] * [X_1; ones(1, size(X_1,2))];
est_x_1 = est_x_1 ./ repmat(est_x_1(3,:),3,1);
%% Plot results
imshow(img,[]); hold on;
plot(est_x_1(1,:),est_x_1(2,:),'gs');
而這裏的結果圖像:
+0
這很不錯。讓我馬上試試這個!謝謝!! – Arun
相關問題
- 1. OpenCV:使用StereoCamera系統進行色彩標記的3D姿態估計
- 2. 使用OpenCv和python進行RGB-D姿態估計
- 3. 使用OpenCV進行相機姿態估計
- 4. 使用opencv進行年齡估計的方法
- 5. 使用Matlab和opencv進行基本矩陣估計
- 6. 使用Android中的metaio在openCV中進行3D對象渲染
- 7. 使用OpenCV進行網格檢測
- 8. 使用Python進行2D運動估計,OpenCV和卡爾曼濾波
- 9. OpenCV:相機姿態估計
- 10. OpenCV的姿態估計
- 11. 使用pcl或opencv在2D場景中匹配3D模型
- 12. 在Qt中對3D場景進行可視化
- 13. 如何使用OpenCV更有效地隔離籃球場?
- 14. 我怎樣才能估計與3d到2d點對應的相機姿態(使用opencv)
- 15. 用emgu進行姿態估計
- 16. 使用估計器構建LSTM網絡
- 17. iOS 3D觸摸API使用Javascript進行網絡應用
- 18. 2D-3D單應性矩陣估計
- 19. 3D場景中的3D場景
- 20. 如何使用RANSAC對SIFT矩陣結果進行單應性估計
- 21. 通過FFT進行PSD估計
- 22. 使用emgucv進行全身檢測和估計人體高度
- 23. 我該如何使用估計不sklearn進行模型管道
- 24. 使用n點進行姿態估計的穩定性
- 25. 使用ggplot進行多個係數估計的圖函數R
- 26. 使用OpenCV計算網格上的對象
- 27. 在OpenCV中計算3D梯度方向
- 28. 3D粒子球
- 29. 3D球體OpenGL
- 30. 使用加速度計進行滾球運動
我認爲這應該是可行的。給定足夠的點對應關係2D <-> 3D,您應該能夠檢索內在和外在矩陣。已知法院模式的 – aardvarkk
應該很容易校準。使用平行線afaik,您至少需要2或3個消失點(不同的線方向),但在該圖像中,由於水平線與圖像平面完全平行,因此只會得到一個消失點。 – Micka