最近邻插值

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

import cv2
import numpy as np
def function(img):height,width,channels =img.shapeemptyImage=np.zeros((800,800,channels),np.uint8)sh=800/heightsw=800/widthfor i in range(800):for j in range(800):x=int(i/sh)y=int(j/sw)emptyImage[i,j]=img[x,y]return emptyImageimg=cv2.imread("path/lenna.png")
zoom=function(img)
print(img.shape)
print(zoom.shape)
cv2.imshow("image",img).              #(512,512,3)
cv2.imshow("nearest interp",zoom)     #(800,800,3)
cv2.waitKey(0)

双线性插值

先说说简单的单线性插值函数

根据P1和P2两个点可以确定直线方程为:

整理后:

也就能得出P点的y值。
双线性插值也就是要在两个方向进行插值。

假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值,想得到未知函数 f 在点 P = (x, y) 的值,首先在 x 方向进行线性插值,得到:


然后在y方向进行线性插值,得到:

整合后的公式如下:

在实际代码中,还会将源图像和目标图像进行中心对齐,如下图,假设你需要将一幅5x5的图像缩小成3x3,那么源图像和目标图像各个像素之间的对应关系如下。如果没有这个中心对齐,就会得到左边的结果,图像的像素信息会丢失;而用了对齐,就会得到右边的结果:

import numpy as np
import cv2
def bilinear_interpolation(img,out_dim):src_h, src_w, channel = img.shapedst_h, dst_w = out_dim[1], out_dim[0]print ("src_h, src_w = ", src_h, src_w)print ("dst_h, dst_w = ", dst_h, dst_w)if src_h == dst_h and src_w == dst_w:return img.copy()dst_img = np.zeros((dst_h,dst_w,3),dtype=np.uint8)scale_x, scale_y = float(src_w) / dst_w, float(src_h) / dst_hfor i in range(3):for dst_y in range(dst_h):for dst_x in range(dst_w):#中心对齐src_x = (dst_x + 0.5) * scale_x - 0.5src_y = (dst_y + 0.5) * scale_y - 0.5#找到插值用的坐标点src_x0 = int(np.floor(src_x))src_x1 = min(src_x0 + 1 ,src_w - 1)src_y0 = int(np.floor(src_y))src_y1 = min(src_y0 + 1, src_h - 1)#代入计算temp0 = (src_x1 - src_x) * img[src_y0,src_x0,i] + (src_x - src_x0) * img[src_y0,src_x1,i]temp1 = (src_x1 - src_x) * img[src_y1,src_x0,i] + (src_x - src_x0) * img[src_y1,src_x1,i]dst_img[dst_y,dst_x,i] = int((src_y1 - src_y) * temp0 + (src_y - src_y0) * temp1)return dst_imgif __name__ == '__main__':img = cv2.imread('path/lenna.png')dst = bilinear_interpolation(img,(700,700))cv2.imshow('bilinear interp',dst)cv2.waitKey()


这种方式得到的图像就不会出现锯齿现象。

最近邻插值与双线性插值相关推荐

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

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

  2. 【opencv】最近邻插值、双线性插值、双三次插值(三次样条插值)

    目录 1. 最近邻插值 2. 双线性插值 1)简单理解 2)一般性 3. 双三次插值(三次样条插值) 总结 1. 最近邻插值 举个简单例子:一个3×33 \times 33×3 的单通道图像,如下 如 ...

  3. CV笔记2:图像插值算法—最近邻插值、双线性插值

    目录 一. 简介 二.最近邻插值 三.双线性插值 3.1 线性插值 3.2 双线性插值 3.3 双线性插值的加速及优化策略 参考 一. 简介 在图像处理中,平移变换.旋转变换以及放缩变换是一些基础且常 ...

  4. 数字图像缩放之最近邻插值与双线性插值处理效果对比

    基本原理: 1.最近邻插值:变换后的目标图像某点像素值等于源图像中与变换前相应点最近的点的像素值.具体操作为,设水平方向和垂直方向缩放的比例分别为w和h,那么目标图像中的点des(x,y)对应的源图像 ...

  5. 最近邻插值、双线性插值、双三次插值

    1.最近邻插值 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表 ...

  6. 图像常用的插值算法:最近邻插值、双线性插值和双三次插值算法

    图像常用的插值算法 最近邻插值算法 双线性插值算法 双三次插值(bicubic)算法 三种插值算法的优缺点 插值算法是图像缩放中的一项基本且重要的算法:在图像缩放中,输出图像像素点坐标可能对应输入图像 ...

  7. CImage实现双缓冲最近邻插值

     一普通显示:现在的VC显示图片非常方便,远不是VC6.0那个年代的技术可比,而且支持多种格式的如JPG,PNG. CImage _img; 初始化: _img.Load(L"map.p ...

  8. 上采样(放大图像)和下采样(缩小图像)(最邻近插值和双线性插值的理解和实现)

    上采样和下采样 什么是上采样和下采样? • 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有 两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略 ...

  9. (四)最邻近插值、双线性插值

    最邻近插值.双线性插值.三线性插值 零.图像的放大和缩小的基本原理–映射 图像的放大和缩小的基本原理就是一种映射,即缩小后或者放大后的图像像素位置向原图的一个映射.简单理解就是,将放大或者缩小后的图像 ...

最新文章

  1. 今天,进程告诉我线程它它它它不想活了
  2. 用shell批量修改文件名
  3. Java 8 简明教程
  4. dede整站动态化或是整站静态化方法
  5. Qt Creator和VS2010中添加槽信号_差异与详解
  6. ksu7对讲机调频软件_数字对讲机的群呼功能原理是什么?你了解多少?
  7. dlna 斐讯r1怎么用_斐讯R1智能(蓝牙)音箱固件升级教程
  8. 【钉钉-场景化能力包】考勤统计
  9. windows系统下,如何将dmg文件转化为cdr文件
  10. 网站html漂浮代码大全,网页漂浮窗口代码
  11. 基于51单片机的体脂检测系统设计(51+oled+hx711+us100)
  12. 数据之美(九):50个精美绝伦的 Infographics(上)
  13. iOS 图片编辑——涂鸦——随手指移动随意画线
  14. android 手机分区失败怎么办,一种Android系统Data分区自修复方法及系统专利_专利查询 - 天眼查...
  15. 从经济学角度解读人工智能
  16. 如何跟进团队的沟通、协作和执行?这款团队协作软件你得试试
  17. POI中的手动公式计算方法
  18. python写cdr插件_使用CorelDraw的19个小技巧
  19. 什么服务器维修最贵,百万元的服务器什么样?CPU成本不是最高的,存储才是大头...
  20. SPN技术浅析及电网应用介绍

热门文章

  1. 流程图的会签、或签、转审、加签、一票否决实现
  2. 综合布线包括计算机网络,综合布线试题
  3. 清华大学计算机系高考生源,清华在京录取圆满结束:生源好、质量优、扩幅大(转贴)...
  4. 基于ros的机器人运动控制相关学习(一)
  5. 【考研英语语法】写作中的复杂名词短语
  6. C++使用FFmpeg库实现图片转视频
  7. 情以何堪的伤感QQ日志分享:一句话,了断一切
  8. 趣节点:互联网信息大爆炸时代,企业品牌口碑营销需要注意什么?
  9. gr-osmosdr支持GNURadio的扩展
  10. 沃尔玛中国前CEO陈文渊将出任百事亚太区CEO;山姆再次下调近百种畅销单品价格 | 美通企业日报...