双线性插值(bilinear)
本文将未做插值的原始图像称作源图像,源图像插值缩放K倍后的图像称作目标图像。
以下标识符的意义:

  1. 算法
    双线性插值的主要思想是目标点归一化后在四周取4个最近邻点,并根据权重对其做线性函数计算,从而得到目标像素点的值。将目标像素点(dstX,dstY)归一化后得(dstX/K,dstY/K),其左上方最近邻源像素点A点坐标为:
srcX=floor(dstX/K);     srcY=floor(dstY/K)
u=dstY/K-srcY;              v=dstX/K-srcX

根据距离越近,权重越大的原则,A,B,C,D四点的加权系数应为

a=(1-u)*(1-v)     b=u*(1-v)        c=(1-u)*v      d=u*v

四个加权系数之和为1,目标元素点dst(dstX,dstY)值为:

a*src(srcX,srcY)+b*src(srcX+1,srcY)+c*src(srcX,srcY+1)+d*src(srcX+1,srcY+1)
  1. 实现
    本程序是matlab写的一个my_bilinear函数,与matlab自有的imresize函数的bilinear型相对应。可以实现任意倍数的放大。

matlab代码:

function [output]=my_bilinear(src,K)
%双线性插值插值
%输入:源图像src,放大倍数K
%输出:目标图像矩阵dst[srcM,srcN,srcC]=size(src);%源图像元素点的行列数及色板数
dstM=round(K*srcM);%该处仍要确保当放大倍数K非整数时目标图像大小为整数
dstN=round(K*srcN);%使用class将数据类型统一,目标图像初始化
dst=ones(dstM,dstN,srcC,class(src));%逐像素点赋值
for dstX=1:dstMfor dstY=1:dstNfor dstC=1:srcCsrcX=floor(dstX/K);%最近邻左上方像素点位置srcY=floor(dstY/K);u=dstY/K-srcY;v=dstX/K-srcX;a=(1-u)*(1-v);  %最近邻四点的加权系数b=u*(1-v);      c=(1-u)*v;d=u*v;srcX(srcX+1>srcN)=srcN-1;   %防止索引源图像界外位置srcX(srcX<1)=1;              %这种函数对比if_else耗时较长但简洁srcY(srcY+1>srcM)=srcM-1;srcY(srcY<1)=1;dst(dstX,dstY,dstC)=a*src(srcX,srcY,dstC)+b*src(srcX+1,srcY,dstC)+c*src(srcX,srcY+1,dstC)+d*src(srcX+1,srcY+1,dstC);endend
end
output=dst;
end
  1. 评估
    分别使用本文函数my_bilinear函数和matlab的imresize函数中的bilinear型对lena图进行2倍放大,并计时。
    test代码:
close all
figure
A=imread('D:\Files\Downloads\DIP\picture\Lena.jpg');
imshow(A);
figure
tic
imshow(my_bilinear(A,2));
toc
figure
tic
imshow(imresize(A,2,'bilinear'));
toc

结果:

细节:
耗时:

综上,两者效果无差别,但my_bilinear函数更慢,这是因为matlab自身使用矩阵运算,速度更快。
该算法速度快于双三次慢于最近邻,但效果不如双三次插值好。
附:
最近邻插值
双三次插值

图像插值-双线性插值(bilinear)相关推荐

  1. 直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)

    这里面主要介绍了线性插值和双线性插值的思想和过程,根据文中介绍的思路,方便大家理解. 线性插值(linear interpolation) 如下图有A,B两点,A(x0,y0),B(x1,y1).在A ...

  2. 图像插值-双线性插值与双三次插值

    在现实生活中,我们经常会遇到把图像进行放大.几何空间变换的情况等等,这些操作都需要在源图像和目标图像之间建立一个映射规则,使得两图像像素坐标之间建立起一种对应关系,从而为目标图像的每一个像素赋值. 从 ...

  3. 双线性插值(Bilinear Interpol)原理及应用

    在很多神经网络上采样过程中会用到双线性插值,其为基础的图像resize操作.以前一直没时间仔细研究,今天探究并记录一下原理和自己的理解. 一.什么是插值 插值指两个方面: 一是在数学上,在离散数据的基 ...

  4. 双线性插值 Bilinear Interpolation

    文章目录 Definition Algorithm Alternative algorithm Unit square Nonlinear Application in image processin ...

  5. 深度学习之双线性插值(Bilinear interpolation)

    1. 什么是插值 Interpolation is a method of constructing new data points within the range of a discrete se ...

  6. Bilinear Interpolation 双线性插值

    Summary: 双线性插值(Bilinear Interpolation) - 马语者 - 博客园 Intro: 一篇文章为你讲透双线性插值 - 知乎 双线性插值(Bilinear Interpol ...

  7. OpenCV--014: 图像插值

    知识点 图像插值: 是基于模型框架下,从低分辨率图像生成高分辨率图像的过程,用以恢复图像中所丢失信息. 图像插值的分类 插值,分为图像内插值和图像间插值.其主要应用是对图像进行放大以及旋转等操作. 图 ...

  8. 数字图像处理实验(4):PROJECT 02-04 [Multiple Uses],Zooming and Shrinking Images by Bilinear Interpolation

    实验要求: Zooming and Shrinking Images by Bilinear Interpolation Objective To manipulate another techniq ...

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

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

最新文章

  1. OPPO R9s在哪里开启Usb调试模式的完美步骤
  2. 无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源
  3. c语言两个数组比较大小函数,输入两个数组,调用large函数比较,计数,输出统计结果...
  4. RxJS Functional Programming
  5. 如何在Android Studio里关掉instant run
  6. R语言快速学习第一部分(有其他语言基础)
  7. docker mysql 阿里云_阿里云docker部署mysql
  8. 关于SQL语句中分号的问题
  9. 利用密码字典暴力破解渗透目标系统
  10. 新罗马字体linux,WPS文字办公—将阿拉伯数字替换为新款Times New Roman字体
  11. 用Java代码实现区块链技术
  12. 图像翻译三部曲:pix2pix, pix2pixHD, vid2vid
  13. 信号完整性和电源完整性基本介绍
  14. F. Equalize the Array
  15. 使用CSS去除 去掉超链接的下划线方法
  16. 27家中美名校借阅榜对比公开:差别太大了
  17. echarts折线图点击x值动态高亮且显示tooltip
  18. 电机标幺化、PI标幺化、锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理
  19. Android TV-电视开发常用知识点讲解
  20. 给赞!移动端网页调试利器-uc开发者工具

热门文章

  1. a标签与添加点击事件
  2. VXI-11基于STM32 LWIP实现
  3. Windows7 IIS7 无法启动计算机上的服务W3SVC如何修复
  4. Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」
  5. Wondershare UniConverter for Mac(全能视频格式转换器)
  6. 去外包对自己简历有影响么?
  7. Bean的生命周期行为控制,初始化与销毁bean时执行操作的三种方法
  8. 2021年09月虹科Pico汽车示波器简报
  9. 模拟电子技术(三)集成运算放大电路
  10. Linux实训课笔记内容