发明名称 一种基于三阶Bezier曲线的伪装迷彩自动生成方法
摘要 一种基于三阶Bezier曲线的伪装迷彩自动生成方法,本方法具有按照给定模型尺寸、颜色比、斑点曲率半径,快速自动化生成迷彩斑点、并在AutoCAD中自动绘图等几个主要方面的功能。传统斑点图案生成主要是人工绘制,这种做法不仅生产效率低下,而且斑点形状以及颜色面积比等各个方面很难达到实际要求,没有发挥计算机给生产带来的方便。本迷彩图案自动生成系统的设计主要依托计算机技术,实现迷彩图案的自动绘制,不仅大大提高了设计效率,而且利用数字图像处理技术对人眼不能识别的色差、曲率半径等进行处理,并且各种颜色的面积比更加精确的符合迷彩图案设计要求,增强了伪装程度。
申请公布号 CN104966320A 申请公布日期 2015.10.07
申请号 CN201510432519.1 申请日期 2015.07.21
申请人 北京工业大学 发明人 王勇;许荣强;辛淙;刘相新;黎兰;韦学中
分类号 G06T19/00(2011.01)I 主分类号 G06T19/00(2011.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 沈波
主权项 一种基于三阶Bezier曲线的伪装迷彩自动生成方法,其特征在于:该方法含有以下步骤,步骤(1),斑点曲线建模:用三阶Bezier曲线作为迷彩斑点曲线,用闭合的三阶Bezier曲线模拟迷彩斑点;三阶Bezier曲线定义如下:定义给定空间n+1个点的位置矢量p<sub>i</sub>(i=0,1,2,......,n),则迷彩斑点参数曲线上各点坐标的插值公式是,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>p</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>p</mi><mi>i</mi></msub><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>&Element;</mo><mo>&lsqb;</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>&rsqb;</mo></mrow>]]></math><img file="FDA0000764442880000011.GIF" wi="594" he="139" /></maths>其中,P<sub>i</sub>构成该迷彩斑点曲线的特征多边形,B<sub>i,n</sub>(t)是n次Bernstein基函数:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><msubsup><mi>c</mi><mi>n</mi><mi>i</mi></msubsup><msup><mi>t</mi><mi>i</mi></msup><msup><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow></msup><mo>=</mo><mfrac><mrow><mi>n</mi><mo>!</mo></mrow><mrow><mi>i</mi><mo>!</mo><mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo></mrow><mo>!</mo></mrow></mfrac><msup><mi>t</mi><mi>i</mi></msup><msup><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>=</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>n</mi><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000764442880000012.GIF" wi="1159" he="144" /></maths>其中:n为基本曲线的次数;c为组合数公式;t表示曲线上点的位置,t的取值为[0,1],0代表曲线的开始点位置,1代表曲线的末端点位置;i的取值是从0到n其中规定:0<sup>0</sup>=1,0!=1迷彩斑点的曲线性质:1)正性<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mfenced open = '{' close = ''><mtable><mtr><mtd><mrow><mo>=</mo><mn>0</mn></mrow></mtd><mtd><mrow><mi>t</mi><mo>=</mo><mn>0</mn><mo>,</mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mrow><mo>&gt;</mo><mn>0</mn></mrow></mtd><mtd><mrow><mi>t</mi><mo>&Element;</mo><mrow><mo>(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>3</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000764442880000013.GIF" wi="903" he="161" /></maths>2)端点性<img file="FDA0000764442880000014.GIF" wi="481" he="157" /><img file="FDA0000764442880000015.GIF" wi="479" he="149" />3)满足递推性:B<sub>i,n</sub>(t)=(1‑t)B<sub>i,n‑1</sub>(t)+tB<sub>i‑1,n‑1</sub>(t),(i=0,1,...,n)<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><msubsup><mi>c</mi><mi>n</mi><mi>i</mi></msubsup><msup><mi>t</mi><mi>i</mi></msup><msup><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow></msup><mo>=</mo><mrow><mo>(</mo><msubsup><mi>c</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow><mi>i</mi></msubsup><mo>+</mo><msubsup><mi>c</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><msup><mi>t</mi><mi>i</mi></msup><msup><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow></msup><mo>=</mo><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>t</mi><mo>)</mo></mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>+</mo><msub><mi>tB</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000764442880000021.GIF" wi="1529" he="92" /></maths>4)导函数B<sub>i,n</sub>(t)=n[B′<sub>i‑1,n‑1</sub>(t)‑B′<sub>i,n‑1</sub>(t)],(i=0,1,...,n)一阶导矢为:<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msup><mi>p</mi><mo>&prime;</mo></msup><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mi>n</mi><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></munderover><msub><mi>p</mi><mi>i</mi></msub><mo>&lsqb;</mo><msub><mi>B</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>&rsqb;</mo><mo>=</mo><mi>n</mi><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></munderover><mrow><mo>(</mo><msub><mi>p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>-</mo><msub><mi>p</mi><mi>i</mi></msub><mo>)</mo></mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000764442880000022.GIF" wi="1438" he="134" /></maths>二阶导矢为:<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msup><mi>p</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mi>n</mi><mrow><mo>(</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mo>-</mo><mn>2</mn></mrow></munderover><mrow><mo>(</mo><msub><mi>p</mi><mrow><mi>i</mi><mo>+</mo><mn>2</mn></mrow></msub><mo>-</mo><mn>2</mn><msub><mi>p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>p</mi><mi>i</mi></msub><mo>)</mo></mrow><msub><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>n</mi><mo>-</mo><mn>2</mn></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000764442880000023.GIF" wi="956" he="142" /></maths>5)迷彩斑点曲线在t=t<sub>0</sub>处的坐标计算式为:p(t<sub>0</sub>)=(1‑t<sub>0</sub>)<sup>3</sup>p<sub>0</sub>+3t<sub>0</sub>(1‑t<sub>0</sub>)<sup>2</sup>p<sub>1</sub>+3t<sub>0</sub><sup>2</sup>(1‑t<sub>0</sub>)p<sub>2</sub>步骤(2),手动绘制单个迷彩斑点:用户在软件绘图界面左键点击屏幕来确立一系列关键点,记录用户点击过的关键点坐标并将用户点击过的关键点在屏幕上标识出来;当用户点击的某个点和点击的第一个点重合的时候用户所点击的点的总个数大于二个,将用户点击过的点,按照先后顺序,用三阶Bezier曲线的曲线拼接技术,把用户点击过的这一系列点连接起来(同时保留三阶Bezier曲线各点处的坐标,方便计算曲线各点处的曲率半径),以此绘制出一个迷彩斑点;步骤(3),检测单个斑点各处的曲率半径,并绘制出符合曲率半径要求的斑点:依据三阶Bezier曲线在各点处的曲率半径计算公式,结合步骤(1)中生成的三阶Bezier曲线各点处的坐标,计算出三阶Bezier曲线各点处的曲率半径值,然后结合所要求的曲率半径的值,来检测并标记出不符合曲率要求的曲线,再通过人手动的方式,对点击过的关键点的手动调节,将不符合曲率半径要求的点调节为符合曲率半径要求的点,即:绘制的曲线各点的曲率半径必须比大于等于所给出的曲率半径的值;最终绘制出一个符合曲率半径要求的迷彩斑点;步骤(4),建立符合曲率半径要求的迷彩斑点库:保存步骤(3)中符合要求的迷彩斑点的坐标到文件(例如一种实现方式:每一个迷彩斑点保存为一个.spot文件,并以数字命名所保存的文件,1.spot,2.spot……),并以单个斑点所含关键的个数为划分依据,分别建立含有多个关键点的大型斑点库和包含较多斑点的中型斑点库以及包含较少斑点的小型斑点库;步骤(5),将车辆的模型简化为一个长方体,建立了与车辆模型相匹配的五面画布,该画布为平面结构,其包括矩形A、矩形B、矩形C、矩形D、矩形E,其中矩形E为该五视图画布的中心面,矩形E的四条边分别为边a、边b、边c、边d;所述矩形A、矩形B、矩形C、矩形D以矩形E为中心,矩形A与矩形E公共边为边a,矩形B与矩形E公共边为边b,矩形C与矩形E公共边为边c,矩形D与矩形E公共边为边d;该五视图画布的矩形A、矩形B、矩形C、矩形D分别以边a、边b、边c、边d为中心,沿平面内竖直方向90°旋转,矩形A、矩形B、矩形C、矩形D、矩形E即组成无盖的六面体结构,该六面体结构与待绘制的车辆模型相对应,其中矩形E为待绘制的车辆模型的顶面,矩形A、矩形B、矩形C、矩形D为待绘制的车辆模型四个侧面;步骤(6),随机生成一幅包含多个迷彩斑点(各个迷彩斑点之间没有交集)的迷彩图案:步骤(6.1)首先建立一个序列list,用来保存斑点,初始时存储序列为空,每次在画布上添加一个斑点,就把所添加的斑点加入到存储序列中;步骤(6.2)将画布纹理映射到车辆时,画布上的矩形A、矩形B、矩形C、矩形D会分别覆盖到车辆的四个侧面,此时矩形A与矩形B、矩形B与矩形C、矩形C与矩形D、矩形D与矩形A会产生四条公共边,记为:ab、bc、cd、da;ab由画布上的矩形A的边a1与画布上的矩形B的边b1合并而来,bc由画布上的矩形B的边b2与画布上的矩形C的边c1合并而来,cd由画布上的矩形C的边c2与画布上的矩形D的边d1合并而来,da由画布上的矩形D的边d2与画布上的矩形A的边a2合并而来;ab、bc、cd、da与车辆竖直方向的四条侧棱相对应;为实现车辆上跨越这四条侧棱的斑点为同一个斑点,需要对五视图画布上的斑点做如下所示处理:步骤(6.2.1)将矩形A、矩形B、矩形C、矩形D的八条边:a1、a2、b1、b2、c1、c2、d1、d2划为四组,a1、b1划为第一组,b2、c1划为第二组,c2、d1划为第三组,d2、a1划为第四组;记边a1、b1的交点坐标为(xCenter,yCenter);步骤(6.2.2)从小型斑点库随机一个斑点spot,并让其跨越边a1,记斑点spot中心坐标为(x,y),并将其加入到序列list中;步骤(6.2.3)将斑点spot的中心坐标(x,y)以a1、b1的交点坐标(xCenter,yCenter)为旋转中心顺时针旋转90度,此时斑点跨越边b1;步骤(6.2.4)将旋转90度过后的斑点spot加入到序列list中;步骤(6.2.6)其余三组边做同样处理;步骤(6.3)在画布主干区域布大斑点;按照一定的间隔,从主干区域起始位置到主干区域终点位置,遍历主干区域;然后从大型斑点库取一个斑点,用当前位置坐标作为大型斑点的中心位置;根据当前大型斑点的缩放比例,旋转角度,计算出大型斑点的每个关键点在画布上的实际位置;遍历存储序列中的斑点,根据当前大型斑点的位置、缩放比例与存储序列中斑点的位置、缩放比例,求得当前大型斑点相对于存储序列中斑点的中心相对坐标,计算公式如下:1、x_big是大斑点的中心x坐标,y_big是大斑点的中心y坐标,2、i是当前遍历到的小斑点序号,3、x_small[i],是当前小斑点的x中心坐标,y_small[i]是当前小斑点的y中心坐标,4、rotation[i]当前小斑点的旋转角度,stretch[t]当前小斑点的缩放比例5、x_get,y_get是大小斑点的中心相对坐标6、PI是圆周率π则:中心相对坐标x_get,y_get为:x_get=(x_big‑x_small[i])*cos(‑rotation[i]/180*PI)/stretch[i]‑(y_big‑y_small[i])*sin(‑rotation[i]/180*PI)/stretch[i];y=(x_big‑x_small[i])*sin(‑rotation[i]/180*PI)/stretch[i]+(y_big‑y_small[i])*cos(‑rotation[i]/180*PI)/stretch[i];对大型斑点的每个关键点进行遍历,根据当前大型斑点对存储序列中斑点的相对坐标,检测有没有关键点包含在存储序列的斑点中,如果对当前斑点的所有关键点,每个关键点都没有包含在存储序列的斑点中,则表明当前大型斑点没有覆盖画布上的任何一个斑点,将该大型斑点加入到存储序列中;(6.4)按照大型斑点的随机方式,分别随机中型斑点和小型斑点;(6.5)本策略执行时间:长10米,宽3米,高3米的车所对应的五视图画布,生成时间大约为30‑60秒;步骤(7),计算每个迷彩斑点以及未被迷彩斑点覆盖的画布所占整个画布的面积比:将整个画布划分为大小均匀的小正方形,并计算出每一个小正方形所占整个画布的比例;对所有小正方形进行遍历,对当前遍历到的小矩形块与迷彩图案上的所有斑点进行碰撞检测,如果小正方形块与某个斑点有交集,则该斑点所占整个斑点的面积比增加s,继续遍历下一个小正方形块,直到所有正方形块遍历完全;用1减去每个斑点所占的面积比,则为未被斑点覆盖的画布所占整个画布的面积比;步骤(8),按照给定三种颜色比例,对斑点画布进行涂色:给定的颜色比例分别为:6:4、3:3:2、2:2:2:3;以颜色比2:2:3:3来讲解按照给颜色积比对斑点画布进行涂色的思想:如果颜色比要求为3:3:2:2,则四种颜色在画布上所占的百分比对应为0.3,0.3,0.2,0.2;定义画布上一共有n个斑点,每个斑点面积比设为spot(t),t取值为从1~n;假设未被斑点覆盖的画布面积比为canS,则<img file="FDA0000764442880000061.GIF" wi="428" he="138" />假设这四种颜色分别为A、B、C、D,四种颜色当前在画布上的面积比为S(A),S(B),S(C),S(D),涂色之前S(A)=0,S(B)=0,S(C)=0,S(D)=0;步骤(8.1),首先将所有迷彩斑点的面积比由大到小排序;步骤(8.2),将未被斑点覆盖的画布面积比加到A颜色当前面积比中,即:S(A)=S(A)+canS,判断S(A)是否大于等于0.3,如果大于等于,则执行8.3,如果小于则执行8.4;步骤(8.3),按斑点面积比从大到小的顺序进行遍历,索引i取值从0~n,初始为0;步骤(8.3.1)如果S(B)&lt;0.3,则执行:S(B)=S(B)+spot(i),i=i+1,否则跳转8.3.2;如果i&lt;n+1,则继续执行8.3.2,否则结束;步骤(8.3.2)如果S(C)&lt;0.2,则执行:S(C)=S(C)+spot(i),i=i+1,否则跳转8.3.3;如果i&lt;n+1,则继续执行8.3.3,否则结束;步骤(8.3.3)如果S(D)&lt;0.2,则执行:S(D)S(D)+spot(i),i=i+1,否则跳转8.3.1;如果i&lt;n+1,则跳转到8.3.1,并继续执行,否则结束;步骤(8.4),按斑点面积比从大到小的顺序进行遍历,索引i取值从0~n,初始为0;步骤(8.4.1)如果S(A)&lt;0.3,则执行:S(A)=S(A)+spot(i),i=i+1,否则跳转8.4.2;如果i&lt;n+1,则继续执行8.4.2,否则结束;步骤(8.4.2)如果S(B)&lt;0.3,则执行:S(B)=S(B)+spot(i),i=i+1,否则跳转8.4.3;如果i&lt;n+1,则继续执行8.4.3,否则结束;步骤(8.4.3)如果S(C)&lt;0.2,则执行:S(C)=S(C)+spot(i),i=i+1,否则跳转8.4.4;如果i&lt;n+1,则继续执行8.4.4,否则结束;步骤(8.4.4)如果S(D)&lt;0.2,则S执行:(D)+spot(i),i=i+1,否则跳转8.4.1;如果i&lt;n+1,则跳转到继续执行8.4.1,否则结束;步骤(9)将绘制的迷彩图案在AutoCAD中自动重绘:步骤(9.1)将要软件中迷彩斑点的坐标转换为AutoCAD中坐标;步骤(9.2)用AutoCAD中SPL命令生成所有迷彩斑点在AutoCAD中的绘制命令;步骤(9.3)最后在AutoCAD命令窗口中粘贴(9.2)中生成好的命令,将迷彩图案在AutoCAD中重绘出来,实现AutoCAD图纸的自动生成。
地址 100124 北京市朝阳区平乐园100号
您可能感兴趣的专利