OpenCV的resize方法与双线性插值

2018-02-08  本文已影响2835人  Aspirinrin

训练Object Detection模型SSD完毕之后进入test阶段,每张图像在进入输入层之前需要进行resize操作,以满足CNN模型对输入层size的要求。本文首先介绍了Caffe实现的SSD模型对输入图像的变换规定,引出了OpenCV中的resize方法,最后介绍该方法中的插值参数cv.INTER_LINEAR和该插值方法的原理。

caffe_ssd

caffe_ssd在test阶段,对图像的变换设置如下:

test_transform_param = {
        'mean_value': [104, 117, 123],
        'force_color': True,
        'resize_param': {
                'prob': 1,
                'resize_mode': P.Resize.WARP,
                'height': resize_height,
                'width': resize_width,
                'interp_mode': [P.Resize.LINEAR],
                },
        }

以上设定来自ssd_coco.py

接下来,我们具体介绍一下OpenCV中的resize方法。

resize方法的签名

C++:   
void cv::resize (InputArray src,
    OutputArray             dst,
    Size                      dsize,
    double                  fx = 0,
    double                  fy = 0,
    int                       interpolation = INTER_LINEAR
)       
Python:   
dst =   cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

参数说明:

src 输入图像.
dst 输出图像; 其size为dsize,或由src.size()、fx与fy计算而得; dst类型与src保持一致.   
dsize 输出图像的size; 如果设为0,或(0, 0), 计算方式为:
    𝚍𝚜𝚒𝚣𝚎 = 𝚂𝚒𝚣𝚎(𝚛𝚘𝚞𝚗𝚍(𝚏𝚡*𝚜𝚛𝚌.𝚌𝚘𝚕𝚜), 𝚛𝚘𝚞𝚗𝚍(𝚏𝚢*𝚜𝚛𝚌.𝚛𝚘𝚠𝚜))
dsize和(fx, fy)必须有一组不为0. 如果都为0,无法确定被resize后的图像大小
fx  水平轴缩放因子; 等于0时,计算方式为:
    (𝚍𝚘𝚞𝚋𝚕𝚎)𝚍𝚜𝚒𝚣𝚎.𝚠𝚒𝚍𝚝𝚑/𝚜𝚛𝚌.𝚌𝚘𝚕𝚜
fy  竖直轴缩放因子; 等于0时,计算方式为:
    (𝚍𝚘𝚞𝚋𝚕𝚎)𝚍𝚜𝚒𝚣𝚎.𝚑𝚎𝚒𝚐𝚑𝚝/𝚜𝚛𝚌.𝚛𝚘𝚠𝚜
interpolation   差值方法, 方法见InterpolationFlags

InterpolationFlags
缩小图像时,一般INTER_AREA插值效果较好。放大图像时, INTER_CUBIC (slow)更好些,或INTER_LINEAR (faster but still looks OK)。

Resize Image Example

import cv2 as cv
img = cv.imread('./lena.jpg')
h, w = img.shape[:2]
# 缩小图像到原来一半大小,方法一,设置dsize
dst = cv.resize(img, (h//2, w//2), None, 0, 0, cv.INTER_LINEAR)
cv.imwrite('./lena1.jpg', dst)
# 缩小图像到原来一半大小,方法二,设置fx和fy
dst = cv.resize(src=img, dsize=None, fx=0.5, fy=0.5, interpolation=cv.INTER_LINEAR)
cv.imwrite('./lena2.jpg', dst)

cv.INTER_LINEAR的原理

resize方法提供了9种插值参数,Caffe中支持的5种分别是

下面具体介绍一下双线性插值法,这种插值方法最易于理解,也应用最多。

首先,在x轴方向进行线性插值:蓝色点得到绿色点 x轴方向线性插值 然后,在y轴方向进行线性插值:绿色点得到橙色点 y轴方向线性插值 最后,简化为矩阵变换的形式: 双线性插值的矩阵变换表达
上一篇 下一篇

猜你喜欢

热点阅读