CN103616949A - 数字书画笔迹校准方法及系统 - Google Patents
数字书画笔迹校准方法及系统 Download PDFInfo
- Publication number
- CN103616949A CN103616949A CN201310595307.6A CN201310595307A CN103616949A CN 103616949 A CN103616949 A CN 103616949A CN 201310595307 A CN201310595307 A CN 201310595307A CN 103616949 A CN103616949 A CN 103616949A
- Authority
- CN
- China
- Prior art keywords
- coordinate
- point
- painting
- calligraphy
- coordinates
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Projection Apparatus (AREA)
Abstract
本发明涉及一种数字书画笔迹校准方法及系统,该方法包括:S1、投影仪投影主控系统的画面至投影屏幕,投影的画面包括多个子画面,记录子画面的中心点为第一坐标;S2、选择子画面,确定第二坐标位置;S3、根据第一坐标位置和第二坐标位置确定转换矩阵,第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积;S4、接收书画笔的输入点,获取输入点的对应坐标,输入点的对应坐标与转换矩阵相乘后得到校正点坐标。实施本发明,在数字书画系统中的输出点经过转换矩阵的处理,避免了显示点与书写触点的偏离,在书画创作过程中,能够使书画笔与书画笔迹对位准确,使得笔迹位于笔端之下,而不是相隔一段距离,从而提高数字书画的真实感受。
Description
技术领域
本发明涉及数字书画技术,更具体地说,涉及一种数字书画笔迹校准方法及系统。
背景技术
数字书画是一种利用电子设备模仿书写,尤其是模仿毛笔书写效果的一种技术。如图1所示为一种数字书画装置,通过带有红外发射装置的书画笔在投影屏100上书写,利用红外接收摄像头300接收书画笔的发出的红外信号后,发送到主控系统400进行处理,主控系统400将信号处理后,由投影机200将处理后的书写笔迹投影在投影屏100上,同时主控系统400将对应的书写效果输出到显示器500上。
书画笔在投影屏100上书写的时候,由于对位不准确的缘故,会出现投影的笔迹与书画笔的位置不重合的问题,如图2所示,书画笔600在投影屏100上的触点101与投影点102的位置不重合,这样在书写的时候,使用者无法得知应该在哪个位置下笔,会严重影响书写效果。
发明内容
本发明的目的在于,针对现有的数字书画装置在书写时,出现的笔迹位置不准确导致影响书写效果的问题,提供一种数字书画中的笔迹校准方法及系统,以克服上述的缺陷。
本发明所提供的数字书画笔迹校准方法,包括以下的步骤:
S1、投影仪投影主控系统的画面至投影屏幕,投影的画面包括多个子画面,记录子画面的中心点为第一坐标;
S2、利用发光笔依次选择子画面,同时利用摄像头拍摄投影屏幕,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置;
S3、根据第一坐标位置和第二坐标位置确定转换矩阵,其中第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积;
S4、摄像头接收投影屏上书画笔的输入点,主控系统在所摄图像上获取输入点的对应坐标,并将输入点的对应坐标与转换矩阵相乘后得到校正点坐标,输出校正点。
本发明的数字书画笔迹校准方法,其中步骤S1包括:
在投影画面的4个顶角区域选择4个矩形区域作为子画面,在每个矩形区域中选择一个测试点;所述矩形区域的长度和宽度分别为投影画面长度和宽度的1/k;4≤k≤16。
本发明的数字书画笔迹校准方法,其中第一坐标位置为(xx,yy),第二坐标位置为(x,y),转换矩阵为 ,且
本发明的数字书画笔迹校准方法,还包括:S4、输出校正点;输入点坐标为(X,Y);校正点的坐标位置为(x',y'),根据 求得校正点坐标,其中Δ为归一化参数。
本发明还提供一种数字书画笔迹校准系统,包括:
第一坐标采集模块,用于在投影仪投影主控系统的画面至投影屏幕,投影的画面包括多个子画面,记录子画面的中心点为第一坐标;
第二坐标采集模块,利用发光笔依次选择子画面,同时利用摄像头拍摄投影屏幕,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置;
坐标转换模块,用于根据第一坐标位置和第二坐标位置确定转换矩阵,其中第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积;
校正点输出模块,用于通过摄像头接收投影屏上书画笔的输入点,主控系统在所摄图像上获取输入点的对应坐标,并将输入点的对应坐标与转换矩阵相乘后得到校正点坐标,输出校正点;
第一坐标采集模块、第二坐标采集模块和校正点输出模块分别与坐标转换模块通信连接。
本发明的数字书画笔迹校准系统,其中第一坐标采集模块在投影画面的4个顶角区域选择4个矩形区域作为子画面,在每个矩形区域中选择一个测试点;所述矩形区域的长度和宽度分别为投影画面长度和宽度的1/k;4≤k≤16。
本发明的数字书画笔迹校准系统,其中第一坐标位置为(xx,yy),第二坐标位置为(x,y),转换矩阵为 ,且
本发明的数字书画笔迹校准系统,其中输入点坐标为(xx,yy);校正点输出模块输出的校正点的坐标位置为(x',y'),根据 求得校正点坐标,其中Δ为归一化参数。
实施本发明的数字书画笔迹校准方法及系统,在数字书画系统中的输出点经过转换矩阵的处理,避免了显示点与书写触点的偏离,在书画创作过程中,能够使书画笔与书画笔迹对位准确,使得笔迹位于笔端之下,而不是相隔一段距离,从而提高数字书画的真实感受。
附图说明
图1为一种数字书画系统的结构示意图;
图2为现有技术中笔迹不一致的示意图;
图3为本发明一则优选实施例所提供的数字书画校正方法的流程图;
图4为图3实施例进行校准过程的显示效果图;
图5为图3实施例校准后进行书写的显示效果图;
图6为本发明一则优选实施例所提供的数字书画校正系统的功能框图。
具体实施方式
以下结合附图和具体实施方式对本发明进行详细说明。
为了克服如图2中书画笔600在投影屏100上的触点101与投影点102的位置不重合的缺陷,本发明提供了一种数字书画校准方法来使得触点101与投影点102重合,其流程如图3所示,首先在步骤S1,投影仪投影主控系统的画面至投影屏幕,投影的画面包括多个子画面,记录子画面的中心点为第一坐标;为了确保后续步骤的校正更准确,一般选取远离投影画面中心选择3~5个测试点,并且测试点之间距离较远的方案。例如在矩形的投影画面的四个角落选取4个小矩形区域作为测试点的候选区,每个小矩形的长度和宽度为投影屏的1/k。假定投影屏100上的投影画面是像素尺寸为SW×SH的矩形,这四个小矩形区域的中心位置分别为:
其中,1/k为比例系数,值越大,四个小矩形越靠近中心;值越小,四个小矩形越靠近四个角落。通过实验测得,四个小矩形靠近四个角落时,校准效果较好,四个小矩形靠近中心时,四周的畸变较严重,效果不好。在实际使用中,由于受摄像头畸变、光线强弱等客观因素的影响,k的取值尽量不要导致四个小矩形位于或趋近于四个顶角,而应该与四个顶角留有一定距离。如k可取为16到4之间,例如16、8、5、4等。另外,小矩形的大小应远远小于书画屏大小,如10×10、20×20、30×30等。假定这4个点的坐标为P1(xx1,yy1)、P2(xx2,yy2)、P3(xx3,yy3)、P4(xx4,yy4)。
此后进行步骤S2,书画笔600依次点击投影画面100的四个小矩形,同时利用摄像头300拍摄投影画面100,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置。假定P1~P4在摄像图像上所对应的发光笔笔尖位置为(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4)。对于第一坐标和第二坐标的位置,通过转换矩阵将两者关联起来,转换矩阵为:
其与两个坐标的关系为:
在上面的公式(2)中,xx和yy代表第一坐标中的横坐标和纵坐标,即上述的(xx1,yy1),(xx2,yy2),(xx3,yy3),(xx4,yy4);x和y则代表第二坐标中的横坐标和纵坐标,即(x1,y1),(x2,y2),(x3,y3),(x4,y4)。
通过转换公式(2)的形式得到:
在上述的公式(3)中将上述4对坐标点代入,例如将(xx1,yy1)和(x1,y1)代入到公式(3)中。在4对坐标点都完成代入公式(3)的操作后,会得12个方程,再根据最小二乘法求取效果最好的关于公式(1)的9个未知数。例如,令:
f(a11,a12,a13,a21,a22,a23,a31,a32,a33)=(a11*x+a21*y+a31-xx)2(4)
+(a12*x+a22*y+a32-yy)2+(a13*x+a23*y+a33-1)2
则代入上面的4对坐标点,求f的最小值。用公式表示如下:
min[(a11*x1+a21*y1+a31-xx1)2+(a12*x1+a22*y1+a32-yy1)2+(a13*x1+a23*y1+a33-1)2
+(a11*x2+a21*y2+a31-xx2)2+(a12*x2+a22*y2+a32-yy2)2+(a13*x2+a23*y2+a33-1)2
+(a11*x3+a21*y3+a31-xx3)2+(a12*x3+a22*y3+a32-yy3)2+(a13*x3+a23*y3+a33-1)2
+(a11*x4+a21*y4+a31-xx4)2+(a12*x4+a22*y4+a32-yy4)2+(a13*x4+a23*y4+a33-1)2]
通过最小二乘法展开后得到:
然后求解得到转换矩阵中a11,a12……a33等9个矩阵元的值:
a11=2*x1*xx1*y22+2*x2*xx2*y12-x1*xx3*y22-x2*xx3*y12
-x1*xx4*y22-x2*xx4*y12+2*x1*xx1*y32-x1*xx2*y32-x3*xx2*y12
+2*x3*xx3*y12-x1*xx4*y32-x3*xx4*y12+2*x1*xx1*y42-x2*xx1*y32
-x3*xx1*y22-x1*xx2*y42+2*x2*xx2*y32-x4*xx2*y12
-x1*xx3*y42+2*x3*xx3*y22-x4*xx3*y12-x2*xx4*y32-x3*xx4*y22
+2*x4*xx4*y12-x2*xx1*y42-x4*xx1*y22+2*x2*xx2*y42
-x2*xx3*y42-x4*xx3*y22+2*x4*xx4*y22-x3*xx1*y42-x4*xx1*y32
-x3*xx2*y42-x4*xx2*y32+2*x3*xx3*y42+2*x4*xx4*y32
-2*x1*xx2*y1*y2+x1*xx3*y1*y2+x1*xx4*y1*y2-2*x2*xx1*y1*y2+x1*xx2*y1*y3
-2*x1*xx3*y1*y3+x2*xx3*y1*y2+x1*xx4*y1*y3
+x2*xx4*y1*y2-2*x1*xx1*y2*y3+x2*xx1*y1*y3+x3*xx1*y1*y2
+x1*xx2*y1*y4+x1*xx2*y2*y3-2*x2*xx2*y1*y3+x3*xx2*y1*y2
+x1*xx3*y1*y4+x1*xx3*y2*y3+x2*xx3*y1*y3-2*x3*xx3*y1*y2-2*x1*xx4*y1*y4
-2*x1*xx1*y2*y4+x2*xx1*y1*y4+x2*xx1*y2*y3
-2*x3*xx1*y1*y3+x4*xx1*y1*y2+x1*xx2*y2*y4-2*x2*xx2*y1*y4
+x3*xx2*y1*y3+x4*xx2*y1*y2-2*x2*xx3*y2*y3+x1*xx4*y2*y4
+x2*xx4*y1*y4+x2*xx4*y2*y3+x3*xx4*y1*y3-2*x4*xx4*y1*y2-2*x1*xx1*y3*y4
+x2*xx1*y2*y4+x3*xx1*y1*y4+x3*xx1*y2*y3+x4*xx1*y1*y3-2*x3*xx2*y2*y3+x1*xx3*y3*y4
+x2*xx3*y2*y4-2*x3*xx3*y1*y4+x4*xx3*y1*y3+x1*xx4*y3*y4-2*x2*xx4*y2*y4
+x3*xx4*y1*y4+x3*xx4*y2*y3-2*x4*xx4*y1*y3-2*x4*xx1*y1*y4-2*x2*xx2*y3*y4
+x3*xx2*y2*y4+x4*xx2*y1*y4+x4*xx2*y2*y3+x2*xx3*y3*y4-2*x3*xx3*y2*y4+x4*xx3*y1*y4
+x4*xx3*y2*y3+x2*xx4*y3*y4+x3*xx4*y2*y4-2*x4*xx4*y2*y3+x3*xx1*y3*y4
+x4*xx1*y2*y4+x3*xx2*y3*y4-2*x4*xx2*y2*y4+x4*xx3*y2*y4-2*x3*xx4*y3*y4
+x4*xx1*y3*y4+x4*xx2*y3*y4-2*x4*xx3*y3*y4)/(2*(x12*y22-x12*y2*y3
-x12*y2*y4+x12*y32-x12*y3*y4+x12*y42-2*x1*x2*y1*y2+x1*x2*y1*y3
+x1*x2*y1*y4+x1*x2*y2*y3+x1*x2*y2*y4-x1*x2*y32-x1*x2*y42
+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y22+x1*x3*y2*y3+x1*x3*y3*y4
-x1*x3*y42+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y22+x1*x4*y2*y4
-x1*x4*y32+x1*x4*y3*y4+x22*y12-x22*y1*y3
-x22*y1*y4+x22*y32-x22*y3*y4+x22*y42-x2*x3*y12+x2*x3*y1*y2+x2*x3*y1*y3
-2*x2*x3*y2*y3+x2*x3*y2*y4+x2*x3*y3*y4-x2*x3*y42-x2*x4*y12+x2*x4*y1*y2
+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4-x2*x4*y32+x2*x4*y3*y4+x32*y12
-x32*y1*y2-x32*y1*y4+x32*y22-x32*y2*y4+x32*y42-x3*x4*y12+x3*x4*y1*y3
+x3*x4*y1*y4-x3*x4*y22+x3*x4*y2*y3+x3*x4*y2*y4-2*x3*x4*y3*y4+x42*y12
-x42*y1*y2-x42*y1*y3+x42*y22-x42*y2*y3+x42*y32)
a12=(3*x1*xx1*y1^2+3*x1*xx1*y2^2+3*x2*xx2*y1^2+3*x1*xx1*y3^2+3*x2*xx2*y2^2+
3*x3*xx3*y1^2+3*x1*xx1*y4^2+3*x2*xx2*y3^2+3*x3*xx3*y2^2+3*x4*xx4*y1^2+3*x2*xx2*y4^2
+3*x3*xx3*y3^2+3*x4*xx4*y2^2+3*x3*xx3*y4^2+3*x4*xx4*y3^2+3*x4*xx4*y4^2-
3*x1*y1^2*yy1-x1*y2^2*yy1-x2*y1^2*yy2-x1*y2^2*yy3-x2*y1^2*yy3-x1*y2^2*yy4-x2*y1^2*yy4
-x1*y3^2*yy1-x1*y3^2*yy2-3*x2*y2^2*yy2-x3*y1^2*yy2-x3*y1^2*yy3-x1*y3^2*yy4-
x3*y1^2*yy4-x1*y4^2*yy1-x2*y3^2*yy1-x3*y2^2*yy1-x1*y4^2*yy2-x2*y3^2*yy2-x4*y1^2*yy2-
x1*y4^2*yy3-x3*y2^2*yy3-x4*y1^2*yy3-x2*y3^2*yy4-x3*y2^2*yy4-x4*y1^2*yy4-x2*y4^2*yy1-
x4*y2^2*yy1-x2*y4^2*yy2-x2*y4^2*yy3-3*x3*y3^2*yy3-x4*y2^2*yy3-x4*y2^2*yy4-x3*y4^2*yy1
-x4*y3^2*yy1-x3*y4^2*yy2-x4*y3^2*yy2-x3*y4^2*yy3-x4*y3^2*yy4-3*x4*y4^2*yy4-
2*x1*xx1*y1*y2-2*x1*xx1*y1*y3-2*x2*xx2*y1*y2-2*x1*xx1*y1*y4-2*x1*xx1*y2*y3-
2*x2*xx2*y1*y3-2*x3*xx3*y1*y2-2*x1*xx1*y2*y4-2*x2*xx2*y1*y4-2*x2*xx2*y2*y3-
2*x3*xx3*y1*y3-2*x4*xx4*y1*y2-2*x1*xx1*y3*y4-2*x2*xx2*y2*y4-2*x3*xx3*y1*y4-
2*x3*xx3*y2*y3-2*x4*xx4*y1*y3-2*x2*xx2*y3*y4-2*x3*xx3*y2*y4-2*x4*xx4*y1*y4-
2*x4*xx4*y2*y3-2*x3*xx3*y3*y4-2*x4*xx4*y2*y4-2*x4*xx4*y3*y4+2*x1*y1*y2*yy1-
2*x1*y1*y2*yy2+x1*y1*y2*yy3+x1*y1*y2*yy4+2*x1*y1*y3*yy1-2*x2*y1*y2*yy1+x1*y1*y3*yy2
+2*x2*y1*y2*yy2-2*x1*y1*y3*yy3+x2*y1*y2*yy3+x1*y1*y3*yy4+x2*y1*y2*yy4+
2*x1*y1*y4*yy1+x2*y1*y3*yy1+x3*y1*y2*yy1+x1*y1*y4*yy2+x1*y2*y3*yy2+x3*y1*y2*yy2+
x1*y1*y4*yy3+x1*y2*y3*yy3+x2*y1*y3*yy3-2*x1*y1*y4*yy4+x2*y1*y4*yy1+x2*y2*y3*yy1-
2*x3*y1*y3*yy1+x4*y1*y2*yy1+x1*y2*y4*yy2+2*x2*y2*y3*yy2+x3*y1*y3*yy2+x4*y1*y2*yy2-
2*x2*y2*y3*yy3+2*x3*y1*y3*yy3+x1*y2*y4*yy4+x2*y1*y4*yy4+x2*y2*y3*yy4+x3*y1*y3*yy4+
x2*y2*y4*yy1+x3*y1*y4*yy1+x3*y2*y3*yy1+x4*y1*y3*yy1+2*x2*y2*y4*yy2-2*x3*y2*y3*yy2+
x1*y3*y4*yy3+x2*y2*y4*yy3+2*x3*y2*y3*yy3+x4*y1*y3*yy3+x1*y3*y4*yy4-2*x2*y2*y4*yy4+
x3*y1*y4*yy4+x3*y2*y3*yy4-2*x4*y1*y4*yy1+x3*y2*y4*yy2+x4*y1*y4*yy2+x4*y2*y3*yy2+
x2*y3*y4*yy3+x4*y1*y4*yy3+x4*y2*y3*yy3+x2*y3*y4*yy4+x3*y2*y4*yy4+2*x4*y1*y4*yy4+
x3*y3*y4*yy1+x4*y2*y4*yy1+x3*y3*y4*yy2-2*x4*y2*y4*yy2+2*x3*y3*y4*yy3+x4*y2*y4*yy3-
2*x3*y3*y4*yy4+2*x4*y2*y4*yy4+x4*y3*y4*yy1+x4*y3*y4*yy2-2*x4*y3*y4*yy3+
2*x4*y3*y4*yy4)/(2*(x1^2*y2^2-x1^2*y2*y3-x1^2*y2*y4+x1^2*y3^2-x1^2*y3*y4+x1^2*y4^2-
2*x1*x2*y1*y2+x1*x2*y1*y3+x1*x2*y1*y4+x1*x2*y2*y3+x1*x2*y2*y4-x1*x2*y3^2-x1*x2*y4^2
+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y2^2+x1*x3*y2*y3+x1*x3*y3*y4-
x1*x3*y4^2+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y2^2+x1*x4*y2*y4-x1*x4*y3^2+
x1*x4*y3*y4+x2^2*y1^2-x2^2*y1*y3-x2^2*y1*y4+x2^2*y3^2-x2^2*y3*y4+x2^2*y4^2-
x2*x3*y1^2+x2*x3*y1*y2+x2*x3*y1*y3-2*x2*x3*y2*y3+x2*x3*y2*y4+x2*x3*y3*y4-x2*x3*y4^2
-x2*x4*y1^2+x2*x4*y1*y2+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4-x2*x4*y3^2+
x2*x4*y3*y4+x3^2*y1^2-x3^2*y1*y2-x3^2*y1*y4+x3^2*y2^2-x3^2*y2*y4+x3^2*y4^2-
x3*x4*y1^2+x3*x4*y1*y3+x3*x4*y1*y4-x3*x4*y2^2+x3*x4*y2*y3+x3*x4*y2*y4-2*x3*x4*y3*y4
+x4^2*y1^2-x4^2*y1*y2-x4^2*y1*y3+x4^2*y2^2-x4^2*y2*y3+x4^2*y3^2));
a13=0;
a21=(2*x2^2*xx1*y1+2*x1^2*xx2*y2-x1^2*xx3*y2-x2^2*xx3*y1-x1^2*xx4*y2-x2^2*xx4*y1+
2*x3^2*xx1*y1-x1^2*xx2*y3-x3^2*xx2*y1+2*x1^2*xx3*y3-x1^2*xx4*y3-x3^2*xx4*y1-
x2^2*xx1*y3-x3^2*xx1*y2+2*x4^2*xx1*y1-x1^2*xx2*y4+2*x3^2*xx2*y2-x4^2*xx2*y1-
x1^2*xx3*y4+2*x2^2*xx3*y3-x4^2*xx3*y1+2*x1^2*xx4*y4-x2^2*xx4*y3-x3^2*xx4*y2-
x2^2*xx1*y4-x4^2*xx1*y2+2*x4^2*xx2*y2-x2^2*xx3*y4-x4^2*xx3*y2+2*x2^2*xx4*y4-
x3^2*xx1*y4-x4^2*xx1*y3-x3^2*xx2*y4-x4^2*xx2*y3+2*x4^2*xx3*y3+2*x3^2*xx4*y4-
2*x1*x2*xx2*y1+x1*x2*xx3*y1+x1*x2*xx4*y1-2*x1*x2*xx1*y2+x1*x3*xx2*y1+x1*x2*xx3*y2-
2*x1*x3*xx3*y1+x1*x2*xx4*y2+x1*x3*xx4*y1+x1*x2*xx1*y3+x1*x3*xx1*y2-2*x2*x3*xx1*y1+
x1*x2*xx2*y3-2*x1*x3*xx2*y2+x1*x4*xx2*y1+x2*x3*xx2*y1-2*x1*x2*xx3*y3+x1*x3*xx3*y2+
x1*x4*xx3*y1+x2*x3*xx3*y1-2*x1*x4*xx4*y1+x1*x2*xx1*y4-2*x1*x3*xx1*y3+x1*x4*xx1*y2+
x2*x3*xx1*y2-2*x2*x4*xx1*y1+x1*x2*xx2*y4+x1*x3*xx2*y3-2*x1*x4*xx2*y2+x2*x4*xx2*y1-
2*x2*x3*xx3*y2-2*x1*x2*xx4*y4+x1*x3*xx4*y3+x1*x4*xx4*y2+x2*x3*xx4*y2+x2*x4*xx4*y1+
x1*x3*xx1*y4+x1*x4*xx1*y3+x2*x3*xx1*y3+x2*x4*xx1*y2-2*x3*x4*xx1*y1-2*x2*x3*xx2*y3+
x1*x3*xx3*y4-2*x1*x4*xx3*y3+x2*x4*xx3*y2+x3*x4*xx3*y1-2*x1*x3*xx4*y4+x1*x4*xx4*y3+
x2*x3*xx4*y3-2*x2*x4*xx4*y2+x3*x4*xx4*y1-2*x1*x4*xx1*y4+x1*x4*xx2*y4+x2*x3*xx2*y4+
x2*x4*xx2*y3-2*x3*x4*xx2*y2+x1*x4*xx3*y4+x2*x3*xx3*y4-2*x2*x4*xx3*y3+x3*x4*xx3*y2-
2*x2*x3*xx4*y4+x2*x4*xx4*y3+x3*x4*xx4*y2+x2*x4*xx1*y4+x3*x4*xx1*y3-2*x2*x4*xx2*y4+
x3*x4*xx2*y3+x2*x4*xx3*y4-2*x3*x4*xx4*y3+x3*x4*xx1*y4+x3*x4*xx2*y4-
2*x3*x4*xx3*y4)/(2*(x1^2*y2^2-x1^2*y2*y3-x1^2*y2*y4+x1^2*y3^2-x1^2*y3*y4+x1^2*y4^2-
2*x1*x2*y1*y2+x1*x2*y1*y3+x1*x2*y1*y4+x1*x2*y2*y3+x1*x2*y2*y4-x1*x2*y3^2-x1*x2*y4^2
+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y2^2+x1*x3*y2*y3+x1*x3*y3*y4-
x1*x3*y4^2+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y2^2+x1*x4*y2*y4-x1*x4*y3^2+
x1*x4*y3*y4+x2^2*y1^2-x2^2*y1*y3-x2^2*y1*y4+x2^2*y3^2-x2^2*y3*y4+x2^2*y4^2-
x2*x3*y1^2+x2*x3*y1*y2+x2*x3*y1*y3-2*x2*x3*y2*y3+x2*x3*y2*y4+x2*x3*y3*y4-x2*x3*y4^2
-x2*x4*y1^2+x2*x4*y1*y2+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4-x2*x4*y3^2+
x2*x4*y3*y4+x3^2*y1^2-x3^2*y1*y2-x3^2*y1*y4+x3^2*y2^2-x3^2*y2*y4+x3^2*y4^2-
x3*x4*y1^2+x3*x4*y1*y3+x3*x4*y1*y4-x3*x4*y2^2+x3*x4*y2*y3+x3*x4*y2*y4-2*x3*x4*y3*y4
+x4^2*y1^2-x4^2*y1*y2-x4^2*y1*y3+x4^2*y2^2-x4^2*y2*y3+x4^2*y3^2))
a22=(x1^2*xx1*y2-3*x1^2*xx1*y1+x2^2*xx2*y1+x1^2*xx1*y3-3*x2^2*xx2*y2+x3^2*xx3*y1+
x1^2*xx1*y4+x2^2*xx2*y3+x3^2*xx3*y2+x4^2*xx4*y1+x2^2*xx2*y4-3*x3^2*xx3*y3+
x4^2*xx4*y2+x3^2*xx3*y4+x4^2*xx4*y3-3*x4^2*xx4*y4+3*x1^2*y1*yy1-x1^2*y2*yy1+
2*x2^2*y1*yy1+2*x1^2*y2*yy2-x2^2*y1*yy2-x1^2*y2*yy3-x2^2*y1*yy3-x1^2*y2*yy4-
x2^2*y1*yy4-x1^2*y3*yy1+2*x3^2*y1*yy1-x1^2*y3*yy2+3*x2^2*y2*yy2-x3^2*y1*yy2+
2*x1^2*y3*yy3-x3^2*y1*yy3-x1^2*y3*yy4-x3^2*y1*yy4-x1^2*y4*yy1-x2^2*y3*yy1-x3^2*y2*yy1
+2*x4^2*y1*yy1-x1^2*y4*yy2-x2^2*y3*yy2+2*x3^2*y2*yy2-x4^2*y1*yy2-x1^2*y4*yy3+
2*x2^2*y3*yy3-x3^2*y2*yy3-x4^2*y1*yy3+2*x1^2*y4*yy4-x2^2*y3*yy4-x3^2*y2*yy4-
x4^2*y1*yy4-x2^2*y4*yy1-x4^2*y2*yy1-x2^2*y4*yy2+2*x4^2*y2*yy2-x2^2*y4*yy3+
3*x3^2*y3*yy3-x4^2*y2*yy3+2*x2^2*y4*yy4-x4^2*y2*yy4-x3^2*y4*yy1-x4^2*y3*yy1-
x3^2*y4*yy2-x4^2*y3*yy2-x3^2*y4*yy3+2*x4^2*y3*yy3+2*x3^2*y4*yy4-x4^2*y3*yy4+
3*x4^2*y4*yy4+x1*x2*xx1*y1-3*x1*x2*xx2*y1-3*x1*x2*xx1*y2+x1*x3*xx1*y1+x1*x2*xx2*y2-
3*x1*x3*xx3*y1+x1*x2*xx1*y3+x1*x3*xx1*y2+x1*x4*xx1*y1+x1*x2*xx2*y3+x2*x3*xx2*y1+
x1*x3*xx3*y2+x2*x3*xx3*y1-3*x1*x4*xx4*y1+x1*x2*xx1*y4-3*x1*x3*xx1*y3+x1*x4*xx1*y2+
x1*x2*xx2*y4+x2*x3*xx2*y2+x2*x4*xx2*y1+x1*x3*xx3*y3-3*x2*x3*xx3*y2+x1*x4*xx4*y2+
x2*x4*xx4*y1+x1*x3*xx1*y4+x1*x4*xx1*y3-3*x2*x3*xx2*y3+x2*x4*xx2*y2+x1*x3*xx3*y4+
x2*x3*xx3*y3+x3*x4*xx3*y1+x1*x4*xx4*y3-3*x2*x4*xx4*y2+x3*x4*xx4*y1-3*x1*x4*xx1*y4+
x2*x3*xx2*y4+x2*x4*xx2*y3+x2*x3*xx3*y4+x3*x4*xx3*y2+x1*x4*xx4*y4+x2*x4*xx4*y3+
x3*x4*xx4*y2-3*x2*x4*xx2*y4+x3*x4*xx3*y3+x2*x4*xx4*y4-3*x3*x4*xx4*y3-3*x3*x4*xx3*y4+
x3*x4*xx4*y4-x1*x2*y1*yy1+x1*x2*y1*yy2+x1*x2*y1*yy3+x1*x2*y1*yy4+x1*x2*y2*yy1-
x1*x3*y1*yy1-x1*x2*y2*yy2+x1*x3*y1*yy2+x1*x2*y2*yy3+x1*x3*y1*yy3+x1*x2*y2*yy4+
x1*x3*y1*yy4-x1*x4*y1*yy1-2*x2*x3*y1*yy1-2*x1*x3*y2*yy2+x1*x4*y1*yy2-2*x1*x2*y3*yy3+
x1*x4*y1*yy3+x1*x4*y1*yy4+x1*x3*y3*yy1+x2*x3*y2*yy1-2*x2*x4*y1*yy1+x1*x3*y3*yy2-
2*x1*x4*y2*yy2-x2*x3*y2*yy2-x1*x3*y3*yy3+x2*x3*y2*yy3-2*x1*x2*y4*yy4+x1*x3*y3*yy4+
x2*x3*y2*yy4+x2*x3*y3*yy1+x2*x4*y2*yy1-2*x3*x4*y1*yy1+x2*x3*y3*yy2-x2*x4*y2*yy2-
2*x1*x4*y3*yy3-x2*x3*y3*yy3+x2*x4*y2*yy3-2*x1*x3*y4*yy4+x2*x3*y3*yy4+x2*x4*y2*yy4+
x1*x4*y4*yy1+x1*x4*y4*yy2-2*x3*x4*y2*yy2+x1*x4*y4*yy3-2*x2*x4*y3*yy3-x1*x4*y4*yy4-
2*x2*x3*y4*yy4+x2*x4*y4*yy1+x3*x4*y3*yy1+x2*x4*y4*yy2+x3*x4*y3*yy2+x2*x4*y4*yy3-
x3*x4*y3*yy3-x2*x4*y4*yy4+x3*x4*y3*yy4+x3*x4*y4*yy1+x3*x4*y4*yy2+x3*x4*y4*yy3-
x3*x4*y4*yy4)/(2*(x1^2*y2^2-x1^2*y2*y3-x1^2*y2*y4+x1^2*y3^2-x1^2*y3*y4+x1^2*y4^2-
2*x1*x2*y1*y2+x1*x2*y1*y3+x1*x2*y1*y4+x1*x2*y2*y3+x1*x2*y2*y4-x1*x2*y3^2-x1*x2*y4^2
+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y2^2+x1*x3*y2*y3+x1*x3*y3*y4-
x1*x3*y4^2+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y2^2+x1*x4*y2*y4-x1*x4*y3^2+
x1*x4*y3*y4+x2^2*y1^2-x2^2*y1*y3-x2^2*y1*y4+x2^2*y3^2-x2^2*y3*y4+x2^2*y4^2-
x2*x3*y1^2+x2*x3*y1*y2+x2*x3*y1*y3-2*x2*x3*y2*y3+x2*x3*y2*y4+x2*x3*y3*y4-x2*x3*y4^2
-x2*x4*y1^2+x2*x4*y1*y2+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4-x2*x4*y3^2+
x2*x4*y3*y4+x3^2*y1^2-x3^2*y1*y2-x3^2*y1*y4+x3^2*y2^2-x3^2*y2*y4+x3^2*y4^2-
x3*x4*y1^2+x3*x4*y1*y3+x3*x4*y1*y4-x3*x4*y2^2+x3*x4*y2*y3+x3*x4*y2*y4-2*x3*x4*y3*y4
+x4^2*y1^2-x4^2*y1*y2-x4^2*y1*y3+x4^2*y2^2-x4^2*y2*y3+x4^2*y3^2));
a23=0;
a31=(x1^2*xx3*y2^2+x2^2*xx3*y1^2+x1^2*xx4*y2^2+x2^2*xx4*y1^2+x1^2*xx2*y3^2+
x3^2*xx2*y1^2+x1^2*xx4*y3^2+x3^2*xx4*y1^2+x2^2*xx1*y3^2+x3^2*xx1*y2^2+x1^2*xx2*y4^2
+x4^2*xx2*y1^2+x1^2*xx3*y4^2+x4^2*xx3*y1^2+x2^2*xx4*y3^2+x3^2*xx4*y2^2+
x2^2*xx1*y4^2+x4^2*xx1*y2^2+x2^2*xx3*y4^2+x4^2*xx3*y2^2+x3^2*xx1*y4^2+x4^2*xx1*y3^2
+x3^2*xx2*y4^2+x4^2*xx2*y3^2-x1*x2*xx1*y3^2-x1*x3*xx1*y2^2-x1*x2*xx2*y3^2-
x2*x3*xx2*y1^2-x1*x3*xx3*y2^2-x2*x3*xx3*y1^2-x1*x2*xx1*y4^2-x1*x4*xx1*y2^2-
x1*x2*xx2*y4^2-x2*x4*xx2*y1^2-x1*x4*xx4*y2^2-x2*x4*xx4*y1^2-x1*x3*xx1*y4^2-
x1*x4*xx1*y3^2-x1*x3*xx3*y4^2-x3*x4*xx3*y1^2-x1*x4*xx4*y3^2-x3*x4*xx4*y1^2-
x2*x3*xx2*y4^2-x2*x4*xx2*y3^2-x2*x3*xx3*y4^2-x3*x4*xx3*y2^2-x2*x4*xx4*y3^2-
x3*x4*xx4*y2^2-x2^2*xx1*y1*y3-x3^2*xx1*y1*y2-x1^2*xx2*y2*y3-x3^2*xx2*y1*y2-
x1^2*xx3*y2*y3-x2^2*xx3*y1*y3-x2^2*xx1*y1*y4-x4^2*xx1*y1*y2-x1^2*xx2*y2*y4-
x4^2*xx2*y1*y2-x1^2*xx4*y2*y4-x2^2*xx4*y1*y4-x3^2*xx1*y1*y4-x4^2*xx1*y1*y3-
x1^2*xx3*y3*y4-x4^2*xx3*y1*y3-x1^2*xx4*y3*y4-x3^2*xx4*y1*y4-x3^2*xx2*y2*y4-
x4^2*xx2*y2*y3-x2^2*xx3*y3*y4-x4^2*xx3*y2*y3-x2^2*xx4*y3*y4-x3^2*xx4*y2*y4-
2*x1*x2*xx3*y1*y2-2*x1*x2*xx4*y1*y2+x1*x2*xx2*y1*y3+x1*x3*xx2*y1*y2+x1*x2*xx3*y1*y3+
x1*x3*xx3*y1*y2+x1*x2*xx1*y2*y3+x2*x3*xx1*y1*y2+x1*x2*xx2*y1*y4-2*x1*x3*xx2*y1*y3+
x1*x4*xx2*y1*y2+x1*x2*xx3*y2*y3+x2*x3*xx3*y1*y2+x1*x2*xx4*y1*y4-2*x1*x3*xx4*y1*y3+
x1*x4*xx4*y1*y2+x1*x2*xx1*y2*y4+x1*x3*xx1*y2*y3+x2*x3*xx1*y1*y3+x2*x4*xx1*y1*y2+
x1*x3*xx2*y2*y3+x2*x3*xx2*y1*y3+x1*x3*xx3*y1*y4+x1*x4*xx3*y1*y3+x1*x2*xx4*y2*y4+
x1*x3*xx4*y1*y4+x1*x4*xx4*y1*y3+x2*x4*xx4*y1*y2-2*x2*x3*xx1*y2*y3-2*x1*x4*xx2*y1*y4-
2*x1*x4*xx3*y1*y4-2*x2*x3*xx4*y2*y3+x1*x3*xx1*y3*y4+x1*x4*xx1*y2*y4+x2*x4*xx1*y1*y4+
x3*x4*xx1*y1*y3+x1*x4*xx2*y2*y4+x2*x4*xx2*y1*y4+x2*x3*xx3*y2*y4+x2*x4*xx3*y2*y3+
x1*x3*xx4*y3*y4+x2*x3*xx4*y2*y4+x2*x4*xx4*y2*y3+x3*x4*xx4*y1*y3+x1*x4*xx1*y3*y4-
2*x2*x4*xx1*y2*y4+x3*x4*xx1*y1*y4+x2*x3*xx2*y3*y4+x3*x4*xx2*y2*y3+x1*x4*xx3*y3*y4-
2*x2*x4*xx3*y2*y4+x3*x4*xx3*y1*y4+x2*x3*xx4*y3*y4+x3*x4*xx4*y2*y3+x2*x4*xx2*y3*y4+
x3*x4*xx2*y2*y4+x2*x4*xx3*y3*y4+x3*x4*xx3*y2*y4-2*x3*x4*xx1*y3*y4-
2*x3*x4*xx2*y3*y4)/(2*(x1^2*y2^2-x1^2*y2*y3-x1^2*y2*y4+x1^2*y3^2-x1^2*y3*y4+x1^2*y4^2-
2*x1*x2*y1*y2+x1*x2*y1*y3+x1*x2*y1*y4+x1*x2*y2*y3+x1*x2*y2*y4-x1*x2*y3^2-x1*x2*y4^2
+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y2^2+x1*x3*y2*y3+x1*x3*y3*y4-
x1*x3*y4^2+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y2^2+x1*x4*y2*y4-x1*x4*y3^2+
x1*x4*y3*y4+x2^2*y1^2-x2^2*y1*y3-x2^2*y1*y4+x2^2*y3^2-x2^2*y3*y4+x2^2*y4^2-
x2*x3*y1^2+x2*x3*y1*y2+x2*x3*y1*y3-2*x2*x3*y2*y3+x2*x3*y2*y4+x2*x3*y3*y4-x2*x3*y4^2
-x2*x4*y1^2+x2*x4*y1*y2+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4-x2*x4*y3^2+
x2*x4*y3*y4+x3^2*y1^2-x3^2*y1*y2-x3^2*y1*y4+x3^2*y2^2-x3^2*y2*y4+x3^2*y4^2-
x3*x4*y1^2+x3*x4*y1*y3+x3*x4*y1*y4-x3*x4*y2^2+x3*x4*y2*y3+x3*x4*y2*y4-2*x3*x4*y3*y4
+x4^2*y1^2-x4^2*y1*y2-x4^2*y1*y3+x4^2*y2^2-x4^2*y2*y3+x4^2*y3^2));
a32=(x1^2*y2^2*yy1-x2^2*xx2*y1^2-x1^2*xx1*y3^2-x3^2*xx3*y1^2-x1^2*xx1*y4^2-
x2^2*xx2*y3^2-x3^2*xx3*y2^2-x4^2*xx4*y1^2-x2^2*xx2*y4^2-x4^2*xx4*y2^2-x3^2*xx3*y4^2-
x4^2*xx4*y3^2-x1^2*xx1*y2^2+x2^2*y1^2*yy2+x1^2*y2^2*yy3+x2^2*y1^2*yy3+x1^2*y2^2*yy4+
x2^2*y1^2*yy4+x1^2*y3^2*yy1+x1^2*y3^2*yy2+x3^2*y1^2*yy2+x3^2*y1^2*yy3+x1^2*y3^2*yy4
+x3^2*y1^2*yy4+x1^2*y4^2*yy1+x2^2*y3^2*yy1+x3^2*y2^2*yy1+x1^2*y4^2*yy2+
x2^2*y3^2*yy2+x4^2*y1^2*yy2+x1^2*y4^2*yy3+x3^2*y2^2*yy3+x4^2*y1^2*yy3+x2^2*y3^2*yy4
+x3^2*y2^2*yy4+x4^2*y1^2*yy4+x2^2*y4^2*yy1+x4^2*y2^2*yy1+x2^2*y4^2*yy2+
x2^2*y4^2*yy3+x4^2*y2^2*yy3+x4^2*y2^2*yy4+x3^2*y4^2*yy1+x4^2*y3^2*yy1+x3^2*y4^2*yy2
+x4^2*y3^2*yy2+x3^2*y4^2*yy3+x4^2*y3^2*yy4-x1*x2*xx1*y1^2-x1*x3*xx1*y1^2-
x1*x2*xx2*y2^2-x1*x2*xx1*y3^2-x1*x3*xx1*y2^2-x1*x4*xx1*y1^2-x1*x2*xx2*y3^2-
x2*x3*xx2*y1^2-x1*x3*xx3*y2^2-x2*x3*xx3*y1^2-x1*x2*xx1*y4^2-x1*x4*xx1*y2^2-
x1*x2*xx2*y4^2-x2*x3*xx2*y2^2-x2*x4*xx2*y1^2-x1*x3*xx3*y3^2-x1*x4*xx4*y2^2-
x2*x4*xx4*y1^2-x1*x3*xx1*y4^2-x1*x4*xx1*y3^2-x2*x4*xx2*y2^2-x1*x3*xx3*y4^2-
x2*x3*xx3*y3^2-x3*x4*xx3*y1^2-x1*x4*xx4*y3^2-x3*x4*xx4*y1^2-x2*x3*xx2*y4^2-
x2*x4*xx2*y3^2-x2*x3*xx3*y4^2-x3*x4*xx3*y2^2-x1*x4*xx4*y4^2-x2*x4*xx4*y3^2-
x3*x4*xx4*y2^2-x3*x4*xx3*y3^2-x2*x4*xx4*y4^2-x3*x4*xx4*y4^2+x1^2*xx1*y1*y2+
x1*x2*y1^2*yy1+x1^2*xx1*y1*y3+x2^2*xx2*y1*y2+x1*x3*y1^2*yy1+x1^2*xx1*y1*y4+
x1*x2*y2^2*yy2+x1*x4*y1^2*yy1+x2^2*xx2*y2*y3+x3^2*xx3*y1*y3+x2*x3*y2^2*yy2+
x2^2*xx2*y2*y4+x1*x3*y3^2*yy3+x3^2*xx3*y2*y3+x2*x4*y2^2*yy2+x2*x3*y3^2*yy3+
x4^2*xx4*y1*y4+x3^2*xx3*y3*y4+x1*x4*y4^2*yy4+x4^2*xx4*y2*y4+x3*x4*y3^2*yy3+
x2*x4*y4^2*yy4+x4^2*xx4*y3*y4+x3*x4*y4^2*yy4-x1^2*y1*y2*yy1-x1^2*y1*y3*yy1-
x2^2*y1*y2*yy2-x1^2*y1*y4*yy1-x2^2*y1*y3*yy1-x3^2*y1*y2*yy1-x1^2*y2*y3*yy2-
x3^2*y1*y2*yy2-x1^2*y2*y3*yy3-x2^2*y1*y3*yy3-x2^2*y1*y4*yy1-x4^2*y1*y2*yy1-
x1^2*y2*y4*yy2-x2^2*y2*y3*yy2-x4^2*y1*y2*yy2-x3^2*y1*y3*yy3-x1^2*y2*y4*yy4-
x2^2*y1*y4*yy4-x3^2*y1*y4*yy1-x4^2*y1*y3*yy1-x2^2*y2*y4*yy2-x1^2*y3*y4*yy3-
x3^2*y2*y3*yy3-x4^2*y1*y3*yy3-x1^2*y3*y4*yy4-x3^2*y1*y4*yy4-x3^2*y2*y4*yy2-
x4^2*y2*y3*yy2-x2^2*y3*y4*yy3-x4^2*y2*y3*yy3-x2^2*y3*y4*yy4-x3^2*y2*y4*yy4-
x4^2*y1*y4*yy4-x3^2*y3*y4*yy3-x4^2*y2*y4*yy4-x4^2*y3*y4*yy4+x1*x2*xx1*y1*y2+
x1*x2*xx2*y1*y2+x1*x2*xx2*y1*y3+x1*x3*xx3*y1*y2+x1*x2*xx1*y2*y3+x1*x3*xx1*y1*y3+
x1*x2*xx2*y1*y4+x1*x3*xx3*y1*y3+x2*x3*xx3*y1*y2+x1*x4*xx4*y1*y2+x1*x2*xx1*y2*y4+
x1*x3*xx1*y2*y3+x2*x3*xx2*y1*y3+x1*x3*xx3*y1*y4+x1*x4*xx4*y1*y3+x2*x4*xx4*y1*y2+
x1*x4*xx1*y1*y4+x2*x3*xx2*y2*y3+x2*x3*xx3*y2*y3+x1*x4*xx4*y1*y4+x1*x3*xx1*y3*y4+
x1*x4*xx1*y2*y4+x2*x4*xx2*y1*y4+x2*x3*xx3*y2*y4+x2*x4*xx4*y2*y3+x3*x4*xx4*y1*y3+
x1*x4*xx1*y3*y4+x2*x3*xx2*y3*y4+x2*x4*xx2*y2*y4+x3*x4*xx3*y1*y4+x2*x4*xx4*y2*y4+
x3*x4*xx4*y2*y3+x2*x4*xx2*y3*y4+x3*x4*xx3*y2*y4+x3*x4*xx3*y3*y4+x3*x4*xx4*y3*y4-
x1*x2*y1*y2*yy1-x1*x2*y1*y2*yy2-2*x1*x2*y1*y2*yy3-2*x1*x2*y1*y2*yy4+x1*x3*y1*y2*yy2+
x1*x2*y1*y3*yy3-x1*x3*y1*y3*yy1+x2*x3*y1*y2*yy1-2*x1*x3*y1*y3*yy2+x1*x4*y1*y2*yy2+
x1*x2*y2*y3*yy3-x1*x3*y1*y3*yy3+x1*x2*y1*y4*yy4-2*x1*x3*y1*y3*yy4+x2*x3*y1*y3*yy1+
x2*x4*y1*y2*yy1+x1*x3*y2*y3*yy2+x1*x4*y1*y3*yy3+x1*x2*y2*y4*yy4+x1*x3*y1*y4*yy4-
x1*x4*y1*y4*yy1-2*x2*x3*y2*y3*yy1-2*x1*x4*y1*y4*yy2-x2*x3*y2*y3*yy2-2*x1*x4*y1*y4*yy3-
x2*x3*y2*y3*yy3-x1*x4*y1*y4*yy4-2*x2*x3*y2*y3*yy4+x2*x4*y1*y4*yy1+x3*x4*y1*y3*yy1+
x1*x4*y2*y4*yy2+x2*x4*y2*y3*yy3+x1*x3*y3*y4*yy4+x2*x3*y2*y4*yy4-2*x2*x4*y2*y4*yy1+
x3*x4*y1*y4*yy1-x2*x4*y2*y4*yy2+x3*x4*y2*y3*yy2+x1*x4*y3*y4*yy3-2*x2*x4*y2*y4*yy3+
x2*x3*y3*y4*yy4-x2*x4*y2*y4*yy4+x3*x4*y2*y4*yy2+x2*x4*y3*y4*yy3-2*x3*x4*y3*y4*yy1-
2*x3*x4*y3*y4*yy2-x3*x4*y3*y4*yy3-x3*x4*y3*y4*yy4)/(2*(x1^2*y2^2-x1^2*y2*y3-x1^2*y2*y4+
x1^2*y3^2-x1^2*y3*y4+x1^2*y4^2-2*x1*x2*y1*y2+x1*x2*y1*y3+x1*x2*y1*y4+x1*x2*y2*y3+
x1*x2*y2*y4-x1*x2*y3^2-x1*x2*y4^2+x1*x3*y1*y2-2*x1*x3*y1*y3+x1*x3*y1*y4-x1*x3*y2^2+
x1*x3*y2*y3+x1*x3*y3*y4-x1*x3*y4^2+x1*x4*y1*y2+x1*x4*y1*y3-2*x1*x4*y1*y4-x1*x4*y2^2
+x1*x4*y2*y4-x1*x4*y3^2+x1*x4*y3*y4+x2^2*y1^2-x2^2*y1*y3-x2^2*y1*y4+x2^2*y3^2-
x2^2*y3*y4+x2^2*y4^2-x2*x3*y1^2+x2*x3*y1*y2+x2*x3*y1*y3-2*x2*x3*y2*y3+x2*x3*y2*y4+
x2*x3*y3*y4-x2*x3*y4^2-x2*x4*y1^2+x2*x4*y1*y2+x2*x4*y1*y4+x2*x4*y2*y3-2*x2*x4*y2*y4
-x2*x4*y3^2+x2*x4*y3*y4+x3^2*y1^2-x3^2*y1*y2-x3^2*y1*y4+x3^2*y2^2-x3^2*y2*y4+
x3^2*y4^2-x3*x4*y1^2+x3*x4*y1*y3+x3*x4*y1*y4-x3*x4*y2^2+x3*x4*y2*y3+x3*x4*y2*y4-
2*x3*x4*y3*y4+x4^2*y1^2-x4^2*y1*y2-x4^2*y1*y3+x4^2*y2^2-x4^2*y2*y3+x4^2*y3^2));
a33=1。
在获得上述9个矩阵元之后,即得到了转换矩阵的值。需要说明的是,上述的求解是通过最小二乘法获得的,本领域的技术人员也可以通过其他的最小值求解方式来获得转换矩阵,例如数值分析、多项式拟合等,只要第一坐标经过转换矩阵转换后与第二坐标的偏差尽量小即可。
此后,就可以实现正常的笔迹位置校正:按步骤S4输出校正点,使得校正后的显示笔迹与书写时的触点重合。设书画笔进行书写时,输入点的坐标为(X,Y),校正点的坐标位置为(x',y'),根据 求得校正点坐标;其中Δ为归一化参数。通过输出(x',y'),投影的笔迹点将会与笔尖的位置最为接近,从而改善了因书写效果不一致带来的不便。
需要说明的是,在上述的实施例中采用3×3的矩阵作为转换矩阵进行校准是为了将校准的精度尽可能的提高;也可以采用2×2、4×4的矩阵进行转换,其效果仅在转换的精度上有所区别。
为了更清楚的说明本发明的步骤与效果,现结合图4和图5说明在投影屏100的操作过程。如图4所示为校正阶段的投影屏100的示意图,即完成步骤S1和S2后的效果图。投影仪200投影主控系统400的特制画面至投影屏幕100,特制画面特征如下:四个顶角附近标有四个小矩形,四个小矩形颜色相同,其余区域颜色相同,小矩形区域与非小矩形区域颜色不同;选择四个小矩形的中心点位置,即P1、P2、P3和P4。在校正之前,用书画笔依次点击小矩形区域,显示的点P'1、P'2、P'3和P'4将会与上面的4个点存在偏差而不是重合。若此时直接进行书写,就会出现书写位置与显示位置不一致的问题,无法达到真实书写的体验。
而经过校正之后,则可以实现笔迹的校准,完成步骤S3、S4后的效果如图5所示,在投影屏100的中间区域进行书写,例如书写一个单点C1作为输入点,经过校准后的校正点C2将会与C1重合。即:将图2中投影点102移动到触点101的位置上。当使用者正常书写的时候,构成文字的每一个像素都会经过校正,因此获得的数字书画笔迹将与实际的书写轨迹重合,与真实书写的效果相一致。
本发明还提供了如图6所示的数字书画笔迹校准系统,该系统在图1的书画系统上进行改进,具体包括:第一坐标采集模块,用于在图1所示的投影仪200投影主控系统400的特制画面至投影屏幕100,特制画面特征如下:四个顶角附近标有四个小矩形,四个小矩形颜色相同,其余区域颜色相同,小矩形区域与非小矩形区域颜色不同;选择四个小矩形的中心点位置,记为第一坐标位置。较佳的,第一坐标采集模块集成在主控系统400上,针对需投影的画面,预先标定4个顶角附近的小矩形区域,这四个小矩形区域的中心位置分别为:
右下:投影屏100是像素尺寸为SW×SH的矩形,1/k为比例系数,值越大,四个小矩形越靠近中心;值越小,四个小矩形越靠近四个角落。
然后通过第二坐标采集模块,书画笔600按顺序依次点击投影画面上的四个小矩形,利用摄像头300拍摄投影屏幕100,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置。较佳的,第二坐标采集模块集成在红外接收摄像头300上,通过书画笔在投影画面上依次点击,采集得到4个坐标位置。第二坐标采集模块将采集得到的4个点的坐标发送到主控系统400中。
在主控系统400中集成了一个坐标转换模块,用于根据第一坐标位置和第二坐标位置确定转换矩阵,其中第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积。即:
显然,当显示点与触点的位置是一一对应的时候,所有的矩阵元等于1。
坐标转换模块将4对点的坐标分别代入到上面的公式中,进行求解。一般的,对于每一对第一坐标和第二坐标,都会有一个矩阵使其实现精确的转换,而这些矩阵之间并不是完全的相等,为了使用1个通用的矩阵实现所有位置的转换,在本实施例中通过最小二乘法得到矩阵的9个矩阵元的值,使得获得的转换矩阵对于所有点的转换产生的总偏差最小。
当得到转换矩阵之后,就可以实现笔迹的实时校正:在主控系统400中保存好前面步骤中得到的转换矩阵,每当接收到书画笔的输入信号,立刻将其坐标与转换矩阵相乘,并输出,从而实现实时校正。在投影机200上集成了校正点输出模块,用于输出校正点。校正点的坐标为(x',y'),该坐标与对应的输入点坐标(X,Y)关系为: 其中Δ为归一化参数。即,当书画笔600在投影屏100上进行书写的时候,红外摄像头300实时接收书画笔笔尖位置(X,Y)信号,主控系统400将其转换为投影仪200的投影坐标(x',y')进行投影。
采用本发明的数字书画笔迹校准系统,能够将投影机200与红外接收摄像头300之间的坐标差异消除,使得数字书画系统在工作的时候对于同一个书写位置的探测接收与投影显示的位置相一致;经过转换矩阵的转换,实际投影点将会与实时书写位置最大程度的接近,从而克服了因为书写位置与显示位置不一致而带来的书写困难。
以上仅为本发明具体实施方式,不能以此来限定本发明的范围,本技术领域内的一般技术人员根据本创作所作的均等变化,以及本领域内技术人员熟知的改变,都应仍属本发明涵盖的范围。
Claims (8)
1.一种数字书画笔迹校准方法,其特征在于,包括以下的步骤:
S1、投影仪投影主控系统的画面至投影屏幕,所述投影的画面包括多个子画面,记录所述子画面的中心点为第一坐标;
S2、利用发光笔依次选择子画面,同时利用摄像头拍摄投影屏幕,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置;
S3、根据所述第一坐标位置和第二坐标位置确定转换矩阵,所述第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积;
S4、摄像头接收投影屏上书画笔的输入点,主控系统在所摄图像上获取输入点的对应坐标,并将输入点的对应坐标与转换矩阵相乘后得到校正点坐标,输出校正点。
2.根据权利要求1所述的数字书画笔迹校准方法,其特征在于,所述步骤S1包括:
在投影画面的4个顶角区域选择4个矩形区域作为子画面,在每个所述矩形区域中选择一个测试点;所述矩形区域的长度和宽度分别为投影画面长度和宽度的1/k;4≤k≤16。
3.根据权利要求1所述的数字书画笔迹校准方法,其特征在于,所述第一坐标位置为(xx,yy),所述第二坐标位置为(x,y),所述转换矩阵为 ,且
4.根据权利要求3所述的数字书画笔迹校准方法,其特征在于,还包括:S4、输出校正点;输入点坐标为(X,Y),校正点的坐标位置为(x',y'),根据 求得校正点坐标,其中Δ为归一化参数。
5.一种数字书画笔迹校准系统,其特征在于,包括:
第一坐标采集模块,用于在投影仪投影主控系统的画面至投影屏幕,所述投影的画面包括多个子画面,记录所述子画面的中心点为第一坐标;
第二坐标采集模块,利用发光笔依次选择子画面,同时利用摄像头拍摄投影屏幕,获取书画笔笔尖在所摄图像上的对应位置,记为第二坐标位置;
坐标转换模块,用于根据第一坐标位置和第二坐标位置确定转换矩阵,其中第一坐标位置的坐标矩阵等于第二坐标位置的坐标矩阵与转换矩阵的乘积;
校正点输出模块,用于通过摄像头接收投影屏上书画笔的输入点,主控系统在所摄图像上获取输入点的对应坐标,并将输入点的对应坐标与转换矩阵相乘后得到校正点坐标,输出校正点;
所述第一坐标采集模块、第二坐标采集模块和校正点输出模块分别与所述坐标转换模块通信连接。
6.根据权利要求5所述的数字书画笔迹校准系统,其特征在于,所述第一坐标采集模块在投影画面的4个顶角区域选择4个矩形区域作为子画面,在每个所述矩形区域中选择一个测试点;所述矩形区域的长度和宽度分别为投影画面长度和宽度的1/k;4≤k≤16。
7.根据权利要求5所述的数字书画笔迹校准系统,其特征在于,所述第一坐标位置为(xx,yy),所述第二坐标位置为(x,y),所述转换矩阵为 ,且
8.根据权利要求7所述的数字书画笔迹校准系统,其特征在于,输入点坐标为(X,Y);所述校正点输出模块输出的校正点的坐标位置为(x',y'),根据 求得校正点坐标,其中Δ为归一化参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310595307.6A CN103616949B (zh) | 2013-11-21 | 数字书画笔迹校准方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310595307.6A CN103616949B (zh) | 2013-11-21 | 数字书画笔迹校准方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103616949A true CN103616949A (zh) | 2014-03-05 |
CN103616949B CN103616949B (zh) | 2016-11-30 |
Family
ID=
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105551033A (zh) * | 2015-12-09 | 2016-05-04 | 广州视源电子科技股份有限公司 | 元件标记方法、系统和装置 |
CN108399025A (zh) * | 2018-03-09 | 2018-08-14 | 广东小天才科技有限公司 | 一种修正识别偏差的方法、装置及终端设备 |
CN108804989A (zh) * | 2017-05-05 | 2018-11-13 | 京东方科技集团股份有限公司 | 书画装置、书画设备及书画辅助方法 |
CN109087553A (zh) * | 2018-08-23 | 2018-12-25 | 广东智媒云图科技股份有限公司 | 一种临摹绘画方法 |
CN109983401A (zh) * | 2016-12-30 | 2019-07-05 | 德州仪器公司 | 摄像机辅助自动屏幕拟合 |
CN110018747A (zh) * | 2019-04-10 | 2019-07-16 | 广州视源电子科技股份有限公司 | 数据处理方法、装置及智能笔 |
CN110501115A (zh) * | 2019-09-03 | 2019-11-26 | 深圳市千分一智能技术有限公司 | 一种手写笔压力曲线标定的方法及装置 |
CN110722903A (zh) * | 2019-11-08 | 2020-01-24 | 青岛罗博智慧教育技术有限公司 | 一种轨迹记录装置及轨迹记录方法 |
CN114710601A (zh) * | 2022-03-07 | 2022-07-05 | 深圳创维-Rgb电子有限公司 | 一种基于拍摄设备的屏幕书写方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1637774A (zh) * | 2004-01-06 | 2005-07-13 | 微软公司 | 照相机-笔尖映射和校准 |
CN101777132A (zh) * | 2010-01-27 | 2010-07-14 | 江苏华安高技术安防产业有限公司 | 一种基于绝对坐标定位的笔迹识别系统及其实现方法 |
CN201590089U (zh) * | 2010-01-27 | 2010-09-22 | 江苏华安高技术安防产业有限公司 | 一种基于绝对坐标定位的笔迹识别系统 |
CN102156691A (zh) * | 2010-09-28 | 2011-08-17 | 北京大学深圳研究生院 | 记录手工填写纸质表格信息的方法及装置 |
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1637774A (zh) * | 2004-01-06 | 2005-07-13 | 微软公司 | 照相机-笔尖映射和校准 |
CN101777132A (zh) * | 2010-01-27 | 2010-07-14 | 江苏华安高技术安防产业有限公司 | 一种基于绝对坐标定位的笔迹识别系统及其实现方法 |
CN201590089U (zh) * | 2010-01-27 | 2010-09-22 | 江苏华安高技术安防产业有限公司 | 一种基于绝对坐标定位的笔迹识别系统 |
CN102156691A (zh) * | 2010-09-28 | 2011-08-17 | 北京大学深圳研究生院 | 记录手工填写纸质表格信息的方法及装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105551033B (zh) * | 2015-12-09 | 2019-11-26 | 广州视源电子科技股份有限公司 | 元件标记方法、系统和装置 |
CN105551033A (zh) * | 2015-12-09 | 2016-05-04 | 广州视源电子科技股份有限公司 | 元件标记方法、系统和装置 |
CN109983401A (zh) * | 2016-12-30 | 2019-07-05 | 德州仪器公司 | 摄像机辅助自动屏幕拟合 |
CN109983401B (zh) * | 2016-12-30 | 2022-02-11 | 德州仪器公司 | 摄像机辅助自动屏幕拟合 |
CN108804989A (zh) * | 2017-05-05 | 2018-11-13 | 京东方科技集团股份有限公司 | 书画装置、书画设备及书画辅助方法 |
CN108399025A (zh) * | 2018-03-09 | 2018-08-14 | 广东小天才科技有限公司 | 一种修正识别偏差的方法、装置及终端设备 |
CN108399025B (zh) * | 2018-03-09 | 2021-03-02 | 广东小天才科技有限公司 | 一种修正识别偏差的方法、装置及终端设备 |
CN109087553A (zh) * | 2018-08-23 | 2018-12-25 | 广东智媒云图科技股份有限公司 | 一种临摹绘画方法 |
CN110018747A (zh) * | 2019-04-10 | 2019-07-16 | 广州视源电子科技股份有限公司 | 数据处理方法、装置及智能笔 |
CN110501115A (zh) * | 2019-09-03 | 2019-11-26 | 深圳市千分一智能技术有限公司 | 一种手写笔压力曲线标定的方法及装置 |
CN110501115B (zh) * | 2019-09-03 | 2021-06-01 | 深圳市千分一智能技术有限公司 | 一种手写笔压力曲线标定的方法及装置 |
CN110722903A (zh) * | 2019-11-08 | 2020-01-24 | 青岛罗博智慧教育技术有限公司 | 一种轨迹记录装置及轨迹记录方法 |
CN114710601A (zh) * | 2022-03-07 | 2022-07-05 | 深圳创维-Rgb电子有限公司 | 一种基于拍摄设备的屏幕书写方法及系统 |
CN114710601B (zh) * | 2022-03-07 | 2024-03-12 | 深圳创维-Rgb电子有限公司 | 一种基于拍摄设备的屏幕书写方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10726580B2 (en) | Method and device for calibration | |
CN108346165A (zh) | 机器人与三维传感组件联合标定方法与装置 | |
US10033945B2 (en) | Orientation-adapted image remote inspection systems and methods | |
US9892488B1 (en) | Multi-camera frame stitching | |
CN105118042B (zh) | 对位贴合方法和设备 | |
CN103838437A (zh) | 基于投影图像的触控定位控制方法 | |
CN101163253B (zh) | 寻找新色温点的方法及其装置 | |
US11042984B2 (en) | Systems and methods for providing image depth information | |
CN102508575B (zh) | 一种屏幕书写装置、屏幕书写系统及其实现方法 | |
US9269004B2 (en) | Information processing terminal, information processing method, and program | |
JP2010117291A (ja) | ナビゲーション装置 | |
US20190079661A1 (en) | Digital Paint Generation Mix Control | |
CN114792345B (zh) | 一种基于单目结构光系统的标定方法 | |
CN110853102B (zh) | 一种新的机器人视觉标定及引导方法、装置及计算机设备 | |
TW201533703A (zh) | 影像擷取系統的校正方法 | |
JP2005189542A (ja) | 表示システム、表示プログラム、表示方法 | |
CN105427282B (zh) | 一种3d定位精度的测试方法和装置 | |
CN107527369B (zh) | 图像校正方法、装置、设备和计算机可读存储介质 | |
CN104714679B (zh) | 自动校正系统与自动校正方法 | |
CN104123015A (zh) | 一种手机模拟激光笔系统及其实现方法 | |
CN109493277A (zh) | 扫描头数据拼接方法、装置、计算机设备和存储介质 | |
CN103616949A (zh) | 数字书画笔迹校准方法及系统 | |
WO2016141984A1 (en) | Image processing device and method for geometric calibration of images | |
TWM589273U (zh) | 基於遠端堪輿之方位定向系統及其方位取像裝置 | |
CN105078404A (zh) | 基于激光算法的全自动眼动追踪测距定标仪及其使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee | ||
CP03 | Change of name, title or address |
Address after: 518000 Beek science and technology building, room, No. 9 research road, Nanshan District high tech Zone, Guangdong, China, 1501-B Patentee after: INLIFE-HANDNET CO., LTD. Address before: 518054 Guangdong city of Shenzhen province Nanshan District Nanhai Road Guangdong sea (Shenzhen city) 7 Building 3 floor Patentee before: Inlife-handnet Co., Ltd. |