图像内插是在诸如放大、收缩、旋转和几何校正等任务中广泛应用的基本工具。从根本上来看,内插是用已知数据来估计未知位置的数值的处理。
最近邻内插法(nearest neighbor):假设一幅大小为500×500像素的图像要放大到750×750像素。一种简单的放大方法是创建一个假想的750×750网格,它与原始图像有相同的间隔。然后将其收缩,使它准确地与原图像匹配。显然收缩后的750×750网格的像素间隔要小于原图像的像素间隔。为了对覆盖的每一个点赋以灰度值,我们在原图像中寻找最接近的像素,并把该像素的灰度赋给750×750网格中的新像素。当我们完成对网格中覆盖的所有点的灰度赋值之后,就把图像扩展到原来规定的大小,得到放大后的图像。
代码展示:
import cv2
import numpy as np
#dstH,dstW表示新图的Size,scrH,scrW表示旧图的Size
def NN_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH-1):
for j in range(dstW-1):
#计算出新图坐标(i,j)坐标用旧图中的那个坐标来填充
scrx=round(i*(scrH/dstH))
scry=round(j*(scrW/dstW))
retimg[i,j]=img[scrx,scry]
return retimg
img = cv2.imread("E:/pythontupian/1.jpg")
zoom = NN_interpolation(img,img.shape[0]*2,img.shape[1]*2)
cv2.imshow("nearest neighbor", zoom)
cv2.imshow("image", img)
cv2.waitKey(0)
结果展示:
原图
插值后

原图和插值图对比结果
版权声明:本文为yuansiming0920原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。