具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细阐述。
本发明实施例提出的人像磨皮的实现流程如图1所示,包括如下步骤:
步骤101:以鼠标点击处的像素值为基础,选取人像的皮肤区域。
该步骤可以分为两步,第一步,初选皮肤区域;第二步,在第一步初选的皮肤区域的基础上,进一步确定皮肤区域的边缘。
所述初选皮肤区域的具体做法可以是:将鼠标点选的像素值作为基础像素值,计算图像中任意坐标(i,j)的像素值与基础像素值的差值,若差值小于预先设定的阈值,则认为坐标(i,j)处的像素属于皮肤区域,否则坐标(i,j)处的像素不属于皮肤区域。
像素值通常具有多个分量,例如RGB模式的像素值包括红(Red)、绿(Green)、蓝(Blue)三个分量,上述差值可以是这三个分量分别计算的差值,再将三个差值分别与预先设置的三个阈值比较,若各个分量的差值均小于阈值则认为坐标(i,j)处的像素属于皮肤区域,如果有任何一个分量的差值大于阈值则坐标(i,j)处的像素不属于皮肤区域。
在某些情况下,上述做法可能把图像中颜色与人皮肤相近的像素也认为是皮肤区域,因此可以再加一个限定条件,皮肤区域的像素必须直接或间接与鼠标点击处的像素连通。具体做法包括:
步骤a:将鼠标点击处的像素设为皮肤区域中的像素。
步骤b:搜索与皮肤区域直接相邻的像素,计算搜索到的像素与基础像素值的差值;将差值小于预先设定的阈值所对应的像素设为皮肤区域中的像素;
步骤c:判断是否完成对皮肤区域直接相邻的像素的搜索,若是,则结束皮肤区域的选取过程,否则返回步骤b。
在完成了皮肤区域的初选之后,就可以执行第二步操作,对皮肤区域的边缘部分进行空间滤波,得到专门描述皮肤区域边缘的图像,并将该图像也作为皮肤区域。第二步操作的目的是将眼角、嘴角等边缘部分也划分到皮肤区域中,使这些部分不被磨皮处理。在对处理结果要求不高时,也可省略该操作。
所述空间滤波,就是使用拉普拉斯矩阵,套在原始图像上进行加权矩阵计算。
下面为一个5×5的拉普拉斯矩阵的示例:
上述拉普拉斯变化的矩阵,核心取值是15,周围是-2。也就是在强调本身像素和周围不同像素的区别。这样可以通过不同颜色分离出边缘。实际应用中,拉普拉斯矩阵的各个算子也可以取其它值,只要能够满足分离出边缘的要求即可。
将初选皮肤区域的边缘像素周围预定范围内的像素均作为备选区域。
对于备选区域内坐标值为(i,j)的像素点Xi,j,将该像素点以及相邻以及次相邻的像素点组成一个5×5矩阵:
将矩阵(1)的各个算子与矩阵(2)对应位置的像素相乘,将所得乘积再累加求和,将所得和再除以矩阵(1)的算子之和,就得到坐标(i,j)处空间滤波后的值。
将备选区域内所有像素均进行空间滤波处理后,备选区域的图像能够更加精确的描述皮肤区域的边界。
步骤102:复制原始图像,得到一临时图像。
步骤103:对临时图像进行中值滤波。
中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心像素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级噪声的抑制效果好,在抑制随机噪声的同时可以有效保护边缘少受模糊。
以下通过具体例子对中值滤波进行说明。
假设从原始图像中选取一个大小为3×3的像素矩阵:
现在计算该矩阵中心位置的值,就是将该位置及其周围的像素值排序。周围的定义,要根据滑动窗口大小来定,本例子中仅包含与其直接相邻的像素,则滑动窗口大小为3×3。排序结果如下:1,2,2,3,4,5,6,7,7。找到位置在中间的值4。则将临时图像中与该矩阵中心位置坐标的像素值设为4。
对临时图像中的每个像素依次进行上述计算,就得到中值滤波后的临时图像。
滑动窗口的大小也可取为5×5,则需要考虑与中心像素直接相邻、以及次相邻的像素。需要考虑的图像矩阵的大小也为5×5。这种情况下的中值滤波过程与上述3×3的情况类似,故不再赘述。
步骤104:在所选定皮肤区域内,将临时图像的像素与原始图像对应坐标位置的像素合并,得到最终图像。
所述合并可以采用如下方式:
设定图层1的透明度t,对于皮肤区域内的坐标(i,j),中值滤波后的临时图像中该坐标的像素值为bmp1(i,j),原始图像中该坐标的像素值为bmp0(i,j),则合并后坐标(i,j)的像素值为:
result(i,j)=[bmp0(i,j)×(1-t/100)+bmp1(i,j)×t/100]
作为一种较佳的实施方式,所述选取皮肤区域用如下方法来实现:
在原始图像上新建一个蒙板图层,则原始图像为背景图层;
确定蒙板图层中与背景图层的皮肤区域对应的像素,即坐标与皮肤区域像素的坐标相同的那些像素;
将蒙板图层中所确定像素的像素值设为常数值C1,将蒙板图层中剩下像素的像素值设置为常数值C2。C1可以取为(#000000),表现为黑色区域;C2可以取为(#FFFFFF),表现为白色区域。实际应用中,C1和C2也可以取为其它预先设定的值。
这样,在蒙板图层中看,所有的像素分成了两部分,黑色的部分代表皮肤区域,白色的部分代表非皮肤区域,这样就可以很方便地选取皮肤区域。
本发明实施例还提出了一种人像磨皮装置,如图2所示,包括:
皮肤区域选取模块210,用于以鼠标点击处的像素值为基础,选取原始图像中人像的皮肤区域;
磨皮处理模块220,用于复制原始图像得到临时图像,对临时图像进行中值滤波;
合并输出模块230,用于在皮肤区域选取模块210所选取的皮肤区域内,将磨皮处理模块220得到的临时图像的像素与原始图像对应坐标位置的像素合并,得到最终图像。
所述皮肤区域选取模块210包括:皮肤区域初选单元211和边缘确定单元212,
皮肤区域初选单元211用于将鼠标点选的像素值作为基础像素值,计算图像中任意坐标(i,j)的像素值与基础像素值的差值,若差值小于预先设定的阈值,则认为坐标(i,j)处的像素属于皮肤区域,否则坐标(i,j)处的像素不属于皮肤区域;
或者,所述皮肤区域初选单元211用于将鼠标点击处的像素设为皮肤区域中的像素;搜索与皮肤区域直接相邻的像素,计算搜索到的像素与基础像素值的差值;将差值小于预先设定的阈值所对应的像素设为皮肤区域中的像素;
所述边缘确定单元212用于在皮肤区域初选单元确定的皮肤区域的基础上,确定皮肤区域的边缘。
所述皮肤区域选取模块210包括蒙板图层处理单元213,所述蒙板图层处理单元212用于在原始图像上新建一个蒙板图层;确定蒙板图层中与原始图像的皮肤区域对应的像素,即坐标与皮肤区域像素的坐标相同的那些像素;将蒙板图层中所确定像素的像素值设为常数值C1,将蒙板图层中剩下像素的像素值设置为常数值C2;较佳地,常数值C1为(#000000),表现为黑色区域;C2可以取为(#FFFFFF),表现为白色区域。
则所述边缘确定单元212用于将蒙板图层皮肤区域的边缘部分进行空间滤波,具体包括:将蒙板图层皮肤区域边缘预定范围内的像素作为备选区域的像素;对于备选区域内坐标值为(i,j)的像素Xi,j,将该像素以及周围的像素组成大小为M×M的像素点矩阵,所述M为自然数;将该像素点矩阵中的各个元素与预定的大小为M×M的拉普拉斯矩阵对应位置的算子分别相乘,将所得乘积再累加求和,所得和再除以所述拉普拉斯矩阵的算子之和,得到坐标(i,j)处空间滤波后的值。
较佳地,所述磨皮处理模块220包括:
像素矩阵选取单元221,用于从临时图像处理前的像素中选取N×N的像素矩阵;
排序单元222,用于将像素矩阵选取单元221所选取的N×N的像素矩阵中各个位置像素值大小排序,将位置在中间的值作为该像素矩阵中心位置的像素值。
所述合并输出模块230包括:
合并计算单元231,用于设定临时图像的透明度t,对于皮肤区域选取模块所确定的皮肤区域内的坐标(i,j),中值滤波后的临时图像中该坐标的像素值为bmp1(i,j),原始图像中该坐标的像素值为bmp0(i,j),根据公式result(i,j)=[bmp0(i,j)×(1-t/100)+bmp1(i,j)×t/100]计算合并后坐标(i,j)的像素值result(i,j);
输出单元232,用于在合并计算单元完成处理后,将结果输出。
本发明实施例方案中,用户只需一键操作就可以实现对拍摄的人像照片的特殊处理,而且不影响成像质量,最大程度地为用户节约了时间和费用。而且效果理想。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,智能终端或数码相机等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。