07 สิงหาคม 2553

ซอรสโค้ด Matlab การแม็บจุดจากสีเหลี่ยมใดๆต้นทาง ไปยังจุดที่อยู่ใน

ซอรสโค้ด Matlab การแม็บจุดจากสีเหลี่ยมใดๆต้นทาง ไปยังจุดที่อยู่ในสี่เหลี่ยมใดๆปลายทาง
Keyword: การแม็บจุดจากสี่เหลี่ยมใดๆไปยังสี่เหลียมใด, Quadrilateral to Quadrilateral mapping, inverse, matlab, Algorithm, Source Code

input :
    จุดมุมในสีเหลี่ยมใดๆต้นทาง 4 จุด คือ (u0,v0), (u1,v1), (u2,v2), (u3,v3)
    จุดมุมในสีเหลี่ยมใดๆปลายทาง 4 จุด คือ (u0,v0), (u1,v1), (u2,v2), (u3,v3)
    จุดที่ต้องการแม็บ สีเหลี่ยมต้นทาง ไปยังสีเหลี่ยมปลายทาง (u,v)  
output:
    จุดที่อยู่บนสีเหลี่ยมปลายทาง
Source Code
% Quadrilateral to Quadrilateral
% By Nemin Suksen
% Master Degree FIBO, KMUTT, Thailand
% Reference:  pages 17-21 of Fundamentals of Texture Mapping and Image Warping, Paul Heckbert,
% Master’s thesis, UCB/CSD 89/516, CS Division, U.C. Berkeley, June 1989,
% URL=http://www.cs.cmu.edu/˜ph.
% Thank Nung Navakun Sebang for paper sample data and suggestion
clc; clear all; close all;
%% Source Quadrilateral  
% 4 Point of Quadrilateral = (u0,v0), (u1,v1), (u2,v2), (u3,v3)
u0 = 7;
v0 = 171;
u1 = 294;
v1 = 168;
u2 = 307;
v2 = 2;
u3 = 1;
v3 = 2;

%% Destination Quadrilateral
% 4 Point of Quadrilateral = (x0,y0), (x1,y1), (x2,y2), (x3,y3)
x0 = 10;
y0 = 190;
x1 = 310;
y1 = 190;
x2 = 310;
y2 = 10;
x3 = 10;
y3 = 10;

%% slove 8 equation to find 8 unknowns a-h
C =[ u0  v0  1  0  0  0 -u0*x0 -v0*x0
     u1  v1  1  0  0  0 -u1*x1 -v1*x1
     u2  v2  1  0  0  0 -u2*x2 -v2*x2
     u3  v3  1  0  0  0 -u3*x3 -v3*x3
     0   0   0  u0 v0 1 -u0*y0 -v0*y0
     0   0   0  u1 v1 1 -u1*y1 -v1*y1
     0   0   0  u2 v2 1 -u2*y2 -v2*y2
     0   0   0  u3 v3 1 -u3*y3 -v3*y3];
% [C] * [unknow] = [Destination 4 point]
% slove to fine unknow matrix by invert C method
D4p= [x0; x1; x2; x3; y0; y1; y2; y3];
Unknown = inv(C) * D4p
a = Unknown(1);
b = Unknown(2);
c = Unknown(3);
d = Unknown(4);
e = Unknown(5);
f = Unknown(6);
g = Unknown(7);
h = Unknown(8);
i = 1;
Tf = [a b c; d e f; g h i];

%% Ex sample

%point in source quadrilateral = (154,154)
u = 154;
v = 154;

% point in destination qudrilateral
% w = gu+hv+1
% x = (au+bv+c)/w
% y = (du+ev+f)/w
w = g*u + h*v + 1;
x = (a*u + b*v + c) / w
y = (d*u + e*v + f) / w
ดาวน์โหลด Source Code

เกร็ดความรู้เรื่องอินเวอร์ส
 หากเรามีพารามิเตอร์  a-h ที่แปลงจาก สีเหลี่ยมQ ไป สีเหลี่ยมR แล้ว
หากต้องการหาพารามิเตอร์ a-h ที่แปลงจาก สีเหลี่ยมR ไป สีเหลี่ยมQ
สามารถใช้วิธีการ Inverse ได้

ไม่มีความคิดเห็น: