2011-08-17 6 views
9

Tôi muốn đo khoảng cách đến một đối tượng bằng cách sử dụng điện thoại camera lập thể 3D với opencv. Tôi đang tìm một công thức đo độ chính xác của phép đo khoảng cách, tùy thuộc vào độ dài tiêu cự, khoảng cách giữa 2 camera, độ phân giải hình ảnh và kích thước của đối tượng đo được. Googling một chút, tôi thấy công thức này:độ chính xác chiều sâu opencv độ chính xác

d = Z^2 * p/(f * b)

Z - khoảng cách đến đối tượng, p - Độ chính xác chênh lệch, e - độ dài tiêu cự, b - cơ sở (khoảng cách giữa các máy ảnh).

Tôi biết đường cơ sở và tiêu cự, nhưng tôi không biết độ chính xác chênh lệch. Công thức này có cần gì không? Nếu vậy, làm thế nào để tôi tìm được độ chính xác chênh lệch?

Cảm ơn.

Trả lời

5

Nếu bạn nhìn vào đoạn văn sau công thức 8 trong document you link bạn có thể thấy rằng chúng có độ chính xác chênh lệch 0,18 * 10^-6m. Đọc thêm một chút, tôi kết luận rằng độ chính xác chênh lệch mà họ sử dụng là khoảng cách tính bằng m giữa hai điểm ảnh trên CCD của máy ảnh được sử dụng. Đối với một CCD "1/4" (có kích thước 3,2mm x 2,4mm) với độ phân giải 640X480 (một camera VGA rất cũ), điều này sẽ là 5 * 10^-6. Tôi không biết kích thước cảm biến cho LG Optimus 3D là gì là, nhưng giả sử 1/4 "độ phân giải ngang CCD và 2592 pixel, đường cơ sở cho độ chính xác chênh lệch sẽ là: 1,23 * 10^-6, cho độ chính xác sâu khoảng 10m khoảng 0,85m. Điều này có vẻ hợp lý với tôi. Nếu CCD nhỏ hơn, nó sẽ cải thiện (tức là giá trị độ chính xác thấp hơn).

Đây là giá trị thấp nhất có thể, giả sử kết hợp hoàn hảo các tính năng giữa hai hình ảnh stereo. Giá trị này chỉ thể hiện các giới hạn vật lý của cặp stereo của bạn.

+0

Cảm ơn. Tôi đang cố gắng để có được một ước tính sơ bộ về giá trị này để xem dự án của tôi có khả thi hay không. Chiếc điện thoại tôi hiện đang nhắm mục tiêu là LG Optimus 3D. Độ dài tiêu cự của nó là 6 mm và đường cơ sở của nó là 24 mm. Tôi muốn tính toán sai số đo khoảng cách ở 10 mét. Ngay cả khi tôi cho rằng lỗi chênh lệch chỉ là 1 pixel, điều này không có ý nghĩa (hay không?) d = 10000^2 * 1/(24 * 6) = ~ 694 mét ... Tôi là gì làm sai? – barisdad

+0

OK, sai lầm đầu tiên của tôi là điều này không phải tính bằng mét. Nhưng tôi vẫn không hiểu ý nghĩa của nó. – barisdad

+0

... và sai lầm thứ hai của tôi là giá trị này rõ ràng dưới 1 (đó là tỷ lệ chứ không phải giá trị pixel). Điều gì có thể là ước tính giá trị chênh lệch của một chiếc xe hơi ở độ cao 10 mét? – barisdad

11

Tôi nhận thấy đây là một năm muộn, nhưng chỉ trong trường hợp ai đó tìm thấy điều này.

Công thức là thế này:

dD = dd * D^2/fB

nơi:

  • lỗi dd = chênh lệch
  • dD = sâu lỗi
  • D = sâu
  • f = Độ dài tiêu cự
  • B = cơ sở

nếu f = 6mm = 0.006m, B = 24mm = 0.024m, D = 10m, dd là 1 pixel [chúng ta hãy gọi nó P cho bây giờ, nhưng nó thường là khoảng 1.4um].

Cắm tất cả các số trong cho:

dD = P * 10^2/(0.006 * 0.024) ~ 694444 P

Đối P=1.4um, dD = 0.97 m (đó là khoảng 9,7%).

Bây giờ, giả định rằng thư từ của bạn sẽ gây ra lỗi pixel đơn.Bạn có thể thực hiện tìm kiếm pixel phụ và tùy thuộc vào mức độ tiếng ồn và kết cấu trong hình ảnh, bạn có thể nhận được tương ứng chính xác pixel phụ. Trong trường hợp đó, độ chính xác của bạn sẽ tốt hơn một chút.

LƯU Ý rằng công thức này là do lỗi. Bản đồ giữa chênh lệch và chiều sâu như sau:

d = fB/D

nơi:

  • d = chênh lệch
  • D = sâu
  • f = độ dài tiêu cự
  • B = cơ sở

Tương tự, hãy cắm các số trong số:

d = (0.006 * 0.024/10) m = 0.0000144 m = 0.0144 mm = 14.4 um.

nếu bạn cho rằng kích thước pixel của mình là khoảng 1.4um thì 14.4um là khoảng 10 pixel. Điều này phù hợp với lỗi ở trên - nghĩa là lỗi 1 pixel chiếm khoảng 10%.

Một chiếc xe cách đó 10 mét được dịch chuyển 10 pixel giữa các cảm biến trái và phải.

Tôi hy vọng rằng sẽ giúp.

+0

Xin chào @thang, câu hỏi của tôi là về lỗi sai lệch. Nó được sử dụng như một giá trị tiêu biểu hoặc được tính toán từ các kiến ​​thức đã cho về các thông số cảm biến? –