Keyword: การแม็บจุดจากสี่เหลี่ยมใดๆไปยังสี่เหลียมใด, Quadrilateral to Quadrilateral mapping, inverse, matlab, Algorithm, Source Code
ถ้าหากเรามีพารามิเตอร์ a-h ที่แปลงจาก สีเหลี่ยมQ ไป สีเหลี่ยมR แล้ว
หากต้องการหาพารามิเตอร์ a-h ที่แปลงจาก สีเหลี่ยมR ไป สีเหลี่ยมQ
สามารถใช้วิธีการ Inverse ได้
การทำ Inverse มี 2 วิธี
1 หาอินเวอร์สเมตริกธรรมดาตรงๆ
ข้อดี ง่ายตรงไปตรงมาก ได้ค่าที่ถูกต้อง
ข้อเสีย ใช้เวลาในการคำนวณมาก
input: Transformation matrix ที่มีพารามิเตอร์ a-h
output: Transformation matrix ที่มีพารามิเตอร์ A-H
%% inverse simple % map destination quadrilater to source qudrilater iTf = inv(Tf); A = iTf(1,1); B = iTf(1,2); C = iTf(1,3); D = iTf(2,1); E = iTf(2,2); F = iTf(2,3); G = iTf(3,1); H = iTf(3,2); I = iTf(3,3); % Ex sample % use point from previous step (x,y) % if inverse correct (u,v) must close to (154,154) W = G*x + H*y + I; u = (A*x + B*y + C) / W v = (D*x + E*y + F) / W |
2 หาอินเวอร์แบบใช้สูตรClose From(ไม่ทราบที่มาขออภัยด้วย search เจอในเน็ต)
ข้อดี ใช้เวลาคำนวนน้อย เขียนโปรแกรมง่าย
ข้อเสีย ได้ค่าที่ใกลเคียง มี Error เพียงเล็กน้อย
input: Transformation matrix ที่มีพารามิเตอร์ a-h
output: Transformation matrix ที่มีพารามิเตอร์ A-H
%% inverse faster but have a little error % Reference Mapping to Polygon Mesh Object % invF = (1/ae-bd)*[ ei?fh ch?bi bf?ec ] % | fg?di ai?cg dc?af | % [ dg?eg bg?ah ae?bd ] A = e*i - f*h; B = c*h - b*i; C = b*f - e*c; D = f*g - d*i; E = a*i - c*g; F = d*c - a*f; G = d*g - e*g; H = b*g - a*h; I = a*e - b*d; iTf = (1/(a*e - b*d))* [A B C; D E F; G H I]; A = iTf(1,1); B = iTf(1,2); C = iTf(1,3); D = iTf(2,1); E = iTf(2,2); F = iTf(2,3); G = iTf(3,1); H = iTf(3,2); I = iTf(3,3); % Ex sample % use point from previous step (x,y) % if inverse correct (u,v) must close to (154,154) W = G*x + H*y + I; u = (A*x + B*y + C) / W v = (D*x + E*y + F) / W |
ดาวน์โหลด Source Code
ข้อมูลอื่นๆที่เกี่ยวข้อง
การหา Transformation Matrix การแม็บจุดจากสี่เหลี่ยมใดๆไปยังสี่เหลียมใด
ไม่มีความคิดเห็น:
แสดงความคิดเห็น