คำนวณพิกัดพื้นที่กล้องจากการเรนเดอร์ vtk

ฉันเรนเดอร์รูปภาพใน vtk แล้ว ฉันต้องการฉายจุดภาพ (x,y) ไปยังพิกัดเฟรมของกล้อง 3 มิติ สำหรับแต่ละพิกเซล (x,y) ฉันมีค่า z ในเฟรมกล้อง (ได้มาจากบัฟเฟอร์ z)

ภายใต้การฉายภาพรูเข็ม วิธีมาตรฐานในการทำเช่นนี้คือ:

x_camera_frame = (x_pixel - cx) * z_camera_frame/ fx;

y_camera_frame = (y_pixel - cy) * z_camera_frame / fy;

โดยที่ fx และ fy คือทางยาวโฟกัส และ cx cy เป็นจุดศูนย์กลางของการฉายภาพของกล้อง (พารามิเตอร์ภายใน)

ปัญหาคือ เมื่อใช้ vtkCamera คุณสามารถตั้งค่าขอบเขตการมองเห็นได้เท่านั้น แต่ไม่มีวิธีตั้งค่าหรือรับทางยาวโฟกัสหรือจุดศูนย์กลางของการฉายภาพ ดังนั้น ฉันจะคำนวณ x_camera_frame และ y_camera_frame ได้อย่างไร


person Aly    schedule 08.08.2013    source แหล่งที่มา


คำตอบ (1)


โดยปกติจุดศูนย์กลางของการฉายภาพจะอยู่ที่ตำแหน่งกล้อง เช่น (0,0,0) ในพื้นที่กล้อง นั่นหมายความว่ามุมซ้ายบนของรูปภาพของคุณควรอยู่ที่ P = (-imagewidth/2, -imageheight/2, fl) (fl คือความยาวโฟกัส) โดยสมมติว่าไม่มีการใช้การแปลง 2 มิติอีกต่อไป (การครอบตัด การปรับขนาด ฯลฯ) หลังจากการแปลงเปอร์สเปคทีฟ

P ในที่นี้แสดงถึงจุดในระนาบภาพที่มองเห็นได้จากพื้นที่กล้อง ในการแปลงให้คูณด้วยค่าผกผันของเมทริกซ์การฉายภาพ และคุณควรจะได้จุดในพื้นที่กล้อง

ฉันถือว่าคุณรู้ว่าภาพมีความกว้างและสูงเท่าใด หากต้องการทราบทางยาวโฟกัส ระยะห่างระหว่างกล้องกับจุดโฟกัสสามารถใช้ได้ API ยังส่งคืน Projection Transform Matrix เพื่อให้คุณสามารถคำนวณได้ ผกผันก่อนที่จะนำไปใช้กับจุดระนาบภาพ

อรุณ

person Arun R    schedule 08.08.2013