表面模糊

作者: 雨幻逐光 | 来源:发表于2018-11-21 22:16 被阅读0次

    表面模糊是一种图像的模糊算法。就我的理解而言,这个算法也是一种保护细节的算法,也能起到保护边缘的作用。算法的原理其实比较简单。先来看看算法的原理公式:

    公式.png

    其中:r表示进行模糊操作的半径,Y表示阈值大小,x1代表中心像素值或者当前要求解位置的当前像素值,xi表示当前处理的模板对应的像素值。

    从公式我们能够很清楚地知道公式代表的物理意义是什么。即在选定半径的一个方形区域内,我们要计算出当前方形区域中心点的像素值是通过这个方形区域的不同位置对应像素点像素值的加权平均。而权重来的相当有意思,如果像素点的像素值与center像素点的像素值差别很大时,其对应的权重就很小。换句话说,这个点在当前我们想要处理得到的center像素值而言,出力很少。这个也是它为什么效果这么出众的原因。它不像其他简单的模糊算法一样,如均值滤波器,中指滤波器亦或是高斯滤波器等,并不考虑像素值差异,直接取均值,中值或者按固定的参数权重进行加权平均。这也是为什么表面模糊能够起到很好的保护细节,保护边缘的作用。

    在实际实现过程中,我们一定要注意要对权重进行判断。即进行max(0,weighti)的操作。而这边的常数2.5应该是个经验值,使得大部分差值不算大的像素值的权重不为0,对最后的求解点像素值有一定贡献,起到平滑作用。但是又能抑制那些像素值差异较大的点,使得他们的权重为0。Y在这里的意义是类似的,只不过是开放了一个接口使我们可以调整我们的权重大小。Y值越大,将有更多的点(即像素差异点较大的点会更多的参与到平滑作用中去)参与到平滑过程中去。换句话说,Y越大,模糊效果越明显,平滑效果显著,但是伤害的细节和边缘就越严重。反之则平滑越小,边缘和细节的保护越多。当Y趋于无穷大时,表面模糊就退化成均值模糊。而半径则是选择参与平滑计算的像素点的个数多少的度量。类似于均值、中值、高斯滤波器的kernel的大小。kernel的边长为2 * r + 1。r为半径。
    下面是我自己用c++实现的效果图:(其中半径r取20,Y阈值取28)

    表面模糊效果图.png

    相关文章

      网友评论

        本文标题:表面模糊

        本文链接:https://www.haomeiwen.com/subject/dpbhqqtx.html