图像处理: 五种 插值法

简介:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) → dst

interpolation 选项 所用的插值方法
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。 它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。 但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值

INTER_NEAREST | 最近邻插值

在一维空间中,最近点插值就相当于四舍五入取整。在二维图像中,像素点的坐标都是整数,该方法就是选取离目标点最近的点。

会在一定程度上损失 空间对称性(Alignment),在 RoI Pooling 中使用。

这里写图片描述

INTER_LINEAR | 双线性插值(默认设置)

在两个方向分别进行一次线性插值。

这里写图片描述

在图像处理的时候,我们先根据

srcX = dstX* (srcWidth/dstWidth)
srcY = dstY * (srcHeight/dstHeight)

来计算目标像素在源图像中的位置,这里计算的srcX和srcY一般都是浮点数,比如 f(1.2, 3.4)这个像素点是虚拟存在的,先找到与它临近的四个实际存在的像素点

(1,3) (2,3)
(1,4) (2,4)

写成 f(i+u,j+v) 的形式,则 u=0.2,v=0.4, i=1, j=3 。

f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 

保证了 空间对称性(Alignment),在 RoI Align 中使用。

这里写图片描述

INTER_AREA | 使用像素区域关系进行重采样。

INTER_CUBIC | 4x4像素邻域的双三次插值

INTER_LANCZOS4 | 8x8像素邻域的Lanczos插值

在x,y方向分别对相邻的八个点进行插值,也就是计算加权和,所以它是一个8x8的描述子。

Code

# coding=utf-8

import cv2
"""
INTER_NEAREST | 最近邻插值
INTER_LINEAR | 双线性插值(默认设置)
INTER_AREA |  使用像素区域关系进行重采样
INTER_CUBIC  | 4x4像素邻域的双三次插值
INTER_LANCZOS4 |  8x8像素邻域的Lanczos插值
"""

if __name__ == '__main__':
    img = cv2.imread("girl.jpg")
    height, width = img.shape[:2]

    # 缩小图像
    size = (int(width*0.8), int(height*0.7))
    shrink_NEAREST = cv2.resize(img, size, interpolation=cv2.INTER_NEAREST)
    shrink_LINEAR = cv2.resize(img, size, interpolation=cv2.INTER_LINEAR)
    shrink_AREA = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
    shrink_CUBIC = cv2.resize(img, size, interpolation=cv2.INTER_CUBIC)
    shrink_LANCZOS4 = cv2.resize(img, size, interpolation=cv2.INTER_LANCZOS4)

    # 放大图像
    fx = 1.2
    fy = 1.1
    enlarge_NEAREST = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_NEAREST)
    enlarge_LINEAR = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_LINEAR)
    enlarge_AREA = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_AREA)
    enlarge_CUBIC = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_CUBIC)
    enlarge_LANCZOS4 = cv2.resize(img, (0, 0), fx=fx, fy=fy, interpolation=cv2.INTER_LANCZOS4)

    # 保存图像
    cv2.imwrite("shrink_NEAREST.jpg", shrink_NEAREST)
    cv2.imwrite("shrink_LINEAR.jpg", shrink_LINEAR)
    cv2.imwrite("shrink_AREA.jpg", shrink_AREA)
    cv2.imwrite("shrink_CUBIC.jpg", shrink_CUBIC)
    cv2.imwrite("shrink_LANCZOS4.jpg", shrink_LANCZOS4)

    cv2.imwrite("enlarge_NEAREST.jpg", enlarge_NEAREST)
    cv2.imwrite("enlarge_LINEAR.jpg", enlarge_LINEAR)
    cv2.imwrite("enlarge_AREA.jpg", enlarge_AREA)
    cv2.imwrite("enlarge_CUBIC.jpg", enlarge_CUBIC)
    cv2.imwrite("enlarge_LANCZOS4.jpg", enlarge_LANCZOS4)
  • 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
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

Demo

原图像: 
这里写图片描述

利用插值缩小

最近邻插值: 
这里写图片描述

双线性插值(默认设置): 
这里写图片描述

使用像素区域关系进行重采样: 
这里写图片描述

4x4像素邻域的双三次插值: 
这里写图片描述

8x8像素邻域的Lanczos插值: 
这里写图片描述

利用插值放大

最近邻插值: 
这里写图片描述

双线性插值(默认设置): 
这里写图片描述

使用像素区域关系进行重采样: 
这里写图片描述

4x4像素邻域的双三次插值: 
这里写图片描述

8x8像素邻域的Lanczos插值: 
这里写图片描述

from: https://blog.csdn.net/JNingWei/article/details/78822026
目录
相关文章
|
7月前
|
机器学习/深度学习 传感器 算法
【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)
【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)
|
9月前
|
监控 计算机视觉
【图像处理】基于二维FIR的特定角度边缘检测(Matlab代码实现)
【图像处理】基于二维FIR的特定角度边缘检测(Matlab代码实现)
|
9月前
|
算法 计算机视觉
【信号处理】基于遗传算法的噪声图像的边缘检测(Matlab代码实现)
【信号处理】基于遗传算法的噪声图像的边缘检测(Matlab代码实现)
|
11月前
|
机器学习/深度学习 传感器 算法
不同颜色空间中的鲁棒边缘检测附matlab代码
不同颜色空间中的鲁棒边缘检测附matlab代码
|
算法 计算机视觉 C++
【C++】图像处理中的滤波算法(一)
总结一下图像处理中常用的几种滤波算法,包括中值、均值、高斯、双边、引导滤波这五种,主要用于图像平滑去噪方面。滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。
345 0
【C++】图像处理中的滤波算法(一)
|
算法 计算机视觉 C++
【C++】图像处理中的滤波算法(二)
总结一下图像处理中常用的几种滤波算法,包括中值、均值、高斯、双边、引导滤波这五种,主要用于图像平滑去噪方面。滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。
109 0
【C++】图像处理中的滤波算法(二)
|
算法 API 计算机视觉
【C++】图像处理中的滤波算法(三)
总结一下图像处理中常用的几种滤波算法,包括中值、均值、高斯、双边、引导滤波这五种,主要用于图像平滑去噪方面。滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。
161 0
【C++】图像处理中的滤波算法(三)
|
算法 API 计算机视觉
【C++】图像处理中的滤波算法(四)
总结一下图像处理中常用的几种滤波算法,包括中值、均值、高斯、双边、引导滤波这五种,主要用于图像平滑去噪方面。滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。
314 0
【C++】图像处理中的滤波算法(四)
|
计算机视觉
【图像处理学习笔记】--图像直方图
图像直方图统计会灰度集出现的次数,主要运用于图像增强,图像分割,图像分类。
48 0
【图像处理学习笔记】--图像直方图
|
机器学习/深度学习 算法 计算机视觉
【边缘检测】基于蚁群算法实现图像边缘检测附matlab代码
【边缘检测】基于蚁群算法实现图像边缘检测附matlab代码
【边缘检测】基于蚁群算法实现图像边缘检测附matlab代码