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

    2019-07-08 12:52:21
    #联合双边滤波 #图像高斯平滑,近似性权重由高斯平滑后确定 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....
    #联合双边滤波
    #图像高斯平滑,近似性权重由高斯平滑后确定
    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()
    

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

    展开全文
  • 双边滤波解释 联合双边滤波解释

    千次阅读 2018-08-08 20:26:28
    https://blog.csdn.net/nature_XD/article/details/69258553 Bilateral Filter、Cross/Joint Bilateral Filter   https://blog.csdn.net/panda1234lee/article/details/52839205 联合双边滤波
    展开全文
  • 资源包含联合双边滤波算法的matlab版代码 资源包含联合双边滤波算法的matlab版代码
  • 联合双边滤波代码,可在MATLAB上运行。已经调测。内含测试图片,方便快捷,下载即可用。联合双边滤波代码。
  • 联合双边滤波与双边滤波之间的差别就是JBF用了一个引导图作为值域权重的计算依据,但是空间域权重计算仍然基于原图: 3. 联合双边滤波代码 3.1 python opencv实现 import cv2 import matplotlib.pyplot as plt if ...

    1. 回顾: 双边滤波(BF)

    具体参考上篇博客:图像滤波之双边滤波

    img

    2. 联合双边滤波(JBF)

    联合双边滤波与双边滤波之间的差别就是JBF用了一个引导图作为值域权重的计算依据,但是空间域权重计算仍然基于原图:

    2019-08-29-2

    3. 联合双边滤波代码

    3.1 python opencv实现

    import cv2
    import matplotlib.pyplot as plt
    
    if __name__ == "__main__":
        image = cv2.imread('lena512.bmp', 0)[200:400, 200:400]
        blur_img = cv2.resize(image, (25, 25))
        blur_img = cv2.resize(blur_img, (200, 200))
    
        plt.figure()
        for i, sigma_color in enumerate([10, 100, 200]):
            for j, sigma_space in enumerate([10, 100, 200]):
                bf_img = cv2.ximgproc.jointBilateralFilter(blur_img, image, 9, sigma_color, sigma_space)
                plt.subplot(3, 3, i*3+j+1)
                plt.axis('off')
                plt.title('sigma_color: %d,sigma_space: %d' % (sigma_color, sigma_space))
                plt.imshow(bf_img, cmap='gray')
        plt.show()
    

    2019-08-29-2

    2019-08-29-2

    3.2 纯python实现

    import numpy as np
    import cv2
    import math
    import matplotlib.pyplot as plt
    
    
    def distance(x, y, i, j):
        return np.sqrt((x-i)**2 + (y-j)**2)
    
    
    def gaussian(x, sigma):
        return (1.0 / (2 * math.pi * (sigma ** 2))) * math.exp(- (x ** 2) / (2 * sigma ** 2))
    
    
    def joint_bilateral_filter(image, reference_image, diameter, sigma_color, sigma_space):
        assert image.shape == reference_image.shape
        width = image.shape[0]
        height = image.shape[1]
        radius = int(diameter / 2)
        out_image = np.zeros_like(image)
    
        print('===============START=================')
        for row in range(height):
            for col in range(width):
                current_pixel_filtered = 0
                weight_sum = 0  # for normalize
                for semi_row in range(-radius, radius + 1):
                    for semi_col in range(-radius, radius + 1):
                        # calculate the convolution by traversing each close pixel within radius
                        if row + semi_row >= 0 and row + semi_row < height:
                            row_offset = row + semi_row
                        else:
                            row_offset = 0
                        if semi_col + col >= 0 and semi_col + col < width:
                            col_offset = col + semi_col
                        else:
                            col_offset = 0
                        color_weight = gaussian(reference_image[row_offset][col_offset] - reference_image[row][col], sigma_color)
                        space_weight = gaussian(distance(row_offset, col_offset, row, col), sigma_space)
                        weight = space_weight * color_weight
                        current_pixel_filtered += image[row_offset][col_offset] * weight
                        weight_sum += weight
    
                current_pixel_filtered = current_pixel_filtered / weight_sum
                out_image[row, col] = int(round(current_pixel_filtered))
        print('===============FINISH=================')
        return out_image
    
    
    
    if __name__ == "__main__":
        image = cv2.imread('lena512.bmp', 0)[200:400, 200:400]
        blur_img = cv2.resize(image, (25, 25))
        blur_img = cv2.resize(blur_img, (200, 200))
        plt.imshow(blur_img)
        plt.show()
        plt.figure()
        for i, sigma_color in enumerate([10, 100, 200]):
            for j, sigma_space in enumerate([10, 100, 200]):
                bf_img = joint_bilateral_filter(blur_img, image, 9, sigma_color, sigma_space)
                plt.subplot(3, 3, i*3+j+1)
                plt.axis('off')
                plt.title('sigma_color: %d,sigma_space: %d' % (sigma_color, sigma_space))
                plt.imshow(bf_img, cmap='gray')
        plt.show()
    

    2019-08-29-2

    2019-08-29-2

    展开全文
  • 联合双边滤波代码,可在MATLAB上运行,已调试The joint bilateral filtering code can be run on MATLAB and has been debugged.
  • 在前面学习了双边滤波,虽然实现保边平滑的效果,但是平滑效果有时候不如高斯平滑。那么有没有改进的方法呢?...把这种方法叫做联合双边滤波,双边滤波的公式如下: 根据联合双边滤波可以把公式改为这样: ...

    在前面学习了双边滤波,虽然实现保边平滑的效果,但是平滑效果有时候不如高斯平滑。那么有没有改进的方法呢?这里来回忆一下,前面双边滤波里,使用原图像的灰度相似度作为相似算法,是否可以从这里下手呢?其实是可以的。可以先对原图像进行高斯平滑,然后把这幅图像的灰度值作为计算相似度,替代双边滤波里的原图像相似度计算。把这种方法叫做联合双边滤波,双边滤波的公式如下:

    http://images.cnitblog.com/i/349293/201404/202104267287328.png

    根据联合双边滤波可以把公式改为这样:

    http://images.cnitblog.com/i/349293/201404/202107372139002.png

    这里可以看到灰度值计算方式发生了改变,它是从高斯平滑之后的图片里取值,是引入另外一幅图像,不是原始图像。在python里,要使用这个功能,需要安装opencv-contrib-python,如果原来已经安装opencv-python,要先删除再安装它,进行如下操作:

    pip uninstall opencv-python (如果已经安装opencv-python包,先卸载)

    pip install opencv-contrib-python

    当安装成功之后,就可使用下面的例子来测试联合双边滤波:

    #python 3.7.4,opencv4.1
    #蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
    #
    import cv2
    import numpy as np
    
    #图片的路径
    imgname = "imgjbf.png"
    
    #读取图片
    image = cv2.imread(imgname, cv2.IMREAD_COLOR)
    
    #图片的高度和宽度
    h,w = image.shape[:2]
    print('imagesize={}-{}'.format(w,h))
    
    #显示原图
    cv2.imshow("Image",image)
    
    #平滑
    joint  = cv2.GaussianBlur(image,(33,33),3,3)
    out = cv2.ximgproc.jointBilateralFilter(joint,image,-1,10,9)
    #out = out.astype(np.uint8)
    cv2.imshow("joint",joint)
    cv2.imshow("out",out)
    
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    结果输出如下:

    输入原图

    联合双边滤波后图片

    高斯平滑后的图片

    调用函数的定义:

    joint: 进行联合滤波的导向图像,可以为单通道或多通道,保持边缘的滤波算法时常采用src

    src: 输入图像对象矩阵,可以为单通道或多通道

    d:用来计算卷积核的领域直径,如果d<0,从sigmaSpace计算d

    sigmaColor:颜色空间滤波器标准偏差值,决定多少差值之内的像素会被计算(构建灰度值模板)

    sigmaSpace:坐标空间中滤波器标准偏差值。如果d>0,设置不起作用,否则根据它来计算d值(构建距离权重模板)

    https://blog.csdn.net/caimouse/article/details/51749579

    展开全文
  • Opencv之联合双边滤波

    2019-12-23 20:49:03
    1.介绍 双边滤波是一种可以保边去噪的滤波器,主要是因为它的核...而对于联合双边滤波与双边滤波的区别主要在于值域小核所用到的图片,如果所用到的图片是引入的另外一幅图像,那么就是在使用联合双边滤波。 ...
  • 使用联合双边滤波进行运动对象分割的Kong填充
  • 贝叶斯迭代联合双边滤波的散焦图像快速盲复原
  • 联合双边滤波嵌入到投影Landweber迭代算法之中并进行关联成像重构。这种方法能够通过联合双边滤波有效地去除投影Landweber迭代算法中间结果的噪声,从而提高投影Landweber迭代算法的重构质量。数值仿真和实验结果...
  • 联合双边滤波【matlab代码】

    千次阅读 2020-12-08 15:54:05
    该函数同时提供双边滤波和联合双边滤波。 如果使用与image1和image2相同的图像,则为正常的双侧过滤器;但是,如果在image1和image2中使用不同的图像,则可以将其用作联合双边滤波器,其中强度域(范围权重) 使用...
  • 基于超像素匹配的深度传播,带有联合双边滤波的2D-TO-3D转换
  • 针对联合双边滤波修复深度图像时无法准确估计滤波邻域范围和权重参数、深度图像的空洞填充效果不佳等问题,提出一种自适应深度图像空洞填充与优化算法。该算法减少了输入参数,实现了对每个深度缺失值的修复,根据有效...
  • 文章目录一、 **图像的高斯滤波处理**1、题目要求2、题目分析3、实现步骤(仅展示部分关键代码)4、结果展示二、 **图像的联合双边滤波处理**1、题目要求2、题目分析3、实现步骤(仅展示部分关键代码)4、结果展示 ...
  • 验证阶段采用联合双边滤波对图像进行处理,弥补图像边缘模糊的缺点。实验结果表明:与现有着色方法相比,该方法有效地解决了细节丢失度高、颜色不饱和及边缘模糊的问题,能够产生更真实、更合理的彩色图像,取得了优异的...
  • 双边滤波器思想: 1. 在高斯滤波器基础上增加了图像像素之间的相似度的考虑,进而达到保边的效果。 双边滤波器的实现: 1. 求权重系数 2. 确定mask大小 3. 移动处理整张影像 */ #include "opencv2/opencv.hpp...
  • 中值平滑 中值滤波适用于椒盐噪声,具有保边作用。 调用函数:dst = cv.medianBlur(src, ksize[, dst])
  • 实验4: 联合双边滤波 实现图像的联合双边滤波 Function im = jbf(D,C,w, sigma_f, sigma_g) D为输入图像 C为引导图像 W为滤波窗口大小 sigma_f 为spatial kernel标准差 sigma_g为range kernel 标准差 输入图像...
  • 20180307站位。
  • 之前讲完了于的文章对所有双边滤波算法实现的分类,这次续着上次讲一讲文章中为什么对IH方法的推崇,并说说文中提到对于IH方法的3种内存削减方案。(后来又有一个大的发现,自己翻阅过无数遍奉为圭臬的何凯明的那篇...
  • 第四节:图像平滑2一:联合双边滤波代码实现:import numpy as npimport cv2import mathdef getClosenessWeight(sigma_g, H, W):# 计算空间距离权重模板r, c = np.mgrid[0:H:1, 0:W:1] # 构造三维表r -= int((H-1) /...
  • 联合双边滤波上采样

    2014-04-09 20:51:03
    Image analysis and enhancement tasks such as tone mapping, colorization, stereo depth, and photomontage, often require computing a solution (e.g., for exposure, chromaticity, disparity, labels) over ...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

联合双边滤波