发明名称 基于各向异性体数据的错切变形体绘制方法
摘要 基于各向异性体数据的错切变形体绘制方法,属于图像处理技术领域。包括构造三维体数据场、错切变形分解、重采样、合成中间图像、变形得到最终图像等步骤;本发明主要对原始错切变形算法的坐标变换、重采样、不透明度校正等步骤做了改进,可以在图像数据构造成逻辑的三维体数据场之后,不需要通过断层插值操作使其各向同性,而是直接基于各向异性数据场做体绘制操作。不仅减少了预处理时间,也提高了用于绘制的图像数据精度。另外在实施过程中,采用了可变重采样的方式,鼠标交互时降低采样率提高绘制速度,绘制最终图像时提高采样率增强图像质量,同时满足了绘制速度和图像精度的要求。
申请公布号 CN101853518A 申请公布日期 2010.10.06
申请号 CN201010185884.4 申请日期 2010.05.28
申请人 电子科技大学 发明人 解梅;李郭
分类号 G06T15/00(2006.01)I 主分类号 G06T15/00(2006.01)I
代理机构 电子科技大学专利中心 51203 代理人 葛启函
主权项 1.基于各向异性体数据的错切变形体绘制方法,包括以下步骤:步骤1:读入图像数据构造三维体数据场;步骤1-1:读入二维图像序列构造三维体数据场;设所述二维图像序列为尺寸为M×N的L张二维切片图像;步骤1-2:建立三维体数据场的世界坐标;对于M×N×L的体数据场,其中第k层、第i行、第j列的体数据的三维下标为(i,j,k),1≤i≤M,1≤j≤N,1≤k≤L;设二维切片图像内横向和纵向的像素间距为cx和cy,相邻二维切片图像的间距为cz,则该三维体数据场的世界坐标C<sub>w</sub>表示为:<maths num="0001"><![CDATA[<math><mrow><msub><mi>C</mi><mi>w</mi></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>cx</mi></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>cy</mi></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mi>cz</mi></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>&CenterDot;</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>i</mi></mtd></mtr><mtr><mtd><mi>j</mi></mtd></mtr><mtr><mtd><mi>k</mi></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>步骤2:错切变形分解;步骤2-1:设置初始视矩阵M<sub>view</sub>;步骤2-2:根据鼠标移动,设置视矩阵M<sub>view</sub>;将二维平面鼠标的移动映射为三维球体上向量的转动,根据三维球体上向量的转动角度和方向,利用OpenGL的glRotatef()函数和glGetFloatv()函数得到旋转矩阵,进而得到视矩阵M<sub>view</sub>;步骤2-3:寻找主轴,得到世界坐标到标准世界坐标的转换矩阵P;计算视矩阵M<sub>view</sub>所对应的观察点在世界坐标系中的坐标值,其中绝对值最大的坐标值对应的轴即为主轴;步骤2-4:计算标准视矩阵M′<sub>view</sub>;标准视矩阵M′<sub>view</sub>的计算公式为M′<sub>view</sub>=M<sub>view</sub>·P<sup>-1</sup>;步骤2-5:采用平行投影方式分解标准视矩阵M′<sub>view</sub>;将标准视矩阵分解为错切矩阵M<sub>shear</sub>和变形矩阵M<sub>warp</sub>,分解公式为M′<sub>view</sub>=M<sub>warp</sub>·M<sub>shear</sub>;其中错切矩阵M<sub>shear</sub>用于将标准世界坐标空间转换为错切空间,形式如下:<maths num="0002"><![CDATA[<math><mrow><msub><mi>M</mi><mi>shear</mi></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mn>0</mn></mtd><mtd><mi>sx</mi></mtd><mtd><msup><mi>ti</mi><mo>&prime;</mo></msup></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd><mtd><mi>sy</mi></mtd><mtd><msup><mi>tj</mi><mo>&prime;</mo></msup></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中sx,sy为错切因子,用于将视线方向错切到与主轴平行的方向;ti′、tj′为平移因子,用于将错切空间的原点平移至中间图像的最左上角以方便计算,且平移因子ti′、tj′需要根据切片间的距离做比例运算进行校正,校正公式为:<maths num="0003"><![CDATA[<math><mrow><msup><mi>ti</mi><mo>&prime;</mo></msup><mo>=</mo><mo>&dtri;</mo><mo>*</mo><mi>ti</mi><mo>,</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><msup><mi>tj</mi><mo>&prime;</mo></msup><mo>=</mo><mo>&dtri;</mo><mo>*</mo><mi>tj</mi></mrow></math>]]></maths>其中,ti、tj分别表示传统错切变形体绘制方法中的平移因子,<img file="FSA00000137031100024.GIF" wi="31" he="32" />表示主轴方向切片,即重采样平面间的距离;当Z轴为主轴时,<img file="FSA00000137031100025.GIF" wi="152" he="47" />X轴为主轴时,<img file="FSA00000137031100026.GIF" wi="156" he="46" />Y轴为主轴时,<img file="FSA00000137031100027.GIF" wi="83" he="33" /><img file="FSA00000137031100028.GIF" wi="57" he="36" />步骤3:重采样;采用平行投影方式,在错切空间中,确定视线经过二维切片图像的重采样点;并利用线性加权方式计算每一个重采样点的数据值;数据场各向异性时,二维切片图像内原始数据点成矩形阵列分布,每一个重采样点的采样权重不一样;但是在一行内,垂直方向权重一致;在一列内,水平方向权重一致;步骤4:合成中间图像;步骤4-1:不透明度校正;对沿视线内的每一个重采样点,根据其数据值和不透明度传递函数获取每一个重采样点的不透明度值α,并对每一个重采样点的不透明度值α进行校正,校正公式为:<maths num="0005"><![CDATA[<math><mrow><msub><mi>&alpha;</mi><mi>corrected</mi></msub><mtext>=1-</mtext><msup><mrow><mo>[</mo><mn>1</mn><mo>-</mo><mi>&alpha;</mi><mo>]</mo></mrow><mrow><mfrac><mn>1</mn><mrow><mi>cos</mi><mi>&theta;</mi></mrow></mfrac><mo>*</mo><mfrac><mi>&Delta;c</mi><mrow><mi>&Delta;s</mi><mn>0</mn></mrow></mfrac></mrow></msup></mrow></math>]]></maths>其中,α<sub>corrected</sub>为校正后的不透明度值,θ为视线与主轴的夹角,Δc为重采样平面间的距离,Δs<sub>0</sub>为不透明度值α所对应的基准距离;步骤4-2:合成中间图像;对沿视线内的每一个重采样点的颜色值c和校正后的不透明度值α<sub>corrected</sub>,利用前向合成算子合成中间图像的像素值,合成公式为:<maths num="0006"><![CDATA[<math><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>&alpha;</mi><mi>out</mi></msub><mo>=</mo><msub><mi>&alpha;</mi><mi>in</mi></msub><mo>+</mo><mrow><mo>(</mo><mn>1</mn><mo>-</mo><msub><mi>&alpha;</mi><mi>in</mi></msub><mo>)</mo></mrow><msub><mi>&alpha;</mi><mi>i</mi></msub></mtd></mtr><mtr><mtd><msub><mi>c</mi><mi>out</mi></msub><mo>=</mo><msub><mi>c</mi><mi>in</mi></msub><mo>+</mo><mrow><mo>(</mo><mn>1</mn><mo>-</mo><msub><mi>&alpha;</mi><mi>in</mi></msub><mo>)</mo></mrow><msub><mi>c</mi><mi>i</mi></msub></mtd></mtr></mtable></mfenced></math>]]></maths>其中,α<sub>in</sub>、c<sub>in</sub>分别表示累积的不透明度值和颜色值;α<sub>i</sub>、c<sub>i</sub>分别表示当前重样点的不透明度值和颜色值;α<sub>out</sub>、c<sub>out</sub>分别表示经过当前重样点后的不透明度值和颜色值;当完成整个数据场区域的合成之后,就形成了中间图像;步骤5:对中间图像做变形操作,形成最终图像;对形成的中间图像,通过变形矩阵M<sub>warp</sub>做变形操作,最后生成的就是最终图像;步骤6:将最终的三维效果图像显示到屏幕;将最终的图像数据利用OpenGL的纹理贴图功能绘制到屏幕上显示;通过以上步骤,就能够对各向异性体数据直接进行错切变形体绘制,在屏幕上显示三维立体的最终图像,并可以通过鼠标交互旋转,从不同角度观看图像效果。
地址 611731 四川省成都市高新区(西区)西源大道2006号