如何在不使用點雲庫(PCL)的情況下估算深度圖像上的點(像素值,單位爲毫米)上的點I(i,j)的表面法線?我已經通過(1),(2)和(3),但我正在尋找使用C++標準庫或openCV對每個像素的表面法線的簡單估計。深度圖像上的表面法線
2
A
回答
2
你需要知道相機的內部參數,這樣你也可以知道在同一個單位(毫米)像素之間的距離。像素之間的距離是用於從相機一定距離明顯真(即中心像素的值)
如果相機矩陣爲K通常是這樣的:
f 0 cx
K= 0 f cy
0 0 1
然後,取
x
P = inv(K) * y
1
取決於是否在圖像的距離是在Z的投影:像素座標(X,Y),然後從通過像素攝影機原點的光線(在相機世界座標空間)是利用定義軸,或者離中心只有一個歐式距離r,你需要對矢量P進行歸一化處理,使得幅度是到你想要的像素的距離,或者確保P的z分量是這個距離。對於框架中心周圍的像素,這應該接近相同。
如果對相鄰像素(比如說左側和右側)執行相同的操作,則以mm爲單位得到P1和Pr 然後,找到(P1-Pr)的範數,它是相鄰像素之間距離的兩倍毫米。
然後,計算梯度在X和Y
gx = (Pi+1,j - Pi-1,j)/(2*pixel_size)
然後,把兩個梯度的方向向量:
ax = atan(gx), ay=atan(gy)
| cos ax 0 sin ax | |1|
dx = | 0 1 0 | * |0|
| -sin ax 0 cos ax | |0|
| 1 0 0 | |0|
dy = | 0 cos ay -sin ay | * |1|
| 0 sin ay cos ay | |0|
N = cross(dx,dy);
您可能需要看是否標誌意義,通過看着一定的梯度,並看到dx,dy點到預期的方向。對於N向量,您可能需要對無/一/兩個角度使用負數。
相關問題
- 1. 深度圖像上的點
- 2. 來自深度圖像(CFD)的Canny線
- 3. Kinect深度圖像
- 4. 減少圖像位深度
- 5. 圖像位深度值
- 6. kinect深度圖像處理
- 7. Otsu深度圖像閾值
- 8. 計算深度圖像中像素到攝像機平面的角度
- 9. 繪製深度圖像的直方圖?
- 10. 如何知道matlab中24位深度圖像的深度值
- 11. 使用相鄰像素計算來自深度圖像的曲面法線產品
- 12. iOS應用圖像/圖標位深度
- 13. 從單個圖像提取深度圖
- 14. 像素深度與顏色深度
- 15. RealSense的OpenCV深度圖像太暗
- 16. FreeASPUpload:上傳大比特深度的圖像不會在IE
- 17. 深度圖three.js
- 18. 減少位深度時保存圖像信息的好方法
- 19. 轉換Kinect的深度圖像EmguCV圖像誤差
- 20. 如何將kinect的深度圖像與彩色圖像對齊
- 21. 來自Kinect的深度圖像:索引圖像?
- 22. 用Perl發現HTML頁面上表格的深度和數量
- 23. Kinect深度和圖像幀對齊
- 24. 訪問像素值深度圖
- 25. 使用matlab更改圖像位深度
- 26. Vulkan深度圖像綁定錯誤
- 27. 圖像處理術語:位深度
- 28. opencv realsense 16位深度圖像
- 29. imwrite 16位png深度圖像
- 30. 圖像分類深度學習
我可以知道如何根據相機的內在參數獲得像素之間的距離:'fx:365.40,fy:365.40,cx:260.93,cy:205.60'? – askingtoomuch
在上面添加了更多細節。 – Photon
感謝您的詳細信息。我用上面座標(273,163)圈出的像素計算P,得到了 'P = [0.0330 -0.1166 1] T'。這是什麼意思?上面的深度值是以毫米爲單位的距離。 – askingtoomuch