发明名称 一种数字图像自动祛除斑点的方法
摘要 本发明公开了一种数字图像自动祛除斑点的方法,其特征在于:通过对图像A依次进行灰度化、对比度增强、梯度极大值查找、皮肤排除、孤立点消除、高斯模糊、阈值处理、区域表求和得到结果D;最后根据结果D与梯度极大值查找的结果对图像A里的斑点进行泊松方程处理,得到自动祛痘祛斑祛痣的最终效果。本方案完全省却了数字图像祛斑操作中手动的动作,整个过程可自动完成,无需手动标定和选择斑点,节省了操作时间和步骤。
申请公布号 CN103440633A 申请公布日期 2013.12.11
申请号 CN201310404195.1 申请日期 2013.09.06
申请人 厦门美图网科技有限公司 发明人 张伟;傅松林;李志阳;张长定
分类号 G06T5/00(2006.01)I 主分类号 G06T5/00(2006.01)I
代理机构 代理人
主权项 一种数字图像自动祛除斑点的方法,其特征在于:它包括以下步骤:1)接收一数字图像A,对图像A进行灰度化处理,得到灰度图像B;该处理采用下列两式中的一个:Gray=0.299*Red+0.587*Green+0.114*Blue:Gray=(Red*306+Green*601+Blue*117+512)/1024;其中,Gray为该灰度图像B各像素点的灰度值,Red、Green、Blue分别为图像A各像素点红、绿、蓝三个通道的颜色值;2)对灰度图像B进行对比度增强处理,公式为:nResult=nColor+(nColor‑128)*(1.0+Contrast)/255其中,nResult表示对比度增强后的灰度值,nColor表示要进行对比度增强的灰度值,Contrast为对比度增强的强度,范围[0.0,1.0];3)对灰度图像B进行梯度极大值查找,步骤如下:首先用 <mfenced open='|' close='|'> <mtable> <mtr> <mtd> <mo>-</mo> <mn>1</mn> </mtd> <mtd> <mo>-</mo> <mn>2</mn> </mtd> <mtd> <mo>-</mo> <mn>1</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>2</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced>与灰度图像B里的逐个像素点进行卷积运算,然后将计算后的结果进行统计,并将统计结果保存到一个大小为256的数组里,根据统计结果的计算得到阈值K,根据阈值K对卷积运算后的结果进行阈值化处理,大于等于阈值K的设置为255,小于阈值K的设置为0,最终得到梯度结果C;4)对梯度结果C先后进行皮肤排除与孤立点消除处理;图片A的宽为w,图片的高为h;皮肤识别后的数据为pEdgeTable;i表示当前像素点的行数,j表示当前的列数;皮肤排除的步骤:判断当前的像素点是否是皮肤;如果是皮肤的话,则将其所对应的梯度结果C上的值设置为255;该孤立点消除处理步骤为:a.建立边缘个数统计表,过程如下:建立一个数组pSumTable,并都初始化为0,数组的大小为(w+1)*(h+1);接着从第2行开始进行计算,并且每行计算时都是从第2列开始的(即第一行和第一列的数据都不用参与这个计算),每行从预设passSum=0开始赋值;passSum=passSum+(pEdgeTable[j*(w+1)+i]&0×01);pSumTable[j*(w+1)+i]=pSumTable[(j‑1)*(w+1)+i]+passSum;b.剔除不连续的点:设定一个大小为3×3的窗口,首先判断pEdgeTable当前像素点的值是否等于0,如果等于0,则继续遍历下一个像素点,否则执行下面操作:计算pEdgeTable当前像素点为中心的所述窗口内其他像素的值;假设上为top,下为bottom,左为left,右为right,则top=max(0,j‑1);bottom=min(h,j+2);right=min(w,i+2);left=max(0,i‑1);假设上一个搜索窗口内的Edge个数为preWinEdgeCount;当前搜索窗口内的Edge个数为curWinEdgeCount;先计算上一个搜索窗口内的Edge个数:p1=(w+1)*top+left;p2=(w+1)*bottom+left;offset=right‑left:preWinEdgeCount=pSumTable[p2+offset]+pSumTable[p1]‑pSumTable[p2]‑pSumTable[p1+offset];接下来预设r=2,并做循环,直到r大于5则跳出循环,以下为循环的步骤:计算当前搜索窗口内的Edge个数:top=max(0,j‑r);bottom=min(h,j+r+1);right=min(w,i+r+1);left=max(0,i‑r);p1=(w+1)*top+left;p2=(w+1)*bottom+left;offset=right‑left:curWinEdgeCount=pSumTable[p2+offset]+pSumTable[p1]‑pSumTable[p2]‑pSumTable[p1+offset];判断curWinEdgeCount‑preWinEdgeCount是否小于2,如果小于的话,则认定为不连续的边缘,归为奇异点,将pEdgeTable在该像素点的值设为0;否则将preWinEdgeCount=curWinEdgeCount;5)对梯度结果C进行高斯模糊处理,并做阈值处理;高斯模糊是用正态分布计算图像中每个像素的变换: <mrow> <mi>G</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mn>1</mn> <mrow> <mn>2</mn> <mi>&pi;</mi> <msup> <mi>&sigma;</mi> <mn>2</mn> </msup> </mrow> </mfrac> <msup> <mi>e</mi> <mrow> <mo>-</mo> <mrow> <mo>(</mo> <msup> <mi>u</mi> <mn>2</mn> </msup> <mo>+</mo> <msup> <mi>v</mi> <mn>2</mn> </msup> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <mn>2</mn> <msup> <mi>&sigma;</mi> <mn>2</mn> </msup> <mo>)</mo> </mrow> </mrow> </msup> </mrow>其中r是模糊半径,σ是正态分布的标准偏差,u是原像素点在x轴上的位置偏移值。V是原像素点在y轴上的位置偏移值;阈值的公式为:如果大于等于阈值K2的话,则值设置为255,否则设置为0。这边K2的范围[0,128];6)根据灰度图像B进行区域表求和得到结果D;结果D的数组大小为图片的宽w与图片的高h的乘积,假设为数组GraySumArea[w][h],先预设数组的所有值为0;接着计算数组第一行的值,公式为:GraySumArea[i][0]=GraySumArea[i‑1][0]+grayi;其中i从1开始直到w为止;grayi为坐标(i,0)上像素点的灰度值;接着计算数组第一列的值,公式为:GraySumArea[0][j]=GraySumArea[0][j‑1]+grayj;其中j从1开始到h为止;grayj为坐标为(0,j)上像素点的灰度值;接着计算数组剩余的值,公式为:GraySumArea[i][j]=grayij+GraySumArea[i][j‑1]+GraySumArea[i‑1][j]‑GraySumArea[i‑1][j‑1];其中i从1开始到w为止;j从1开始到h为止;grayij为坐标为(i,j)上像素点的灰度值;7)根据结果D与梯度结果C对图像A里的斑点进行泊松方程处理,得到自动祛痘祛斑祛痣的最终效果;首先利用结果D进行判断每个像素点是否为斑点;判断规则为判断该像素点在结果D上的值与周围值的差值,判断差值是否小于R值,,如果是的话,则不是斑点,继续遍历下一个像素;否则继续判断该像素点在梯度结果C上的值,如果大于T值,则不是斑点;否则是斑点;其中,R的范围为[64,220]T的为[64,192];当该像素点为斑点时,则根据泊松方程Δφ=f对该点进行肤色值的进行融合计算;经过泊松方程处理后得到该像素点新的颜色值,得到自动祛痘祛斑祛痣的最终效果。
地址 361008 福建省厦门市软件园二期望海路2号C栋4层
您可能感兴趣的专利