美文网首页
opencv+python -- 图像模糊处理(三)---边缘保

opencv+python -- 图像模糊处理(三)---边缘保

作者: 小兵12138 | 来源:发表于2019-04-12 17:44 被阅读0次

双边滤波

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波
函数原型
bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)
src参数表示待处理的输入图像。

d参数表示在过滤期间使用的每个像素邻域的直径。如果输入d非0,则sigmaSpace由d计算得出,如果sigmaColor没输入,则sigmaColor由sigmaSpace计算得出。

sigmaColor参数表示色彩空间的标准方差,一般尽可能大。较大的参数值意味着像素邻域内较远的颜色会混合在一起,从而产生更大面积的半相等颜色。

sigmaSpace参数表示坐标空间的标准方差(像素单位),一般尽可能小。参数值越大意味着只要它们的颜色足够接近,越远的像素都会相互影响。当d > 0时,它指定邻域大小而不考虑sigmaSpace。 否则,d与sigmaSpace成正比。

均值漂移

pyrMeanShiftFiltering(src, sp, sr, dst, maxLevel, termcrit)
src参数表示输入图像,8位,三通道图像。

sp参数表示漂移物理空间半径大小。

sr参数表示漂移色彩空间半径大小。

dst参数表示和源图象相同大小、相同格式的输出图象。

maxLevel参数表示金字塔的最大层数。

termcrit参数表示漂移迭代终止条件。

import cv2 as cv


def bi_demo(image):
    """色彩窗的半径,图像将呈现类似于磨皮的效果"""
    # image:输入图像,图像必须是8位或浮点型单通道、三通道的图像
    # 0:表示在过滤过程中每个像素邻域的直径范围,一般为0
    # 后面两个数字:空间高斯函数标准差,灰度值相似性标准差
    dst = cv.bilateralFilter(image, 0, 100, 15)
    cv.imshow("bi_demo", dst)


def shift_demo(image):
    """均值迁移,图像会呈现油画效果"""
    # 10:空间窗的半径
    # 50:色彩窗的半径
    dst = cv.pyrMeanShiftFiltering(image, 10, 50)
    cv.imshow("shift_demo", dst)


src = cv.imread("./data/lena.jpg", cv.IMREAD_COLOR)
cv.namedWindow("lena", cv.WINDOW_AUTOSIZE)
cv.imshow("lena", src)
bi_demo(src)
shift_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

edge_preserving_filtering.png

相关文章

网友评论

      本文标题:opencv+python -- 图像模糊处理(三)---边缘保

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