最邻近插值算法
1. 算法简介
各种插值算法以及图像相关基础知识介绍在笔者之前的博客《CV学习笔记-数字图像概述》中已经详细介绍,在此仅作简单介绍:
最邻近插值The nearest interpolation
设i+u, j+v (i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素
灰度的值 f(i+u, j+v) 如下图所示:
简而言之,就是在放大图像时,用最近的已有像素点替代不存在的像素点(因为放大图像,像素点变多,需要用已有的像素点按照比例去给像素值赋值),由于算法简单,所以效果远不如双线性插值。
2.源码示例解析
读入测试图片后,使用nearestInterp方法进行处理,得到处理后的输出对象out,并将原图与处理后的图像一并展示。
nearestInterp方法中使用的参数是将图像放大到800 × \times× 800,故新生成图片的两个维度的值( i , j ) 与原图像中两个维度( x , y )的映射关系编写思路是:
import cv2 import numpy as np def nearestInterp(img): height,width,channels =img.shape emptyImage=np.zeros((800,800,channels),np.uint8) sh=800/height sw=800/width for i in range(800): for j in range(800): x=int(i/sh) y=int(j/sw) emptyImage[i,j]=img[x,y] return emptyImage img=cv2.imread("../test.png") out=nearestInterp(img) print(out) print(out.shape) cv2.imshow("nearest interp",out) cv2.imshow("image",img) cv2.waitKey(0)
3.效果
由于最邻近插值的算法简单,导致效果一般,有肉眼可见的模糊点。