type
status
date
slug
summary
tags
category
icon
password
1. 双线性插值
双线性插值, 将目标尺寸图像的每个像素点映射回原图, 各像素点的值由它周围4个原图像素点进行线性插值获得.
1.1. 角对齐和边对齐区别
- 角对齐使用像素的中心点进行对齐(分割左右距离最远的中心点).
- 边对齐使用像素的边缘进行对齐(分割左右距离最远像素边缘).
下图(红点是原像素中心点, 点是左上角第一个红点; 蓝点是目标对齐点):

- 代码结果可以看出, 角对齐插值后, 像素值横纵方向上是线性的; 边对齐插值后, 边缘一圈在横纵方向上的像素值是非线性.
所以, 对于目标检测这种少有物体出现在图像边缘的情况, 用两种对齐都行; 而对于图像分割, 边角的像素也会加入mIoU计算(也就是影响精度), 所以用角对齐更好.
- 另外, OpenCV和PIL插值使用的都是边对齐. MXNet, PyTorch, TensorFlow两种方法都可选.
1.2. 双线性插值计算过程
- 将目标图像大小缩放到原图像的尺寸, 这时候目标图像上的每一个像素都变成了在原图上的亚像 素点.
- 对这个亚像素点进行插值获得像素值.
- 进行两次横向的线性插值.
- 进行一次纵向的线性插值.

2. 双三次插值
双三次插值, 将目标尺寸图像的每个像素点映射回原图, 各像素点的值由它周围16个原图像素点(以目标像素点为中心)进行线性插值获得.

2.1. 权重公式
- : 目标像素点与某个邻近像素点的距离
- : 平滑度, 默认取-0.5 (PyTorch默认使用-0.75)
2.2. 计算过程
将目标尺寸图像的每个像素点映射回原图, 各像素点的值由它周围16个原图像素点进行线性插值获得.
假设某个像素点为, 分别计算对应着16个原图像素点的 轴方向和 轴方向的距离, 带入权重公式.

- 这样的话, 可以分开计算x轴和y轴方向的权重. 因为x轴方向权重每一列都是一样的; y轴方向权重每一行都是一样的(距离相同).

- 求得结果之后, 求和就可以获得结果
实际操作的时候, 全图基础上需要在周围加两圈 padding 用来解决边缘像素的问题, PyTroch 可以使用
replicate
参数, 复制边缘像素来填充边缘.3. 最邻近插值
3.1. 缩放过程
- 将目标尺寸的像素点映射到原图
- 目标像素点距离原图哪个像素点最近, 就使用哪个像素点的值.
具体细节
- 遍历输出像素点, 将这些像素点缩放之后, 四舍五入到整数值, 这个整数的坐标对应原图的像素值就是目标像素值.
- 如果遍历的时候发现像素点越界, 就使用边缘像素的像素值
- 缺点
- 有锯齿, 效果不如双线性插值
- 优点
- 对于分割任务. 如果要对标注图像进行缩放的时候, 用最邻近插值可以防止出现额外的像素值
