Muyun99's wiki Muyun99's wiki
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Muyun99

努力成为一个善良的人
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 代码实践-目标检测

  • 代码实践-图像分割

  • 代码实践-自监督学习

  • 竞赛笔记-视觉竞赛

  • 框架解析-mmlab系列

  • 讲座记录-有意思的文章集合

  • 体会感悟-产品沉思录观后有感

  • 体会感悟-摄影

  • 系列笔记-

  • 系列笔记-乐理和五线谱

  • 系列笔记-爬虫实践

  • 系列笔记-Django学习笔记

  • 系列笔记-Git 使用笔记

  • 系列笔记-网站搭建

  • 系列笔记-图卷积网络

  • 课程笔记-MIT-NULL

  • 系列笔记-OpenCV-Python

    • 图像插值
      • 图像增强-几何及灰度变换
      • 彩色空间互转
      • 图像滤波
      • 阈值分割及二值化
    • 系列笔记-使用 Beancount 记账

    • 系列笔记-Python设计模式

    • 系列笔记-MLOps

    • 系列笔记-Apollo自动驾驶

    • 系列笔记-PaddlePaddle

    • 系列笔记-视频操作

    • Vue+Django前后端分离开发

    • 深度学习及机器学习理论知识学习笔记

    • PyTorch Tricks

    • 学习笔记
    • 系列笔记-OpenCV-Python
    Muyun99
    2021-03-09

    图像插值

    # Opencv-Python 01 图像插值

    # 1 简介

    图像插值比较常用,是图像缩放背后的数学逻辑。Mask RCNN将RoI pooling 改进为 RoI Align背后的理论支撑就是双线性插值。在图像中,整数坐标上的灰度值才有意义,但图像进入算法模型中往往需要进行缩放,这就会考虑到非整数坐标上的灰度值。图像插值就是用来解决这一问题,通过整数坐标上的灰度值来估计非整数坐标上的灰度值。常见的插值算法有最近邻插值、双线性插值和三次样条插值

    • 值得一提的是,这些插值方法在数学建模中也常常使用。需要分清楚插值和拟合的区别

    # 2 插值方法

    # 2.1 最近邻插值

    顾名思义、最近邻插值算法中,非整数坐标的点的灰度值由离他最近的整数坐标点的灰度值来确定。在2维图像中,距离度量一般使用欧氏距离。在RoI Pooling中使用的插值算法即为最近邻插值。下面使用一些例子来说明

    • 例子:将一个 3x3 的图像 resize 成4x4
    • 算法缺陷:最近邻插值算法常常出现块状效应,会在一定程度上损失 空间对称性(Alignment)

    f(dstX,dstY)=h(dstXsrcWidthdstWidth,dstYsrcHeightdstHeight)f(dst_{X}, dst_{Y}) = h(\frac{dst_{X}src_{Width}} {dst_{Width}}, \frac{dst_{Y}src_{Height}} {dst_{Height}}) f(dstX​,dstY​)=h(dstWidth​dstX​srcWidth​​,dstHeight​dstY​srcHeight​​)

    f(0,0)=h(0,0)f(0,1)=h(0,0.75)=h(0,1)f(0,2)=h(0,1.50)=h(0,2)f(0,3)=h(0,2.25)=h(0,2)f(0,0)=h(0,0) \\ f(0,1)=h(0,0.75)=h(0,1) \\ f(0,2)=h(0,1.50)=h(0,2) \\ f(0,3)=h(0,2.25)=h(0,2) \\ f(0,0)=h(0,0)f(0,1)=h(0,0.75)=h(0,1)f(0,2)=h(0,1.50)=h(0,2)f(0,3)=h(0,2.25)=h(0,2)

    image-20200421144930870
    # 2.2 双线性插值

    顾名思义、双线性插值是做两次线性插值。在二维图像中,两次插值是指在横坐标和纵坐标上进行线性插值。线性插值的过程十分简单

    • 算法缺陷:双线性灰度插值的平滑作用可能使得图像的细节产生退化,这种现象在进行图像放大时尤其明显
    • 算法优势:保证了 空间对称性(Alignment),在RoIAlign中采用

    y=y0+(x−x0)y1−y0x1−x0=y0+(x−x0)y1−(x−x0)y0x1−x0y=y_{0}+\left(x-x_{0}\right) \frac{y_{1}-y_{0}}{x_{1}-x_{0}}=y_{0}+\frac{\left(x-x_{0}\right) y_{1}-\left(x-x_{0}\right) y_{0}}{x_{1}-x_{0}} y=y0​+(x−x0​)x1​−x0​y1​−y0​​=y0​+x1​−x0​(x−x0​)y1​−(x−x0​)y0​​

    image-20200421150047330

    # 3 Opencv-Python代码实践

    • 参考资料中有这样的阐述:在缩放时推荐cv2.INTER_AREA,在扩展时推荐cv2.INTER_CUBIC(慢)和cv2.INTER_LINEAR。

    • cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
      
      1
    • src:输入图像
      dsize:输出图像尺寸
      fx、fy:x,y方向上的缩放因子
      interpolation:插值方法,总共五种
      	1. cv.INTER_NEAREST - 最近邻插值法
      	2. cv.INTER_LINEAR - 双线性插值法(默认)
          3. cv.INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
          4. cv.INTER_CUBIC - 基于4x4像素邻域的3次插值法
          5. cv.INTER_LANCZOS4 - 在x,y方向分别对相邻的八个点进行插值,也就是计算加权和,所以它是一个8x8的描述子。
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
    import cv2
     
    if __name__ == "__main__":
        img = cv2.imread('../datasets/lena.jpg', cv2.IMREAD_UNCHANGED)
        
        print('Original Dimensions : ',img.shape)
        
        scale_percent = 30       # percent of original size
        width = int(img.shape[1] * scale_percent / 100)
        height = int(img.shape[0] * scale_percent / 100)
        dim = (width, height)
        # resize image
        resized = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR)
    
        fx = 1.5
        fy = 1.5
    
        resized1 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_NEAREST)
        
        resized2 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_LINEAR)
        print('Resized Dimensions : ',resized.shape)
        
        cv2.imshow("Resized image", resized)
        cv2.imshow("INTER_NEAREST image", resized1)
        cv2.imshow("INTER_LINEAR image", resized2)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    # 4 参考资料

    • https://www.kancloud.cn/aollo/aolloopencv/259610
    • https://blog.csdn.net/weixin_39940512/article/details/105343418
    上次更新: 2021/08/17, 18:07:06
    Course overview and the shell
    图像增强-几何及灰度变换

    ← Course overview and the shell 图像增强-几何及灰度变换→

    最近更新
    01
    Structured Knowledge Distillation for Semantic Segmentation
    06-03
    02
    README 美化
    05-20
    03
    常见 Tricks 代码片段
    05-12
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 Muyun99 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×