精华内容
下载资源
问答
  • 双边滤波

    2019-07-08 11:07:07
    #空间距离权重模板 import numpy as np from scipy import signal import cv2,math def getClosenessWeight(sigma_g,H,W): r,c = np.mgrid[0:H:1,0:W:1] r=r.astype(np.float64) c=c.astype(np.float64) pr...

    在这里插入图片描述

    #空间距离权重模板
    import numpy as np
    from scipy import signal
    import cv2,math
    def getClosenessWeight(sigma_g,H,W):
        r,c = np.mgrid[0:H:1,0:W:1]
        r=r.astype(np.float64)
        c=c.astype(np.float64)
        print(r)
        print(c)
        r-=(H-1)/2
        
        print(r)
        c-=(W-1)/2
        print(c)
        closeWeight = np.exp(-0.5*(np.power(r,2)+np.power(c,2))/math.pow(sigma_g,2))
        return closeWeight
    if __name__ =='__main__':
        a = getClosenessWeight(2,5,5)
        print(a)
    
    

    结果
    [[0. 0. 0. 0. 0.]
    [1. 1. 1. 1. 1.]
    [2. 2. 2. 2. 2.]
    [3. 3. 3. 3. 3.]
    [4. 4. 4. 4. 4.]]
    [[0. 1. 2. 3. 4.]
    [0. 1. 2. 3. 4.]
    [0. 1. 2. 3. 4.]
    [0. 1. 2. 3. 4.]
    [0. 1. 2. 3. 4.]]
    [[-2. -2. -2. -2. -2.]
    [-1. -1. -1. -1. -1.]
    [ 0. 0. 0. 0. 0.]
    [ 1. 1. 1. 1. 1.]
    [ 2. 2. 2. 2. 2.]]
    [[-2. -1. 0. 1. 2.]
    [-2. -1. 0. 1. 2.]
    [-2. -1. 0. 1. 2.]
    [-2. -1. 0. 1. 2.]
    [-2. -1. 0. 1. 2.]]
    [[0.36787944 0.53526143 0.60653066 0.53526143 0.36787944]
    [0.53526143 0.77880078 0.8824969 0.77880078 0.53526143]
    [0.60653066 0.8824969 1. 0.8824969 0.60653066]
    [0.53526143 0.77880078 0.8824969 0.77880078 0.53526143]
    [0.36787944 0.53526143 0.60653066 0.53526143 0.36787944]]

    数组练习

    import numpy as np
    from scipy import signal
    import cv2,math
    def getClosenessWeight(sigma_g,H,W):
        r,c = np.mgrid[0:H:1,0:W:1]
        r=r.astype(np.float64)
        c=c.astype(np.float64)
        r-=(H-1)/2
        c-=(W-1)/2
        closeWeight = np.exp(-0.5*(np.power(r,2)+np.power(c,2))/math.pow(sigma_g,2))
        return closeWeight
    def bfltGray(I,H,W,sigma_g,sigma_d):
        #I图像矩阵【0,1】
        #H,W模板
        #sigma_g 距离权重 >1
        #sigma_d 近似权重 <1
        #距离权重
        closenessWeight = getClosenessWeight(sigma_g,H,W)
        #模板中心位置
        cH = (H-1)/2
        cW = (W-1)/2
        rows,cols = I.shape
        bfltGrayImage = np.zeros(I.shape,np.float32)
        for r in range(rows):
            for c in range(cols):
                pixel = I[r][c]
                #判断边界
                rTop = 0 if r-cH<0 else r-cH
                rBottom = rows-1 if r+cH>rows-1 else r+cH
                cLeft = 0 if c-cW<0 else c-cW
                cRight = cols-1 if c+cW>cols-1 else c+cW
                print(rTop,rBottom,cLeft,cRight)
                #区域
                region = I[int(rTop):int(rBottom)+1,int(cLeft):int(cRight)+1]
                print(region)
                #相似性权重
                similarityWeightTemp = np.exp(-0.5*np.power(region-pixel,2.0)/math.pow
                                              (sigma_d,2))
                closenessWeightTemp = closenessWeight[int(rTop-r+cH):int(rBottom-r+cH+1),
                                int(cLeft-c+cW):int(cRight-c+cW+1)]
                print(rTop-r+cH,rBottom-r+cH+1,cLeft-c+cW,cRight-c+cW+1)
                print(closenessWeightTemp)
                #两个模板相乘
                weightTemp = similarityWeightTemp*closenessWeightTemp
                #归一化权重模板
                weightTemp = weightTemp/np.sum(weightTemp)
                bfltGrayImage[r][c] = np.sum(region*weightTemp)
    
    if __name__ =='__main__':
        #image = cv2.imread('E:\\sy2\\5\\img6.jpg',cv2.IMREAD_GRAYSCALE)
        I = np.array([[1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7],
                          [1,2,3,4,5,6,7]],np.uint8)
        medianBlurImage = bfltGray(I,3,3,2,2)
        
    '''
    

    结果

    0 1.0 0 1.0
    [[1 2]
     [1 2]]
    1.0 3.0 1.0 3.0
    [[1.         0.8824969 ]
     [0.8824969  0.77880078]]
    0 1.0 0.0 2.0
    [[1 2 3]
     [1 2 3]]
    1.0 3.0 0.0 3.0
    [[0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0 1.0 1.0 3.0
    [[2 3 4]
     [2 3 4]]
    1.0 3.0 0.0 3.0
    [[0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0 1.0 2.0 4.0
    [[3 4 5]
     [3 4 5]]
    1.0 3.0 0.0 3.0
    [[0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0 1.0 3.0 5.0
    [[4 5 6]
     [4 5 6]]
    1.0 3.0 0.0 3.0
    [[0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0 1.0 4.0 6.0
    [[5 6 7]
     [5 6 7]]
    1.0 3.0 0.0 3.0
    [[0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0 1.0 5.0 6
    [[6 7]
     [6 7]]
    1.0 3.0 0.0 2.0
    [[0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    0.0 2.0 0 1.0
    [[1 2]
     [1 2]
     [1 2]]
    0.0 3.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]
     [0.8824969  0.77880078]]
    0.0 2.0 0.0 2.0
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0.0 2.0 1.0 3.0
    [[2 3 4]
     [2 3 4]
     [2 3 4]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0.0 2.0 2.0 4.0
    [[3 4 5]
     [3 4 5]
     [3 4 5]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0.0 2.0 3.0 5.0
    [[4 5 6]
     [4 5 6]
     [4 5 6]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0.0 2.0 4.0 6.0
    [[5 6 7]
     [5 6 7]
     [5 6 7]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    0.0 2.0 5.0 6
    [[6 7]
     [6 7]
     [6 7]]
    0.0 3.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    1.0 3.0 0 1.0
    [[1 2]
     [1 2]
     [1 2]]
    0.0 3.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]
     [0.8824969  0.77880078]]
    1.0 3.0 0.0 2.0
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    1.0 3.0 1.0 3.0
    [[2 3 4]
     [2 3 4]
     [2 3 4]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    1.0 3.0 2.0 4.0
    [[3 4 5]
     [3 4 5]
     [3 4 5]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    1.0 3.0 3.0 5.0
    [[4 5 6]
     [4 5 6]
     [4 5 6]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    1.0 3.0 4.0 6.0
    [[5 6 7]
     [5 6 7]
     [5 6 7]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    1.0 3.0 5.0 6
    [[6 7]
     [6 7]
     [6 7]]
    0.0 3.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    2.0 4.0 0 1.0
    [[1 2]
     [1 2]
     [1 2]]
    0.0 3.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]
     [0.8824969  0.77880078]]
    2.0 4.0 0.0 2.0
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    2.0 4.0 1.0 3.0
    [[2 3 4]
     [2 3 4]
     [2 3 4]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    2.0 4.0 2.0 4.0
    [[3 4 5]
     [3 4 5]
     [3 4 5]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    2.0 4.0 3.0 5.0
    [[4 5 6]
     [4 5 6]
     [4 5 6]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    2.0 4.0 4.0 6.0
    [[5 6 7]
     [5 6 7]
     [5 6 7]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    2.0 4.0 5.0 6
    [[6 7]
     [6 7]
     [6 7]]
    0.0 3.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    3.0 5.0 0 1.0
    [[1 2]
     [1 2]
     [1 2]]
    0.0 3.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]
     [0.8824969  0.77880078]]
    3.0 5.0 0.0 2.0
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    3.0 5.0 1.0 3.0
    [[2 3 4]
     [2 3 4]
     [2 3 4]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    3.0 5.0 2.0 4.0
    [[3 4 5]
     [3 4 5]
     [3 4 5]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    3.0 5.0 3.0 5.0
    [[4 5 6]
     [4 5 6]
     [4 5 6]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    3.0 5.0 4.0 6.0
    [[5 6 7]
     [5 6 7]
     [5 6 7]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    3.0 5.0 5.0 6
    [[6 7]
     [6 7]
     [6 7]]
    0.0 3.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    4.0 6.0 0 1.0
    [[1 2]
     [1 2]
     [1 2]]
    0.0 3.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]
     [0.8824969  0.77880078]]
    4.0 6.0 0.0 2.0
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    4.0 6.0 1.0 3.0
    [[2 3 4]
     [2 3 4]
     [2 3 4]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    4.0 6.0 2.0 4.0
    [[3 4 5]
     [3 4 5]
     [3 4 5]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    4.0 6.0 3.0 5.0
    [[4 5 6]
     [4 5 6]
     [4 5 6]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    4.0 6.0 4.0 6.0
    [[5 6 7]
     [5 6 7]
     [5 6 7]]
    0.0 3.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]
     [0.77880078 0.8824969  0.77880078]]
    4.0 6.0 5.0 6
    [[6 7]
     [6 7]
     [6 7]]
    0.0 3.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]
     [0.77880078 0.8824969 ]]
    5.0 6 0 1.0
    [[1 2]
     [1 2]]
    0.0 2.0 1.0 3.0
    [[0.8824969  0.77880078]
     [1.         0.8824969 ]]
    5.0 6 0.0 2.0
    [[1 2 3]
     [1 2 3]]
    0.0 2.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]]
    5.0 6 1.0 3.0
    [[2 3 4]
     [2 3 4]]
    0.0 2.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]]
    5.0 6 2.0 4.0
    [[3 4 5]
     [3 4 5]]
    0.0 2.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]]
    5.0 6 3.0 5.0
    [[4 5 6]
     [4 5 6]]
    0.0 2.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]]
    5.0 6 4.0 6.0
    [[5 6 7]
     [5 6 7]]
    0.0 2.0 0.0 3.0
    [[0.77880078 0.8824969  0.77880078]
     [0.8824969  1.         0.8824969 ]]
    5.0 6 5.0 6
    [[6 7]
     [6 7]]
    0.0 2.0 0.0 2.0
    [[0.77880078 0.8824969 ]
     [0.8824969  1.        ]]
    

    图片代码

    #保留边缘的平滑算法 :双边滤波和导向滤波
    #双边滤波
    #空间距离权重模板
    import numpy as np
    from scipy import signal
    import cv2,math
    def getClosenessWeight(sigma_g,H,W):
        r,c = np.mgrid[0:H:1,0:W:1]
        r=r.astype(np.float64)
        c=c.astype(np.float64)
        print(r)
        print(c)
        r-=(H-1)/2
        
        print(r)
        c-=(W-1)/2
        print(c)
        closeWeight = np.exp(-0.5*(np.power(r,2)+np.power(c,2))/math.pow(sigma_g,2))
        return closeWeight
    
    def bfltGray(I,H,W,sigma_g,sigma_d):
        #I图像矩阵【0,1】
        #H,W模板
        #sigma_g 距离权重 >1
        #sigma_d 近似权重 <1
        #距离权重
        closenessWeight = getClosenessWeight(sigma_g,H,W)
        #模板中心位置
        cH = (H-1)/2
        cH = int(cH)
        cW = (W-1)/2
        cW = int(cW)
        rows,cols = I.shape
        bfltGrayImage = np.zeros(I.shape,np.float32)
        for r in range(rows):
            for c in range(cols):
                pixel = I[r][c]
                #判断边界
                rTop = 0 if r-cH<0 else r-cH
                rTop = int(rTop)
                rBottom = rows-1 if r+cH>rows-1 else r+cH
                rBottom = int(rBottom)
                cLeft = 0 if c-cW<0 else c-cW
                cLeft = int(cLeft)
                cRight = cols-1 if c+cW>cols-1 else c+cW
                cRight = int(cRight)
                #区域
                region = I[rTop:rBottom+1,cLeft:cRight+1]
                #相似性权重
                similarityWeightTemp = np.exp(-0.5*np.power(region-pixel,2.0)/math.pow
                                              (sigma_d,2))
                closenessWeightTemp = closenessWeight[rTop-r+cH:rBottom-r+cH+1,
                                cLeft-c+cW:cRight-c+cW+1]
                #两个模板相乘
                weightTemp = similarityWeightTemp*closenessWeightTemp
                #归一化权重模板
                weightTemp = weightTemp/np.sum(weightTemp)
                bfltGrayImage[r][c] = np.sum(region*weightTemp)
        return bfltGrayImage
    if __name__ =='__main__':
        image = cv2.imread('E:/sy2/5/img1.png',cv2.IMREAD_GRAYSCALE)
        cv2.imshow('image',image)
        #将灰度值归一化
        image = image/255.0
        bfltImage = bfltGray(image,33,33,19,0.2)
        cv2.imshow('BilateralFiltering',bfltImage)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    

    在这里插入图片描述
    在这里插入图片描述
    opencv提供双边滤波函数
    bilateralFilter
    adaptiveBilateralFilter

    展开全文
  • 图像滤波原理之双边滤波

    千次阅读 2019-08-17 22:40:39
    图像滤波原理之双边滤波图像滤波问题描述1. 空间(即图像定义域)相邻关系的滤波器2....令I∈Rh×w×cI\in R^{h\times w\times c}I∈Rh×w×c表示图像是一个二维矩阵,h,wh,wh,w分别表示图像的高度和宽度,c=1,3c=1,3...

    图像滤波问题描述

    为了内容的完整性,首先对图像滤波进行简单的回顾。令IRh×w×cI\in R^{h\times w\times c}表示图像,是一个二维矩阵,h,wh,w分别表示图像的高度和宽度,c=1,3c=1,3分别表示灰度图像和彩色图像,II中的每个元素I(i,j)I(i,j)称作一个像素。不失一般性,我们以c=1c=1即灰度图为例。本质上图像II是一个定义二维网格点上的函数,也即I:(i,j)R2I(i,j)RI:(i,j)\in R^{2} \rightarrow I(i,j)\in R
    f:IRh×wI^Rh×wf:I\in R^{h\times w}\rightarrow \hat{I}\in R^{h\times w}表示滤波器。常见的滤波过程就是:计算每个像素I(i,j)I(i,j)经过滤波后的值I^(i,j)\hat{I}(i,j),都是通过加权像素I(i,j)I(i,j)的邻域像素值,如下公式所示:
    (1)I^(i,j)=fI(i,j)=1w(i,j)(i,j)Nw(i,j)I(i,j)\hat{I}(i,j)=f\circ I(i,j)=\frac{1}{\sum w(i&#x27;,j&#x27;)}\sum_{(i&#x27;,j&#x27;)\in N} w(i&#x27;,j&#x27;)I(i&#x27;,j&#x27;)\tag{1}
    其中NN表示像素I(i,j)I(i,j)的邻域(也称滤波器的窗口),注意这里的邻域关系仅仅是像素点在定义域的相邻关系,如图像上的8邻域等。

    1. 空间(即图像定义域)相邻关系的滤波器

    常见的滤波器,如高斯滤波器,均值滤波器等,都属于这一类滤波器。
    如(1)式所示,当权重
    w(i,j)=1nw(i&#x27;,j&#x27;)=\frac{1}{n}其中n=Nn=|N|表示邻域像素的个数, 这就均值滤波器。
    当权重
    w(i,j)=12πσ2e(ii)2+(jj)22σ2w(i&#x27;,j&#x27;)=\frac{1}{2\pi\sigma^2}e^{-{\frac{(i&#x27;-i)^2+(j&#x27;-j)^2}{2\sigma^2}}}
    就是通常的高斯滤波器。

    注意这类滤波器,在进行图像滤波的时候仅仅考虑图像的定义域上的邻域关系(也即空间上的邻域关系)。这样通常会导致图像模糊,因为仅仅按图像定义域或空间上的相邻关系,会导致空间(或定义域)上相邻但是像素值相差巨大的像素参与滤波过程,如下图所示:按8邻域关系,计算点AA的高斯滤波或均值滤波时,空间相邻的像素点B,C,D,EB,C,D,E(注意它们的像素值(白)与AA点的像素值(黑)相差很大),会参与滤波公式(1)中的加权平均。很显然,滤波后会导致,在AA点附近的图像边缘会出现模糊。

    滤波仅考虑图像定义域上的相邻关系下面就介绍双边滤波,能够在很大程度上避免这一种仅仅依靠图像定义域相邻引起的图像模糊。

    2. 双边滤波器(bilateral filter)

    如何将上图中的点AAB,C,D,EB,C,D,E区分开来,使得(1)式中计算AA点的加权平均时,B,C,D,EB,C,D,E贡献的权重为0(当然这是理想的情况),就成了关键。那么一个很自然的想法是,同时考虑像素点的像素值,这样将像素点投到高维空间,那么有可能B,C,D,EB,C,D,E将不再是AA的相邻点。因为在低维空间中不易区分的点,在高维空间中可能比较容易区分开来。这点类似SVM(支持向量机)中的核函数设置的思想。

    同时统计像素点AA的坐标和像素值,这其实就是图像函数I:(i,j)I(i,j)RI:(i,j)\rightarrow I(i,j)\in R的graph, 记作
    (2)G={(i,j,I(i,j)):(i,j)}G=\{(i,j,I(i,j)):(i,j)是图像像素坐标\}\tag{2}
    它是一个二维流形(嵌入在三位欧式空间R3R^3中),其实就是一个曲面,显然在这个graph GG上,B,C,D,EB,C,D,EAA不再是相邻点。但是在直接二维流形GG上寻找点的相邻点可能非常复杂,因为曲面的形状可能很不规则(曲率不为0),不像二维平面网格点(i,j)(i,j)那样容易寻找相邻点。

    为了计算方便,退而求其次,把二维曲面GG嵌入在三维空间中考虑,利用三维欧式空间R3R^3的曲率为0,在三维网格点中寻找相邻点,这样就和在二维网格中种寻找相邻点一样方便。但是考虑到嵌入的GG实则是函数II的图像graph,本质上是二维的,所以双边滤波仍按定义域寻找相邻点即可,但是要减弱这些相邻点中颜色差异较大的点对滤波贡献的权重。

    可以看到,在把GG嵌入三维空间考虑时,AA点在对应(iA,jA,IA)(i_A,j_A,I_A)。以DD点为例,DD对应(iD,jD,ID)(i_D,j_D,I_D)。不妨以欧式范数为例,在三维空间中A,DA,D之间的距离为
    (3)d(A,D)=(iDiA)2+(jDjA)2+(IDIA)2=1+1+(IDIA)2d(A,D)=\sqrt{(i_D-i_A)^2+(j_D-j_A)^2+(I_D-I_A)^2}=\sqrt{1+1+(I_D-I_A)^2}\tag{3}
    则如上面(3)式所示,那么当A,DA,D的像素值之差IDIA|I_D-I_A|很大时,那么在GGd(A,D)d(A,D)距离就很远。
    而双边滤波正是通过,考虑这种距离来弱化DDAA的影响,这点可以从下面双边滤波的公式中,得到体现
    (4)I^A=1w(q,A)qNw(q,A)Iq\hat{I}_A=\frac{1}{\sum w(q,A)}\sum_{q\in N}w(q,A)I_q\tag{4}
    其中,NN是点AA的邻域,
    w(q,A)=e(iqiA)2+(jqjA)22σs2(IqIA)22σr2w(q,A)=e^{-\frac{(i_q-i_A)^2+(j_q-j_A)^2}{2\sigma_{s}^{2}}-\frac{(I_q-I_A)^2}{2\sigma_{r}^2}}

    显然,当q,Aq,A之间的像素值相差很大时,w(q,A)w(q,A)就会变得很小,从而达到了弱化qq点对AA点的滤波值的影响,易见上图中的B,C,D,EB,C,D,EAA的距离很大(在R3R^3中考虑它们之间的距离时)。所以滤波时,B,C,D,EB,C,D,EAA的影响就大大减弱,从而大大减轻滤波后边界模糊的现象,达到了保边滤波的效果。

    3. 如何快速实现双边滤波

    即使双边滤波有很好的保边效果,但是当图像的尺寸以及滤波器的窗口尺寸很大时,双边滤波的速度就可能很慢。双边滤波这不像通常的高斯滤波和均值率波等,双边滤波(4)式中的权重系数ww是与图像的像素值有关的,因而不能像高斯滤波或者均值滤波那样有固定的模板通过卷积快速实现。后面系列,会介绍快速实现近似双边滤波的相关文章[1]以及在双边滤波在深度学习中的应用。。。。。

    [1]: Fast high-dimensional filtering using the permutohedral lattice.

    展开全文
  • 联合双边滤波

    2019-07-08 12:52:21
    #联合双边滤波 #图像高斯平滑,近似性权重由高斯平滑后确定 import numpy as np from scipy import signal import cv2,math def getClosenessWeight(sigma_g,H,W): ... r=r.astype(np.float64) c=c.astype...
    #联合双边滤波
    #图像高斯平滑,近似性权重由高斯平滑后确定
    import numpy as np
    from scipy import signal
    import cv2,math
    def getClosenessWeight(sigma_g,H,W):
        r,c = np.mgrid[0:H:1,0:W:1]
        r=r.astype(np.float64)
        c=c.astype(np.float64)
        r-=(H-1)/2
        c-=(W-1)/2
        closeWeight = np.exp(-0.5*(np.power(r,2)+np.power(c,2))/math.pow(sigma_g,2))
        return closeWeight
    def jointBLF(I,H,W,sigma_g,sigma_d,borderType=cv2.BORDER_DEFAULT):
        closenessWeight = getClosenessWeight(sigma_g,H,W)
        #高斯平滑
        Ig = cv2.GaussianBlur(I,(W,H),sigma_g)
        cH = int((H-1)/2)
        cW = int((W-1)/2)
        Ip = cv2.copyMakeBorder(I,cH,cH,cW,cW,borderType)
        Igp = cv2.copyMakeBorder(Ig,cH,cH,cW,cW,borderType)
        rows,cols = I.shape
        i,j = 0,0
        jblf = np.zeros(I.shape,np.float64)
        for r in np.arange(cH,cH+rows,1):
            for c in np.arange(cW,cW+cols,1):
                pixel = Igp[r][c]
                rTop,rBottom = r-cH,r+cH
                cLeft,cRight = c-cW,c+cW
                region = Igp[rTop:rBottom+1,cLeft:cRight+1]
                similarityWeight = np.exp(-0.5*np.power(region-pixel,2.0)/math.pow(sigma_d,2.0))
                weight = closenessWeight*similarityWeight
                weight = weight/np.sum(weight)
                jblf[i][j] = np.sum(Ip[rTop:rBottom+1,cLeft:cRight+1]*weight)
                j+=1
            j = 0
            i+=1
        return jblf
    if __name__ =='__main__':
        I = cv2.imread('E:/sy2/5/img3.jpg',cv2.IMREAD_GRAYSCALE)
        cv2.imshow('I',I)
        fI = I.astype(np.float64)
        jblf = jointBLF(fI,33,33,7,2)
        jblf = np.round(jblf)
        jblf = jblf.astype(np.uint8)
        cv2.imshow('jblf',jblf)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 双边滤波matlab

    2020-07-02 15:44:25
    直接上代码 function img = ...% c,r分别为核kerSize的垂直半径和水平半径 c = floor(kerSize(1)/2); r = floor(kerSize(2)/2); % 镜像填充边界 padImage = padarray(Image, [c, r], 'symmetric');

    直接上代码


    function img = myBilateralFilter(Image, kerSize, delta)
    % Image 待滤波图像
    % kerSize 滤波核大小
    % delta 标准差
    % img 输出图像
    
    %%
    % c,r分别为核kerSize的垂直半径和水平半径
    c = floor(kerSize(1)/2);
    r = floor(kerSize(2)/2);
    
    % 镜像填充边界
    padImage = padarray(Image, [c, r], 'symmetric');
    img = zeros(size(Image));
    
    % G distance weight
    siz = (kerSize-1)/2;
    std = delta;
    [x, y] = meshgrid(-siz(2): siz(2), -siz(1): siz(1));
    arg    = -(x.*x + y.*y)/(2*std*std);
    G      = exp(arg);
    G(G<eps*max(G(:))) = 0;
    sumG = sum(G(:));
    if sumG ~= 0
       G  = G/sumG;
    end;
    
    % H为intensity weight 
    [iHeight, iWidth] = size(Image);
    padImage = double(padImage);
    for i = c+1: iHeight+c
        for j = r+1: iWidth+r
            tmp = padImage(i-c: i+c, j-r: j+r);
            t = tmp - double(Image(i-c, j-r)).*ones(2*c+1, 2*r+1);
            H   = exp(-t.*t/(2*delta*delta));
            sumH = sum(H(:));
            if sumH ~= 0
                H = H/sumH;
            end
            W   = G.*H;
            s = tmp.*W;
            img(i-r, j-r) = sum(s(:))/sum(W(:));
        end
    end
    
            

    函数调用

    delta = 5;
    bilateralImg = myBilateralFilter(Image, [5, 5], delta);
    bilateralImg = uint8(bilateralImg);

     

    展开全文
  • 双边滤波和冲击滤波

    千次阅读 2017-11-19 19:27:51
    function B = bfilter2(A,w,sigma) %A为给定图像,归一化到[0,1]的double矩阵 %W为双边滤波器(核)的边长/2 %定义域方差σd记为SIGMA(1),值域方差σr记为SIGMA(2) % This function implements 2-D
  • 双边滤波加速

    千次阅读 2017-08-24 19:25:06
    其思想是:空间系数是高斯滤波器系数,值域系数为考虑了邻域像素点与中心像素点的像素值的差值,当差值较大时,值域系数r较小,即,为一个递减函数(高斯函数正半部分),带来的结果是总的系数w=d*r变小,降低了与...
  • C语言实现双边滤波

    2020-11-28 19:37:54
    参考博文 看不懂公式的先去看参考博文 一个3*3窗口的代码 ...*参数 varR 值域核r的标准差 *typedef unsigned char uint8; *typedef unsigned int uint16; *需要引用头文件math.h 宏定义说明 #define COL 5.
  • 高斯滤波函数、双边滤波函数的MATLAB实现高斯滤波函数双边滤波函数 自己编写滤波函数,剖析滤波内部结构 ... r=3; % 高斯模板的参数 NoiseI= imnoise(Image,'gaussian'); % 加噪,添加高斯噪声 gaus...
  • 双边滤波自我理解

    2018-11-06 23:42:09
    双边滤波(bilateral filters)有两个权重域的概念:空间域(spatial domain S)和像素范围域(range domain R),这个是它跟高斯滤波等方法的最大不同点,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时...
  • 双边滤波原理理解

    千次阅读 2017-08-26 19:04:06
    当前像素点p的值,由邻域N(p)中的所有像素点q∈N(p)q\in N(p)加权求和得到,权重系数为WpqW_{pq},Wpq=Gσs(||p−q||)Gσr(||Ip−Iq||W_{pq}=G_{\sigma_s}(||p-q||)G_{\sigma_r}(||I_p-I_q||GσG_{\
  • 1 近期在学习双边滤波相关知识,其原理如下(以后补上):2 灰度图双边滤波实现C++代码如下,网上大多数是基于8位灰度图和彩色图像的。... dst,int radius,float sigma_r,float sigma_d) { if (s...
  • bilareralFilter双边滤波函数

    千次阅读 2015-08-20 11:24:59
    C++: void **bilateralFilte**r(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )¶  表示对图像进行双边滤波,它能很好地对图像进行滤波,去除...
  • matlab:C语言逻辑实现双边滤波。 代码: clear all; close all; clc; img=imread('E:\matlabCX\图片\7.jpg'); img=mat2gray(img); [m n]=size(img);...r=10;...imgn=zeros(m+2*r+1,n+2*r+1);...imgn(r+1:m+r,r...
  • 对双边滤波的理解

    2017-10-23 19:39:00
    双边滤波是非线性滤波方式的一种,可以有效地保存边缘信息。现在针对其函数公式,对其作用做出分析 首先是计算公式: 其中w(i,j,k,l)的计算方法如下: ...正是r函数的作用,使得边缘,即相...
  • Bilateral Filter(双边滤波)

    千次阅读 2018-06-22 21:25:39
    双边滤波不同于高斯滤波对待处理图像各处都用同一个卷积核,双边滤波根据当前图像窗口的像素值分布...双边滤波公式 其中: 对于两个 参数取值,一般为: s : 源图像斜对角线长度*2% r : 源图像梯度值的中值或者...
  • % matlab 2012b % 灰度图的双边滤波 clc; clear; %-------双边滤波 参数 ----------------- r = 3; %半径 窗口 长 = 宽 = 2*r+1 sigma_space = 5.0; %空间标准差 ...for i = 1:r+1 %i为横坐标之差的绝对值 + .
  • 双边滤波的学习

    2010-06-24 09:32:00
    最近看Retinex方面的文章,看到了用双边滤波的算法思想,所以又追溯到这个滤波的起源,得知它是C.Tomasi和R.Manduchi在1998年的一篇文章中提出的。是将Range filter和Domain filter结合在一起产生的滤波。综合考虑了...
  • I(p) = \frac{1}{W_p}\sum_{q \in S}G_{\sigma_s}(\parallel p-q \parallel)G_{\sigma_r}(\parallel I_p-I_q \parallel)I_q I(p)=Wp​1​q∈S∑​Gσs​​(∥p−q∥)Gσr​​(∥Ip​−Iq​∥)Iq​ ...
  • % matlab 2012b % 彩色图的双边滤波 clc; clear; ... %半径 窗口 长 = 宽 = 2*r+1 sigma_space = 15.0; %空间标准差 sigma_color = 10.0; %相似标准差 w_space = zeros(1,r+1); %空间权重 for i =.
  • 双边滤波matlab实现源码 % Filename : bialteralFitler_func.m % Author : Mario爱吃大虾 ...% 值域sigma_r % 输出:图像B % Revision : 2021/01/10 % *********************************************************
  • 双边滤波    高斯滤波是最常用的图像去噪方法之一,它能很好地滤除掉图像中随机出现的高斯噪声,但是在之前的博客中提到过...  在平坦区域,滤波器中每个像素点的G r G_{r}Gr​值相近,空间距离权重G s G_{s}Gs.
  • 双边滤波matlab代码

    千次阅读 2013-10-24 13:48:25
    %简单地说: %A为给定图像,归一化到[0,1...%定义域方差σd记为SIGMA(1),值域方差σr记为SIGMA(2) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Pre-process input and select appropriate filte
  • 双边滤波亮度相似度因子仅受[σr]一个参数的约束,很难准确辨析图像平滑区域及细节丰富区域的纹理信息,不能较好地保留纹理细节信息。基于此,提出一种自适应分数阶微分与双边滤波相结合的图像去噪方法。在双边滤波...
  • 以输入图像上src上任一点P0为圆心,建立物理空间上半径为sp,色彩空间上半径为sr的球形空间,物理空间上坐标2个—x、y,色彩空间上坐标3个—R、G、B(或HSV),构成一个5维的空间球体。 其中物理空间的范围x和y是...
  • 【计算机视觉】双边滤波 bilateral filter 方法 大一统的高维高斯滤波表达式 对任意的位置 pi 处的值 vi 进行滤波,与...如果位置 pi 是像素位置与颜色的联合,比如x,y,r,g,b共五维,那么该公式表达的是颜色双边滤...
  • opencv函数实现均值、中值、高斯、高斯双边滤波 ...img = cv2.imread(r"E:/tu/11.jpg") result0 = cv2.bilateralFilter(img,30,100,20) # 高斯双边滤波 result1 = cv2.blur(img,(5,5)) #均值滤波 result2 = c...
  • 灰度图像双边滤波代码

    千次阅读 2012-04-20 11:12:41
    function B = bfltGray(A,w,sigma_d,sigma_r) % Pre-compute Gaussian distance weights. [X,Y] = meshgrid(-w:w,-w:w); G = exp(-(X.^2+Y.^2)/(2*sigma_d^2)); % Apply bilateral filter. dim = size(A); B = zero
  • 为了解决传统的卷积神经网络着色方法带来语境混淆、边缘模糊和细节信息丢失度高等问题,设计了一个改进的基于密集神经网络的区域全卷积神经网络(R-FCN)和基于局部特征网络的分支神经网络模型。通过DenseNet可准确...
  • 专家视点光纤激光器中基于偏振的滤波技术...在此,R. I. Woodward和E. J. R. Kelleher利用遗传算法和电子控制腔传递函数,实现了宽波长调谐和可变重复频率和持续时间的自调谐自脉冲Q光纤激光器并探讨了这类光纤激光...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

双r波