Vâng, những gì bạn đang xem xét ở dạng đơn giản là Pythagorean theorem problem a^2 + b^2 = c^2. Tuy nhiên khi nói đến các ứng dụng dựa trên máy ảnh, mọi thứ không phải là rất dễ dàng để xác định chính xác. Bạn đã tìm thấy một nửa chi tiết bạn cần cho "a", tuy nhiên việc tìm kiếm "b" hoặc "c" khó hơn nhiều.
The Short trả lời
Về cơ bản nó không thể được thực hiện với một máy ảnh duy nhất. Nhưng nó có thể được thực hiện với hai camera.
Các dài hơi trả lời (Nghĩ rằng tôi muốn giải thích sâu hơn, không có ý định chơi chữ)
tôi sẽ cố gắng và giải thích, nói rằng chúng ta chọn hai điểm trong hình ảnh của chúng tôi và di chuyển bên trái camera. Chúng ta biết khoảng cách từ camera của mỗi điểm B1 là 20mm và điểm B2 là 40mm. Bây giờ giả sử rằng chúng tôi xử lý hình ảnh và phép đo của chúng tôi là A1 là (0,2) và A2 là (0,4), chúng có liên quan đến B1 và B2 tương ứng. Bây giờ A1 và A2 không phải là số đo; chúng là các điểm di chuyển.
Điều chúng ta phải làm là nhân sự thay đổi trong A1 và A2 với hằng số được tính toán sẽ là khoảng cách thế giới thực tại B1 và B2. LƯU Ý: Mỗi loại này khác nhau theo phép đo B *. Tất cả điều này liên quan đến Angle of view hoặc thường được gọi là Field of View trong nhiếp ảnh ở những khoảng cách khác nhau. Bạn có thể tính toán chính xác hằng số nếu bạn biết kích thước của từng pixel trên CCD camera và số f của ống kính bạn có bên trong máy ảnh.
Tôi cho rằng đây không phải là trường hợp như vậy ở các khoảng cách khác nhau, bạn phải đặt một đối tượng mà bạn biết chiều dài và xem có bao nhiêu điểm ảnh cần thiết. Đóng lên, bạn có thể sử dụng một người cai trị để làm cho mọi thứ dễ dàng hơn. Với những phép đo này. Bạn lấy dữ liệu này và tạo thành một đường cong với một đường phù hợp nhất. Trường hợp trục X sẽ là khoảng cách của đối tượng và trục Y sẽ là hằng số của tỷ lệ pixel đến khoảng cách mà bạn phải nhân sự di chuyển của mình.
Vậy làm cách nào để áp dụng đường cong này. Vâng nó đoán công việc. Về lý thuyết, phép đo chuyển động A * càng lớn thì vật thể càng gần với máy ảnh. Trong ví dụ của chúng tôi tỷ lệ của chúng tôi cho A1> A2 nói 5mm và 3mm tương ứng và bây giờ chúng ta biết rằng điểm B1 đã di chuyển 10mm (2x5mm) và B2 đã di chuyển 6mm (2x6mm). Nhưng chúng ta hãy đối mặt với nó - chúng ta sẽ không bao giờ biết B và chúng ta sẽ không bao giờ có thể biết được khoảng cách di chuyển là 20 pixel của một vật thể không di chuyển xa hay một vật thể đang di chuyển xa. Đây là lý do tại sao những thứ như Xbox Kinect sử dụng cảm biến bổ sung để có được thông tin chiều sâu có thể được gắn với các đối tượng trong hình ảnh.
Những gì bạn cố gắng có thể thử với hai camera vì khoảng cách giữa các máy ảnh này được biết là chuyển động có thể được tính toán chính xác hơn (hiệu quả mà không sử dụng cảm biến độ sâu). Các toán học đằng sau điều này là vô cùng phức tạp và tôi sẽ đề nghị tìm kiếm một số bài báo về chủ đề này. Nếu bạn muốn tôi giải thích lý thuyết, tôi có thể cố gắng.
Tất cả kinh nghiệm của tôi đến từ việc thiết kế chuyển đổi video tốc độ cao và xử lý hình ảnh cho PHD của tôi để tin tưởng tôi, không thể thực hiện được với một máy ảnh, xin lỗi. Tôi hy vọng một số điều này sẽ giúp.
Cheers
Chris
[EDIT]
tôi sẽ thêm một bình luận nhưng điều này là dễ dàng hơn do phần lớn các thông tin:
Vì nó là Kinect Tôi sẽ giả sử bạn có một số thông tin liên quan đến độ sâu liên quan đến mỗi điểm nếu không bạn sẽ cần phải tìm ra cách để có được điều này.
Phương trình bạn sẽ cần phải bắt đầu với là cho Trường nhìn (FOV):
o/d = i/f
đâu:
f bằng với độ dài tiêu cự của ống kính thường được cho bằng mm (ví dụ: 18 28 30 50 là các ví dụ tiêu chuẩn)
d là đối tượng khoảng cách từ ống kính thu thập từ dữ liệu Kinect
o là kích thước đối tượng (hoặc "field of view" vuông góc với và chia cắt bởi các trục quang học).
i là kích thước hình ảnh (hoặc "trường dừng" vuông góc với và được chia đôi bởi trục quang).
Chúng tôi cần phải tính toán i, nơi o là chưa biết của chúng ta để cho i (đó là một phép đo đường chéo),
Chúng tôi sẽ cần phải kích thước của pixel trên CCD sẽ này trong micromet hoặc µm bạn sẽ cần phải tìm thông tin này ra, Để biết chúng tôi sẽ lấy nó như là 14um đó là tiêu chuẩn cho một camera tầm trung quét.
Vì vậy, đầu tiên chúng ta cần phải làm việc ra tôi chiều ngang (ih) là số pixel chiều rộng của máy ảnh nhân với kích thước của điểm ảnh CCD (Chúng tôi sẽ sử dụng 640 x 320)
vậy: ih = 640 * 14um = 8960um
= 8960/1000 = 8.96mm
Bây giờ chúng ta cần i chiều dọc (iv) cùng một quá trình nhưng chiều cao
vậy: iv = (320 * 14um)/1000 = 4.48mm
Bây giờ i được tìm thấy bởi định lý Pythagore Pythagore lý a^2 + b^2 = c^2
vậy: i = sqrt (ih^2 _ iv^2)
= 10.02 mm
Bây giờ chúng ta sẽ cho rằng chúng ta có một ống kính 28 mm. Một lần nữa, giá trị chính xác này sẽ phải được tìm ra. Vì vậy, phương trình của chúng tôi được sắp xếp lại để cung cấp cho chúng tôi o là:
o = (i * d)/f
Ghi o sẽ chéo (chúng tôi sẽ giả định của đối tượng hoặc điểm là 50mm đi):
o = (10.02mm * 50mm)/28mm
17.89mm
Bây giờ chúng ta cần để làm việc ra o chiều ngang (oh) và o chiều dọc (ov) vì điều này sẽ cho chúng ta khoảng cách mỗi pixel mà đối tượng đã di chuyển. Bây giờ là FOV α CCD hoặc i là tỷ lệ thuận với o chúng tôi sẽ làm việc ra một tỷ lệ k
k = i/o
= 10.02/17.89
= 0.56
vậy:
o kích thước ngang (oh):
oh = ih/k
= 8.96mm/0.56 = 16mm cho mỗi pixel
o chiều dọc (ov):
ov = iv/k
= 4.48mm/0,56 = 8mm mỗi pixel
Bây giờ chúng ta có các hằng số chúng ta yêu cầu, hãy sử dụng nó trong một ví dụ. Nếu đối tượng của chúng tôi tại 50mm di chuyển từ vị trí (0,0) đến (2,4) thì các số đo trong cuộc sống thực là:
(2 * 16mm, 4 * 8mm) = (32mm, 32mm)
một lần nữa, một định lý Pythagore: a^2 + b^2 = c^2
Tổng khoảng cách = sqrt (32^2 + 32^2)
= 45.25mm
Phức tạp tôi biết, nhưng một khi bạn có điều này trong một chương trình dễ dàng hơn. Vì vậy, đối với mỗi điểm bạn sẽ phải lặp lại ít nhất một nửa quá trình như d sẽ thay đổi theo đó o cho mỗi điểm bạn kiểm tra.
Hy vọng điều này giúp bạn trên con đường của bạn,
Cheers Chris
Tôi đang cung cấp một khoản tiền 500 cho câu trả lời cho câu hỏi này http://stackoverflow.com/questions/7414809/extract-projective-homography-from-two-kinect-depth-maps – smirkingman