zoukankan      html  css  js  c++  java
  • opecv 卷积原理、边缘填充方式、卷积操作详解

    卷积

    什么是二维卷积呢?看下面一张图就一目了然:
    图解卷积过程
    卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再相加:
    5=1×1+2×0+1×0+0×0+1×0+1×0+3×0+0×0+2×2
    算完之后,整个框再往右移一步继续计算,横向计算完后,再往下移一步继续计算。
    简而言之,卷积是一个对应位置像素值相乘后再相加的操作。
    不难发现,前面我们用3×3的核对一副6×6的图像进行卷积,得到的是4×4的图,图片缩小了!那怎么办呢?我们可以把原图扩充一圈,再卷积,这个操作叫填充padding。

    padding(边缘填充)

    图像卷积后大小可参考 卷积和反卷积后图像大小

    图解padding
    那么扩展的这一层应该填充什么值呢?OpenCV中有好几种填充方式,都使用 cv.copyMakeBorder() 函数实现,一起来看看。

    cv.copyMakeBorder() 参数讲解
    src:要处理的原图
    top, bottom, left, right:上下左右要扩展的像素数
    borderType:边框类型,这个就是需要关注的填充方式。其中默认方式和固定值方式最常用

    边缘填充方式

    固定值填充

    顾名思义,cv.BORDER_CONSTANT 这种方式就是边框都填充成一个固定的值,比如下面的程序都填充0:

    代码

    img = cv.imread('baby_gg.bmp', 0)
    print(img)
    # 固定值边框,统一都填充0也称为zero padding
    cons = cv.copyMakeBorder(img, 1, 1, 1, 1, cv.BORDER_CONSTANT, value=0)
    print(cons)
    

    图解固定值padding

    图解固定值为0的填充方式

    默认填充方式

    默认边框cv.BORDER_DEFAULT其实是取镜像对称的像素填充。

    图解默认填充方式

    取边缘对称的像素值进行填充(默认方式)第1步
    取边缘对称的像素值进行填充(默认方式)第2步和第3步

    代码

    default = cv.copyMakeBorder(img, 1, 1, 1, 1, cv.BORDER_DEFAULT)
    print(default)
    

    opencv对图像进行卷积

    OpenCV中用 cv2.filter2D() 实现卷积操作,比如我们的核是下面这样(3×3区域像素的和除以10):
    卷积核

    代码

    # 基本卷积操作
    import cv2 as cv
    import numpy as np
    
    img = cv.imread('paojie.jpg')
    # 定义卷积核
    kernel = np.ones((3, 3), np.float32) / 10
    # 卷积操作,-1表示通道数与原图相同
    dst = cv.filter2D(img, -1, kernel)
    # 两张图片横向合并,便于对比显示
    result = np.hstack((img,dst))
    
    cv.imshow('result',result)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    实验结果

    实验结果:左图(原图),右图(类似均值卷积核作用后,图像模糊了)

  • 相关阅读:
    ios开发遇到的问题
    getopt()——命令行参数分析
    浅谈Samsung Exynos4412处理器
    TTL电平,CMOS电平,232/485电平,OC门,OD门基础知识
    (转载)跟Classic ARM 处理器说拜拜——Atmel SAMA5D3 Xplained开发板评测
    (转载)Quartus II中FPGA的管脚分配保存方法(Quartus II)
    DE2资源集锦
    收到DE2+LCM+ D5M套件,拾回DE2,努力,奋进!
    windows 服务器时间同步失败处理方法
    机械加工仿真软件-----三维弯管机仿真系统
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12597328.html
Copyright © 2011-2022 走看看