图像处理的一个简化的磨皮算法

用双边滤波来做图像磨皮,这是最常用的办法。说到双边滤波,其实不太理解“边”是个什么意思,其实更通俗的应该叫做双”因素“滤波,或者双”域“滤波。所谓双域就是空间域和值域。双边滤波简单说来还是做一个图像卷积,卷积系数由值域因素和空间域因素共同决定,离中心点越近的点其权重越大,反之越小,值与中心点的值越接近,其权重越大,反之越小。也就是说,双边滤波的卷积系数在空间上和值域上都是一个高斯滤波。最终的权重由这两个权重的乘积决定。

双边滤波程序大量的时间花费在了计算邻域每个点的卷积系数上。于是我对它进行了一点简化,说先是空间上用均值滤波代替高斯滤波,也就是不再计算空间上的高斯系数,其次是在值域上设置一个阈值,邻域上与中心点值之差小于阈值的,卷积系数取1,否则取0,这样就不在值域上套用高斯公式了。

看一下效果,原图:

磨皮算法python 计算磨皮法_磨皮算法python

处理之后:

磨皮算法python 计算磨皮法_磨皮算法python_02

效果还是比较明显。

细细想一下,其实就是不管在值域还是空间域上都用矩形函数代替了高斯函数:

磨皮算法python 计算磨皮法_磨皮算法python_03

所以这种简化之于原来的双边滤波的关系就仿佛均值滤波之于高斯滤波的关系,不过是一种更简单粗暴,更”糙“一点的滤波而已。但是因为邻域小,参与计算的点少,而且不用计算卷积系数。所以比双边滤波更简单更快,效果当然不如双边滤波来的好。