1、原理与应用

最近邻插值法nearest_neighbor是最简单的灰度值插值。也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值。最近邻插值法可应用于图像的缩放,因为简单的变换与计算,效果一般不好。

先假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片,右边?该为多少。

2、公式及计算

最近邻插值法坐标变换计算公式(这个更简洁一点):

  AX=BX*(AW/BW)

  AY=BY*(AH/BH)

  • BXBY为目标图像的某个像素的横纵坐标
  • BWBH为目标图像的长与宽
  • AWAH为原图像的宽度与高度
  • AX,AY为目标图像在该点(BX,BY)对应的原图像的坐标

如果是放大图像,(AW/BW)值小于1,同样将BX同比例映射到原图像的AX中,如果AW/BW=1,就相当于复制了图片。

右图为经过放大后的目标图像,?处的坐标为(3,2),根据公式计算得到

AX=3*(2/4)=1.5, AY=2*(2/4)=1

故?处的像素应该为原图像中的(1.5,1)像素的值,但是像素坐标没有小数,一般采用四舍五入取最邻,所以最终的结果为(2,1),对应原图像的橙色。其他类比得到放大后的图像:

3、代码实现

"""
@author: 绯雨千叶最邻近插值法
AX=BX*(AW/BW)
AY=BY*(AH/BH)
A为原图,B为目标图
"""
import cv2
import numpy as npdef nearest_1(img1):  # 手动版,需要自己设置目标图宽和高h1, w1, channels = img1.shape  # 取彩色图片的长、宽、通道h2 = 550  # 手动设置目标图像的高和宽w2 = 570img_n = np.zeros((h2, w2, channels), np.uint8)  for i in range(h2):for j in range(w2):AX = int(i * (h1 / h2))AY = int(j * (w1 / w2))img_n[i, j] = img1[AX, AY]return img_ndef nearest_2(img1):  # 自动倍数版,可以直接设置放大缩小的倍数h1, w1, channels = img1.shape  # 取彩色图片的长、宽、通道scale = 1.5  # 直接设置倍率,>1为放大,<1为缩小,暂不考虑负数h2= int(h1 * scale)w2= int(w1 * scale)img_n = np.zeros((h2, w2, channels), np.uint8)for i in range(h2):for j in range(w2):AX = int(i / scale)AY = int(j / scale)img_n[i, j] = img1[AX, AY]return img_nimg1 = cv2.imread("../img/lrn.jpg")  # 输入原图
img2 = nearest_1(img1)
img3 = nearest_2(img1)
cv2.imshow("img1", img1)
cv2.imshow("nearest_1", img2)  # 手动设置高宽版
cv2.imshow("nearest_2", img3)  # 自动写倍率版
cv2.waitKey(0)

效果展示 :

最近邻插值法(nearest_neighbor)相关推荐

  1. 图像插值(最近邻插值法 和 双线性插值法)

    所谓近朱者赤近墨者黑,无论什么插值方法根本思想都是一样的. 先讲一下最近邻插值法,就是找到未知像素点相邻的4个已知像素点,然后判断哪一个像素离着未知像素点近,就让那个点同化未知像素点,赋予未知点同样的 ...

  2. 图像插值算法:最近邻插值、双线性插值

    插值算法:最近邻插值.双线性插值 文章目录 插值算法:最近邻插值.双线性插值 最近邻插值法(nearest_neighbor) 线性插值 单线性插值法 双线性插值 插值算法有很多种,这里列出关联比较密 ...

  3. Tensorflow2.0图像预处理

    实验步骤 1.载入库 import matplotlib.pyplot as plt import tensorflow as tf import numpy as np 2.读取照片 image_d ...

  4. 本科课程【数字图像处理】实验3 - 图像的几何变换

    大家好,我是[1+1=王], 热爱java的计算机(人工智能)渣硕研究生在读. 如果你也对java.人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!! Good better best, never ...

  5. 第2章 Python 数字图像处理(DIP) --数字图像基础3 - 图像内插 - 最近邻内插 - 双线性插值 - 双三次内插 - 图像放大

    目录 图像内插 放大图像 图像内插 内插通常在图像放大.缩小.旋转和几何校正等任务中使用.内插并用它来调整图像的大小(缩小和放大),缩小和放大基本上采用图像重取样方法 最近邻内插,这种方法将原图像中最 ...

  6. 最近邻插值算法 python实现

    一. 最近邻插值法放大图像: 最近邻插值法在放大图像时补充的像素是最近邻的像素的值.由于方法简单,所以处理速度很快,但是放大图像画质劣化明显,常常含有锯齿边缘. 最近邻插值法算法原理 ↑ 二. 最近邻 ...

  7. 最近邻插值与双线性插值

    最近邻插值 顾名思义,最近邻插值法在放大图像时补充的像素是最近邻的像素的值.由于方法简单,所以处理速度很快,但是得到的图像常常含有锯齿边缘.如下图所示: import cv2 import numpy ...

  8. 立方卷积插值 matlab,matlab旋转实现(最近邻值,双线性,三次卷积插值实现插值)

    数字图像处理,使用matlab实现旋转(最近邻值,双线性,三次卷积插值实现插值) 对图像进行旋转,使用最近邻插值法,双线性插值,三次卷积插值三种方法进行插值. 源码: clc;clear all;cl ...

  9. 【Halcon】插值算法通俗讲解

    目录 一.灰度值插值的概念 二.最近邻插值法 三.双线性插值法 四.等权双线性插值法 五.高斯加权双线性插值法 六.双三次插值法 七.五种插值算比较 一.灰度值插值的概念 回到目录 灰度值插值是图像变 ...

最新文章

  1. 黑马程序员--数组与集合互相转变
  2. 如何使用计算机中的导出,如何将iPhone手机中的音乐导出至电脑
  3. 在SAP API hub自动生成使用ABAP调用API的胶水代码
  4. java即时编译器_Java即时编译:不仅仅是一个流行词
  5. 力扣724.寻找数组的中心索引
  6. NAT对语音业务的影响(网络控制方案…
  7. javascript小实例,阻止浏览器默认行为,真的能阻止吗?支持IE和标准浏览器的阻止默认行为的方法...
  8. 干货 | 机器学习在web攻击检测中的应用实践
  9. 使用Fiddler4抓取微信小程序请求
  10. R语言4.04安装教程
  11. QNX 7.1 交叉编译 cron
  12. 【sv】 assign force区别
  13. 特斯拉神器TeslaMate一键安装,终于来了
  14. 在线html网页编辑器ckeditor的使用与配置
  15. 今天心情好,给各位免费呈上200兆SVN代码服务器一枚,不谢!
  16. 黑马Redis学习——实战篇(4)
  17. 11 个最佳免费安全网站
  18. Python程序完成根据视频起始时间剪辑视频
  19. [NL系列] RNN LSTM 网络结构及应用
  20. Swiper4.3.3 制作轮播图

热门文章

  1. Lombok will not run during this compilation
  2. html中js隐藏div的高度,jQuery实现获取隐藏div高度的方法示例
  3. 服务器物理机使用ESXI虚拟化并划分虚拟机
  4. 【读书笔记】游戏开发原理
  5. VL53L0X 底层思路整理 (2)
  6. DDR2内存参数设置
  7. 来可电子串口RS232/485/UART转CANbus总线转换器网关CANUART-100T
  8. ABAP-面试中的奇葩问题
  9. 纺织业如何选择适合企业自身发展的ERP?
  10. react-native 之Debug JS Remotely模式下不能打断点?