资讯专栏INFORMATION COLUMN

用最近邻插值(Nearest Neighbor interpolation)进行图片缩放

zeyu / 1598人阅读

摘要:图片缩放的两种常见算法最近邻域内插法双向性内插法本文主要讲述最近邻插值算法的原理以及实现基本原理最简单的图像缩放算法就是最近邻插值。顾名思义,就是将目标图像各点的像素值设为源图像中与其最近的点。

图片缩放的两种常见算法:

  1.     最近邻域内插法(Nearest Neighbor interpolation)
  2.     双向性内插法(bilinear interpolation)

本文主要讲述最近邻插值(Nearest Neighbor interpolation算法的原理以及python实现

基本原理

最简单的图像缩放算法就是最近邻插值。顾名思义,就是将目标图像各点的像素值设为源图像中与其最近的点。算法优点在与简单、速度快。

如下图所示,一个4*4的图片缩放为8*8的图片。步骤:

  1.     生成一张空白的8*8的图片,然后在缩放位置填充原始图片值(可以这么理解)
  2.     在图片的未填充区域(黑色部分),填充为原有图片最近的位置的像素值。

实现代码:

import cv2import numpy as npdef nearest_neighbor_resize(img, new_w, new_h):    # height and width of the input img    h, w = img.shape[0], img.shape[1]    # new image with rgb channel    ret_img = np.zeros(shape=(new_h, new_w, 3), dtype="uint8")    # scale factor    s_h, s_c = (h * 1.0) / new_h, (w * 1.0) / new_w    # insert pixel to the new img    for i in range(new_h):        for j in range(new_w):            p_x = int(j * s_c)            p_y = int(i * s_h)            ret_img[i, j] = img[p_y, p_x]    return ret_imgimg_path = "./dice.jpg"img = cv2.imread(img_path)#ret_img = nearest_neighbor_resize(img, 222, 220)ret_img = nearest_neighbor_resize(img, 640, 480)cv2.imshow("source image", img)cv2.imshow("after bilinear image", ret_img)cv2.waitKey()cv2.destroyAllWindows()

 将一个96*96的图像经过算法转换,变成了一张640*480的图像。

放大到1920*1080

缩小,从892*650->96*96

以上介绍的是最邻近域内插法,实际的媒体处理SOC中,VPU(VE),DE(Display Engine),G2D(2D Graphic accelerator)都具备图像缩放的能力,各自实现的算法不同,但都是基于这两种基础算法,比如AW的VPU,基于的就是双线性内插法实现的图片放大缩小.

至于放大出现锯齿,得看你放多大,1.5倍内的图像质量还是有保证的,再大点出现锯齿也不足为奇,缩放比例算法是不限制的. 可以很大,也可以很小,不一定要求倍数比例缩放.缩略图一般有限制,但是视频都是无级缩放.


结束!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119260.html

相关文章

  • 数字图像处理基本运算(四)——几何运算

    摘要:几何运算平移镜像水平镜像垂直镜像旋转以图像左上角为旋转中心以图像中心为旋转中心缩放插值算法最近邻插值算法双线性插值算法三次内插法改变图像中物体对象像素之间的空间关系。 ...

    greatwhole 评论0 收藏0
  • 【OpenCV 完整例程】30. 图像的缩放(cv2.resize)

    摘要:完整例程图像的缩放缩放只是调整图像的大小。也可以通过构造缩放变换矩阵,由函数计算变换后的缩放平移图像。缩放变换矩阵由以下公式描述由偏移量按上式构造平移变换矩阵,由函数可以计算变换后的平移图像。 ...

    lvzishen 评论0 收藏0
  • 图像恢复 SWinIR : 彻底理解论文和源代码 (注释详尽)

    摘要:浅层特征提取浅层特征提取只使用一层卷积进行提取。图像重建模块图像重建模块其实就是卷积上采样的组合,在这块论文提出种结构。主要代码理解关于中涉及的部分代码非常简单,就不在此单独列出,这里主要注释一下其中有关的实现代码。将维图像转变成维。 ...

    RiverLi 评论0 收藏0
  • OpenCV-Python实战(4)——OpenCV常见图像处理技术(❤️万字长文,含大量示例❤️)

    OpenCV-Python实战(4)——OpenCV常见图像处理技术(❤️万字长文,含大量示例❤️) 0. 前言1. 拆分与合并通道2. 图像的几何变换2.1 缩放图像2.2 平移图像2.3 旋转图像2.4 图像的仿射变换2.5 图像的透视变换2.6 裁剪图像 3. 图像滤波3.1 应用滤波器(卷积核或简称为核)3.2 图像平滑3.2.1 均值滤波3.2.2 高斯滤波3.2.3 中值滤波3.2...

    Amos 评论0 收藏0
  • 用Node.js实现机器学习中的K最近邻分类算法

    摘要:简介源于数据挖掘的一个作业,这里用来实现一下这个机器学习中最简单的算法之一算法最近邻分类法。其实这些标签就对应于机器学习中的特征这一重要概念,而训练我们识别的过程就对应于泛化这一概念。 1. 简介 源于数据挖掘的一个作业, 这里用Node.js来实现一下这个机器学习中最简单的算法之一k-nearest-neighbor算法(k最近邻分类法)。 k-nearest-neighbor-cl...

    Cc_2011 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<