图像插值
# Opencv-Python 01 图像插值
# 1 简介
图像插值比较常用,是图像缩放背后的数学逻辑。Mask RCNN将RoI pooling 改进为 RoI Align背后的理论支撑就是双线性插值。在图像中,整数坐标上的灰度值才有意义,但图像进入算法模型中往往需要进行缩放,这就会考虑到非整数坐标上的灰度值。图像插值就是用来解决这一问题,通过整数坐标上的灰度值来估计非整数坐标上的灰度值。常见的插值算法有最近邻插值、双线性插值和三次样条插值
- 值得一提的是,这些插值方法在数学建模中也常常使用。需要分清楚插值和拟合的区别
# 2 插值方法
# 2.1 最近邻插值
顾名思义、最近邻插值算法中,非整数坐标的点的灰度值由离他最近的整数坐标点的灰度值来确定。在2维图像中,距离度量一般使用欧氏距离。在RoI Pooling中使用的插值算法即为最近邻插值。下面使用一些例子来说明
- 例子:将一个 3x3 的图像 resize 成4x4
- 算法缺陷:最近邻插值算法常常出现块状效应,会在一定程度上损失 空间对称性(Alignment)
# 2.2 双线性插值
顾名思义、双线性插值是做两次线性插值。在二维图像中,两次插值是指在横坐标和纵坐标上进行线性插值。线性插值的过程十分简单
- 算法缺陷:双线性灰度插值的平滑作用可能使得图像的细节产生退化,这种现象在进行图像放大时尤其明显
- 算法优势:保证了 空间对称性(Alignment),在RoIAlign中采用
# 3 Opencv-Python代码实践
参考资料中有这样的阐述:在缩放时推荐cv2.INTER_AREA,在扩展时推荐cv2.INTER_CUBIC(慢)和cv2.INTER_LINEAR。
cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
1src:输入图像 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
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
- 02
- README 美化05-20
- 03
- 常见 Tricks 代码片段05-12