发明名称 一种基于OpenCL的图像修复方法
摘要 一种基于OpenCL的图像修复方法,属图像自动修复技术领域,由计算机以OpenCL平台,确定待修补区域、边界、源区域,进而定义目标块和源块,求出所有源块与目标块像素的彩色信息的误差平方和SSD,CPU找出SSD最小的源块对目标块进行修补,从而完成对整个图像的修复,通过本发明提出了基于OpenCL的并行加速方法,利用GPU多核、线程之间切换非常廉价的特点,将图像修复算法中部分大量简单重复的工作并行化,大大缩短了图像处理时间,提高了对图像修复的实时性和应用范围。
申请公布号 CN103150711A 申请公布日期 2013.06.12
申请号 CN201310105278.0 申请日期 2013.03.28
申请人 山东大学 发明人 袁东风;翟庆羽;张海霞;徐加利;孙文;高凯;徐祥桐
分类号 G06T5/00(2006.01)I;G06T1/00(2006.01)I 主分类号 G06T5/00(2006.01)I
代理机构 济南金迪知识产权代理有限公司 37219 代理人 许德山
主权项 1.一种基于OpenCL的图像修复方法,由计算机来实现,计算机中的显卡配置为支持OpenCL协议的显卡或处理器采用AMDAPU,该方法步骤如下:1)OpenCL平台初始化,包括获取OpenCL平台,生成上下文,寻找OpenCL设备,创建命令队列,创建OpenCL buffer对象,创建程序对象,编译程序对象,生成kernel;2)确定待修补区域、边界、源区域,源区域即除去待修补区域和边界后的图片区域;其中,待修补区域表示图片中破损或需要修补的地方,源区域指图片中信息完整的部分,边界指待修补区域与源区域之间的交界线;3)以待修补区域边界上每一个点为中心,选取正方形图像块作为样本块,大小依据图片纹理、精度而定,计算每个图像块的优先级值,优先级值有两方面构成:①修补区域内像素的置信度大小,即已知像素数占块中像素数的比例;②待修补区包含的线性结构信息能否与周围形成一个连续的线性结构,即待修补区的邻域是否是闭合的;以待修补区域边界上一点p为中心的图像块ψ<sub>p</sub>的优先级P(p)计算公式如下:P(p)=C(p)·D(p)其中,C(p)为置信度项,D(p)为数据项,定义如下:<maths num="0001"><![CDATA[<math><mrow><mi>C</mi><mrow><mo>(</mo><mi>p</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><munder><mi>&Sigma;</mi><mrow><mi>q</mi><mo>&Element;</mo><msub><mi>&Psi;</mi><mi>p</mi></msub><mo>&cap;</mo><mi>&Phi;</mi></mrow></munder><mi>C</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow></mrow><mrow><mo>|</mo><msub><mi>&Psi;</mi><mi>p</mi></msub><mo>|</mo></mrow></mfrac></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mi>D</mi><mrow><mo>(</mo><mi>p</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mo>|</mo><mo>&dtri;</mo><msubsup><mi>I</mi><mi>p</mi><mo>&perp;</mo></msubsup><mo>&CenterDot;</mo><msub><mi>n</mi><mi>p</mi></msub><mo>|</mo></mrow><mi>&alpha;</mi></mfrac></mrow></math>]]></maths>C(p)表达式中的分子项表示样本块中非空洞像素的数量,其中:q代表图像块中的一个像素、Φ表示图片的源区域,即图片中信息完整的部分,C(q)分别表示每个符合条件的q像素的置信度值,该值表示包含一个迭代的过程,即p像素的置信度值通过计算其周围所有符合条件的q像素的置信度值而得出,分母|Ψ<sub>p</sub>|表示样本块中总的像素数量,Ψ<sub>p</sub>∩Φ表示既属于以p为中心的样本块,又属于图像的源区域,<img file="FDA00002980886600013.GIF" wi="213" he="69" />表示满足∈符号之后所述条件的点q;D(p)表达式中的<img file="FDA00002980886600014.GIF" wi="190" he="81" />分别表示空洞边缘上p点处的等照度线的方向与法向量,<img file="FDA00002980886600015.GIF" wi="185" he="93" />表示空洞边缘上p点处的等照度线的方向强度在边界法向上的投影强度,α为归一化因子,取值为255;4)沿待修补区域边界寻找优先级最高的图像块,并定义优先级最高的图像块为目标块;5)将原图RGB信息、目标块RGB信息及边界、待修补区、源区域标志位矩阵写入OpenCL设备的buffer,并将这些buffer中的值传入kernel;6)确定并分配workitem的数量、由workitem组成的工作组workgroup的大小;7)将每个workgroup计算需要的信息如源图RGB值、目标块RGB值映射到每个workgroup的本地内存中,完成这项工作后需将这个映射工作同步,即等待所有workgroup的映射工作完成,然后将kernel放入命令队列开始运行kernel程序,Kernel程序的内容为在源区域选取与目标块同样大小的图像块,定义为源块,源块与目标块进行对比并计算源块和目标块中的像素的彩色信息的误差平方和SSD,比较方法为:比较源块和目标块对应像素的RGB值,依次做差,求R值、G值、B值差值的平方和,采用这种方法,在整个图片的源区域,以一个像素为步长,从上到下从左至右选取所有符合条件的块作为源块,求出上述所有源块与目标块像素的彩色信息的误差平方和SSD,这样通过遍历整个图片上的源区域,GPU最终可以将所有源块与同一目标块的图像差值并行算出;计算源块与目标块像素的彩色信息的误差平方和SSD的公式如下所示:<maths num="0003"><![CDATA[<math><mrow><mi>SSD</mi><mo>=</mo><mi>&Sigma;</mi><mfenced open='{' close='}'><mtable><mtr><mtd><msup><mrow><mo>(</mo><msub><mi>R</mi><mi>p</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>R</mi><mi>q</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><msub><mi>G</mi><mi>p</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>G</mi><mi>q</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><msub><mi>B</mi><mi>p</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>B</mi><mi>q</mi></msub><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>)</mo></mrow><mn>2</mn></msup></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,Rp、Gp、Bp分别表示源块内像素的RGB三原色分量的强度值,强度值范围为0-255;Rq、Gq、Bq则分别表示目标块内像素的RGB三原色分量的强度值,公式中上述字母后面括号内所加字母P代表做差的两个像素在源块和目标块中的相对位置相同;8)完成上述所有源块与目标块像素的彩色信息的误差平方和SSD的运算后,将kernel中的运算结果信息写入buffer,由CPU读出;9)CPU找出源块与目标块像素的彩色信息的误差平方和SSD最小的源块,这一源块即为最优匹配块,将最优匹配块的RGB值赋予目标块,即完成目标块的修补;由于目标块图像的修补,其边界就会发生改变,边界、置信度、优先级都应进行更新,故重新更新待修补区边界,更新边界点置信度、优先级值;10)CPU检测是否有待修补区域,有则进行第3步,若没有待修补区域则结束,图片修补完成。
地址 250100 山东省济南市历城区山大南路27号
您可能感兴趣的专利