2013-07-06 42 views
10

Tôi muốn biết cách tôi có thể tính toán góc của một số điểm ảnh trong ảnh liên quan đến webcam mà tôi đang sử dụng. Tôi mới làm điều này và tôi đang sử dụng một webcam. Về cơ bản, tôi chụp ảnh, xử lý nó, và tôi kết thúc với một giá trị pixel trong hình ảnh đó là những gì tôi đang tìm kiếm. Sau đó tôi cần phải bằng cách nào đó biến giá trị pixel đó thành một số lượng có ý nghĩa --- Tôi cần phải tìm một dòng/véc tơ đi qua điểm ảnh và máy ảnh. Tôi không cần cường độ, chỉ là giai đoạn.OpenCV: Tính góc giữa máy ảnh và điểm ảnh

Làm cách nào để thực hiện việc này? Hiệu chuẩn máy ảnh có cần thiết không? Tôi đã đọc một chút về nó nhưng không chắc chắn.

Cảm ơn

+2

Để có thể thực hiện việc này, bạn cần phải biết khoảng cách của đối tượng tương ứng với pixel và trường nhìn của máy ảnh. –

+0

OK, bạn có bất kỳ đề xuất nào về cách tôi có thể giải quyết vấn đề của mình không.Tôi về cơ bản đang tìm kiếm một đối tượng màu sắc cụ thể. Tôi tìm tọa độ pixel phù hợp nhất với màu mà tôi đang tìm kiếm, sau đó tôi cần có cách để nói hướng mà đối tượng là ... Có phải điều này không thể không có chiều sâu? Tôi đã nghĩ rằng tôi có thể nhận được một số mang từ các tọa độ điểm ảnh ... –

+0

Vẽ một sơ đồ của tình hình. Bạn có một tam giác vuông góc, các góc của nó là (A) đối tượng, (B) camera, và (C) một điểm ở trung tâm của hình ảnh nhưng ở mặt phẳng sâu của đối tượng. Làm thế nào bạn sẽ tính toán góc ABC? –

Trả lời

7

Bạn không cần phải biết khoảng cách đến đối tượng, chỉ có độ phân giải và góc nhìn của camera.

Tính toán góc chỉ yêu cầu nội suy tuyến tính đơn giản. Ví dụ: giả sử một máy ảnh có độ phân giải 1920x1080 bao gồm góc ngắm 45 độ trên đường chéo.

Trong trường hợp này, sqrt (1920 + 1080) cho 2292,19 pixel dọc theo đường chéo. Điều đó có nghĩa là mỗi pixel đại diện cho 45/2292.19 = .0153994 độ.

Vì vậy, tính khoảng cách từ tâm (tính bằng pixel), nhân với 0,0153994 và bạn có góc từ tâm (đối với máy ảnh đó - cho máy ảnh của bạn, bạn rõ ràng sẽ phải sử dụng độ phân giải và góc của nó xem).

Tất nhiên, điều này có phần gần đúng - độ chính xác của nó sẽ phụ thuộc vào mức độ biến dạng của ống kính. Với một ống kính zoom (đặc biệt là góc rộng hơn), bạn thường có thể dựa vào đó là khá cao. Với một ống kính tiêu cự cố định (đặc biệt là nếu nó không bao phủ một góc rộng hơn 90 độ hoặc hơn) nó sẽ thường là khá thấp.

Nếu bạn muốn cải thiện độ chính xác, bạn có thể bắt đầu bằng cách chụp ảnh hình chữ nhật phẳng với đường thẳng ngay trong góc nhìn của máy ảnh, sau đó tính méo dựa trên độ lệch hoàn toàn thẳng trong ảnh kết quả . Nếu bạn đang làm việc với một ống kính góc cực rộng, điều này có thể gần như cần thiết. Với một ống kính có góc nhìn hẹp hơn (đặc biệt, như đã đề cập, nếu nó là tiêu cự cố định) thì hiếm khi có giá trị (các ống kính này thường chỉ có một phần nhỏ của một phần trăm méo).

+0

Cảm ơn bạn, điều này rất hữu ích. Bạn có nghĩ rằng 'hiệu chuẩn máy ảnh' sẽ là cần thiết/đáng giá không? –

+0

@ user968243: Tôi tin rằng hiệu chuẩn máy ảnh của OpenCV được dự định để đo lường sự biến dạng, do đó, nó là khá nhiều những gì đoạn cuối của câu trả lời nói về. Tiện ích của nó sẽ phụ thuộc vào mức độ méo mó của ống kính mà tôi không biết. –

+0

Câu trả lời chỉ là ước tính đơn hàng đầu tiên. Bạn có thể dễ dàng có được câu trả lời chính xác hơn nhiều bằng cách hiệu chỉnh máy ảnh. Điều này đặc biệt đúng đối với các ống kính góc rộng hơn (> 90 độ FOV), thường biểu hiện sự biến dạng phi tuyến đáng kể. –

11

Recipe:

1 - Hiệu chỉnh máy ảnh, lấy ma trận camera K và bóp méo thông số D. Trong OpenCV này được thực hiện như mô tả trong tutorial này.

2 - Xóa biến dạng phi tuyến khỏi vị trí pixel quan tâm. Trong OpenCV được thực hiện bằng cách sử dụng thường lệ undistortPoints, mà không cần truyền tham số R và P.

3 - Dự phòng lại các điểm ảnh quan tâm thành tia (đơn vị vectơ với đuôi tại trung tâm camera) trong tọa độ 3D của máy ảnh, bằng cách nhân vị trí pixel trong tọa độ đồng nhất lần nghịch đảo của ma trận máy ảnh.

4 - Góc bạn muốn là góc giữa các vectơ trên và (0, 0, 1), vectơ liên kết với trục tiêu cự của máy ảnh.

+0

Xin chào, tôi muốn đến từ vị trí điểm ảnh P vector mang. Đó là véc tơ đơn vị đi từ trung tâm camera đến đối tượng được xác định bởi pixel P. Để làm điều đó, tôi sẽ chỉ đến điểm 3 trong mô tả của bạn. Camera_matrix là ma trận 3x3, chẳng hạn như hiệu chuẩn của máy ảnh. Là tất cả những gì phải không? Cảm ơn trước – kalmanIsAGameChanger

Các vấn đề liên quan