发明名称 基于图形处理单元的相位编组直线提取方法
摘要 本发明提供一种基于GPU硬件加速的相位编组直线提取方法。基本原理是,对原始图像进行边缘提取后,建立图像编码图,从中选取种子,然后从各种子出发,寻找得到直线段。技术方案包括:第一步,计算并存储原始图像的梯度方向图;第二步,计算并存储图像编码图;第三步,得到种子坐标队列;第四步,得到直线段支撑区域列表;第五步,拟合直线。本发明运用GPU的像素着色器和几何体着色器的并行计算能力,实现基于像素点的并行运算,缩短计算时间,弥补了直线提取算法效率低的问题。
申请公布号 CN102496136A 申请公布日期 2012.06.13
申请号 CN201110406731.2 申请日期 2011.12.08
申请人 中国人民解放军国防科学技术大学 发明人 余莉;汤晓安;唐波;韩方剑
分类号 G06T1/00(2006.01)I;G06T9/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 王文惠;李振
主权项 1.一种基于图形处理单元的相位编组直线提取方法,其特征在于,包括下述步骤:第一步,计算并存储原始图像的梯度方向图;将原始图像存储于GPU(graphics processing units,图形处理单元)的帧缓存中,运用GPU的像素着色器对原始图像中的各个像素点并行地执行可分离Sobel算子,得到原始图像的梯度方向图,存储于GPU的纹理存储器中;设在原始图像中第k个像素点的梯度方向值为f<sub>k</sub>;第二步,计算并存储图像编码图;运用GPU的像素着色器对梯度方向图中的各梯度方向值并行地执行下述步骤,得到图像编码图,存储于GPU的纹理存储器中:设原始图像中第k个像素点的八邻域像素点集合为{k<sub>i</sub>,i=0,1,L,7},第k个像素点对应的一个九元序列为<maths num="0001"><![CDATA[<math><mrow><msub><mi>C</mi><mi>k</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>C</mi><mi>k</mi><mi>i</mi></msubsup><mo>,</mo><mi>i</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mi>L</mi><mo>,</mo><mn>8</mn><mo>}</mo><mo>,</mo></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><msubsup><mi>C</mi><mi>k</mi><mi>i</mi></msubsup><mo>,</mo><mi>i</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mi>L</mi><mo>,</mo><mn>7</mn></mrow></math>]]></maths>的取值方式如下:如果<maths num="0003"><![CDATA[<math><mrow><msub><mi>f</mi><mi>k</mi></msub><mo>=</mo><msub><mi>f</mi><msub><mi>k</mi><mi>i</mi></msub></msub><mo>,</mo></mrow></math>]]></maths>则<maths num="0004"><![CDATA[<math><mrow><msubsup><mi>C</mi><mi>k</mi><mi>i</mi></msubsup><mo>=</mo><mn>1</mn><mo>;</mo></mrow></math>]]></maths>否则,<maths num="0005"><![CDATA[<math><mrow><msubsup><mi>C</mi><mi>k</mi><mi>i</mi></msubsup><mo>=</mo><mn>0</mn><mo>;</mo></mrow></math>]]></maths>上式中<img file="FDA0000117721570000016.GIF" wi="45" he="57" />为像素点k<sub>i</sub>的梯度方向值;<img file="FDA0000117721570000017.GIF" wi="49" he="56" />的取值方式如下:如果<img file="FDA0000117721570000018.GIF" wi="339" he="74" />满足<img file="FDA0000117721570000019.GIF" wi="277" he="119" />则称原始图像的第k个像素点为种子,<maths num="0006"><![CDATA[<math><mrow><msubsup><mi>C</mi><mi>k</mi><mn>8</mn></msubsup><mo>=</mo><mn>1</mn><mo>;</mo></mrow></math>]]></maths>否则,<maths num="0007"><![CDATA[<math><mrow><msubsup><mi>C</mi><mi>k</mi><mn>8</mn></msubsup><mo>=</mo><mn>0</mn><mo>:</mo></mrow></math>]]></maths>将第k个像素点对应的九元序列C<sub>k</sub>,作为图像编码图的第k个元素;第三步,得到种子坐标队列;运用GPU的几何体着色器扫描图像编码图,依次对图像编码图中的各个元素执行下述步骤,得到种子坐标队列:设图像编码图中的第k个元素为C<sub>k</sub>,如果<img file="FDA00001177215700000112.GIF" wi="149" he="56" />则将该元素的位置坐标输出到GPU的帧缓存中;这样得到的坐标集合为种子坐标队列;第四步,得到直线段支撑区域列表;运用GPU的几何体着色器并行地对种子坐标队列中的所有种子坐标进行如下操作,得到直线段支撑区域列表,存储于GPU的帧缓存中:以任意一个种子坐标作为其所属直线段支撑区域的起始点坐标,在图像编码图中搜索属于该直线段支撑区域的所有元素,这些元素的位置坐标形成一个直线段支撑区域;所有直线段支撑区域形成直线段支撑区域列表;如果种子坐标对应图像编码图中的第k个元素,求以该元素位置坐标(x<sub>k</sub>,y<sub>k</sub>)为起点的直线段支撑区域l<sub>k</sub>的步骤如下:步骤(一):令j=k;步骤(二):如果图像编码图中第j个元素的<img file="FDA0000117721570000021.GIF" wi="148" he="62" />且在原始图像中第j个像素点位置坐标(x<sub>j</sub>,y<sub>j</sub>)满足下式:y<sub>j</sub><y<sub>k</sub>或者(y<sub>j</sub>=y<sub>k</sub>且x<sub>j</sub><x<sub>k</sub>)则从直线段支撑区域列表中删除l<sub>k</sub>,终止搜索;否则,执行步骤(三);步骤(三):如果存在i=0,1,L,7,使得<img file="FDA0000117721570000022.GIF" wi="143" he="61" />则:将图像编码图中第j个元素的邻域点j<sub>i</sub>作为l<sub>k</sub>上的点,其位置坐标存储到l<sub>k</sub>中;令j=j<sub>i</sub>,重新执行步骤(二);第五步,拟合直线;运用GPU的像素着色器并行地对直线段支撑区域列表的每个直线段支撑区域进行直线拟合,得到原始图像的直线提取结果。
地址 410073 湖南省长沙市开福区德雅路109号