双线性插值(Bilinear Interpolation)

news2024/11/14 6:35:06

文章目录

  • 一.双线性插值
    • 3.双线性插值的优化

一.双线性插值

假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(im/a,jn/b)。显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。如果你的对应坐标是(2.5,4.5),那么最近的四个像素是(2,4)、(2,5)、(3,4),(3,5)。

  1. 单线性插值
    已知中P1点和P2点,坐标分别为(x1, y1)、(x2, y2),要计算 [x1, x2] 区间内某一位置 x 在直线上的y值

    在这里插入图片描述

    根据初中的知识,2点求一条直线公式(这是双线性插值所需要的唯一的基础公式:

y − y 1 x − x 1 = y 2 − y 1 x 2 − x 1 \frac{y-y_{1}}{x-x_{1}}=\frac{y_{2}-y_{1}}{x_{2}-x_{1}} xx1yy1=x2x1y2y1

经过简单整理成下面的格式:

y = x 2 − x x 2 − x 1 y 1 + x − x 1 x 2 − x 1 y 2 y=\frac{x_{2}-x}{x_{2}-x_{1}} y_{1}+\frac{x-x_{1}}{x_{2}-x_{1}} y_{2} y=x2x1x2xy1+x2x1xx1y2

这里没有写成经典的AX+B的形式,因为这种形式从权重的角度更好理解。

首先看分子,分子可以看成x与x1和x2的距离作为权重,这也是很好理解的,P点与P1、P2点符合线性变化关系,所以P离P1近就更接近P1,反之则更接近P2。

现在再把公式中的分式看成一个整体,原式可以理解成y1与y2是加权系数,如何理解这个加权,要返回来思考一下,咱们先要明确一下根本的目的:咱们现在不是在求一个公式,而是在图像中根据2个点的像素值求未知点的像素值。这样一个公式是不满足咱们写代码的要求的。
现在根据实际的目的理解,就很好理解这个加权了,y1与y2分别代表原图像中的像素值,上面的公式可以写成如下形式:

f ( P ) = x 2 − x x 2 − x 1 f ( P 1 ) + x − x 1 x 2 − x 1 f ( P 2 ) f(P)=\frac{x_{2}-x}{x_{2}-x_{1}} f\left(P_{1}\right)+\frac{x-x_{1}}{x_{2}-x_{1}} f\left(P_{2}\right) f(P)=x2x1x2xf(P1)+x2x1xx1f(P2)
2. 双线性插值

已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2),求其中点P(x,y)的值。

在这里插入图片描述

前面介绍过双线性插值是分别在两个方向计算了共3次单线性插值,如图所示,先在x方向求2次单线性插值,获得R1(x, y1)、R2(x, y2)两个临时点,再在y方向计算1次单线性插值得出P(x, y)(实际上调换2次轴的方向先y后x也是一样的结果)。

  1. x方向单线性插值 直接带入前一步单线性插值最后的公式

    f ( R 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f ( R 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f\left(R_{1}\right)=\frac{x_{2}-x}{x_{2}-x_{1}} f\left(Q_{11}\right)+\frac{x-x_{1}}{x_{2}-x_{1}} f\left(Q_{21}\right) \\ f\left(R_{2}\right)=\frac{x_{2}-x}{x_{2}-x_{1}} f\left(Q_{12}\right)+\frac{x-x_{1}}{x_{2}-x_{1}} f\left(Q_{22}\right) f(R1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)f(R2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)

  2. y方向单线性插值

f ( P ) = y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P)=\frac{y_{2}-y}{y_{2}-y_{1}} f\left(R_{1}\right)+\frac{y-y_{1}}{y_{2}-y_{1}} f\left(R_{2}\right) f(P)=y2y1y2yf(R1)+y2y1yy1f(R2)

将第一步结果带入第二步

f ( x , y ) = f ( Q 11 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y − y 1 ) f(x, y)=\frac{f\left(Q_{11}\right)}{\left(x_{2}-x_{1}\right)\left(y_{2}-y_{1}\right)}\left(x_{2}-x\right)\left(y_{2}-y\right)+\frac{f\left(Q_{21}\right)}{\left(x_{2}-x_{1}\right)\left(y_{2}-y_{1}\right)}\left(x-x_{1}\right)\left(y_{2}-y\right)+\frac{f\left(Q_{12}\right)}{\left(x_{2}-x_{1}\right)\left(y_{2}-y_{1}\right)}\left(x_{2}-x\right)\left(y-y_{1}\right) f(x,y)=(x2x1)(y2y1)f(Q11)(x2x)(y2y)+(x2x1)(y2y1)f(Q21)(xx1)(y2y)+(x2x1)(y2y1)f(Q12)(x2x)(yy1)

回顾一下上面双线性插值对应关系的图,不难发现,在计算中有这样的关系:

x 2 = x 1 + 1 ; y 2 = y 1 + 1 x_{2}=x_{1}+1 ; y_{2}=y_{1}+1 x2=x1+1;y2=y1+1

那么上面的公式中的分母全都为0,如下:

f ( x , y ) = f ( Q 11 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x − x 1 ) ( y − y 1 ) f(x, y)=f\left(Q_{11}\right)\left(x_{2}-x\right)\left(y_{2}-y\right)+f\left(Q_{21}\right)\left(x-x_{1}\right)\left(y_{2}-y\right)+f\left(Q_{12}\right)\left(x_{2}-x\right)\left(y-y_{1}\right)+f\left(Q_{22}\right)\left(x-x_{1}\right)\left(y-y_{1}\right) f(x,y)=f(Q11)(x2x)(y2y)+f(Q21)(xx1)(y2y)+f(Q12)(x2x)(yy1)+f(Q22)(xx1)(yy1)

在有些资料中,会写成权重的形式,上面的展开式是下面的权重表达式的正确求法

f ( x , y ) = f ( Q 11 ) w 11 + f ( Q 21 ) w 21 + f ( Q 12 ) w 12 + f ( Q 22 ) w 22 f(x, y)=f\left(Q_{11}\right) w_{11}+f\left(Q_{21}\right) w_{21}+f\left(Q_{12}\right) w_{12}+f\left(Q_{22}\right) w_{22} f(x,y)=f(Q11)w11+f(Q21)w21+f(Q12)w12+f(Q22)w22

这种权重的表达式也不难理解,观察一下可以发现每个点的权重都和待求点和对角点的距离有关,比如

3.双线性插值的优化

原始公式:

src ⁡ − x = des ⁡ − x ∗ src ⁡ − w / des ⁡ − w   \operatorname{src}{-}x=\operatorname{des}{-}x * \operatorname{src}{-}w / \operatorname{des}{-}w\ srcx=desxsrcw/desw 

src ⁡ − y = des ⁡ − y ∗ src ⁡ − h / des ⁡ − h \operatorname{src}{-}y=\operatorname{des}{-}y * \operatorname{src}{-}h / \operatorname{des}{-}h srcy=desysrch/desh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正点原子imx6ull-mini-Linux驱动之Linux LCD 驱动实验(19)

LCD 是很常用的一个外设,在裸机篇中我们讲解了如何编写 LCD 裸机驱动,在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。本章我们 就来学习一下如何在 Linux 下驱动 LCD 屏幕。 1:Linux …

奇安信高管合计套现7.7亿,总裁个人套现1.9亿

【文末送:技战法】 昨天网安一哥,奇安信发布《关于中电金投增持公司股份暨持股 5% 以上股东协议转让公司股份的权益变动的提示性公告》,公告显示中国电子将再次收购奇安信5%的股份。 公告显示,奇安壹号合伙人中:天津…

[Meachines] [Easy] OpenAdmin OpenNetAdmin-RCE+RSA私钥解密+Nano权限提升

信息收集 IP AddressOpening Ports10.10.10.171TCP:22,80 $ nmap -p- 10.10.10.171 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 4b:98:df:85:d1:7…

深入理解操作系统--进程(1)

文章目录 概述进程,轻量级进程和线程进程描述符linux进程四要素创建进程linux3个系统调用创建新的进程do_fork函数copy_process函数 撤销进程 小结 概述 这一章,主要讲的是进程的概念,即程序执行的一个实例。在linux源代码中,通常…

图像像素增强albumentations库的使用

albumentations是一个快速的图像增强库,用于机器学习任务。它支持各种类型的图像变换,包括但不限于旋转、平移、缩放、剪切、翻转、噪声注入、遮挡等。albumentations库可以与深度学习框架如PyTorch和TensorFlow很好地集成, 支持种类丰富的像素级变换,包括雨天、雾天、色域变…

使用Python绘制雷达图的简单示例

雷达图(Radar Chart)也被称为蜘蛛网图、星形图或极坐标图,是一种用于显示多变量数据的图形方法。它以一个中心点为起点,从中心点向外延伸出多条射线,每条射线代表一个特定的变量或指标。每条射线上的点或线段表示该变量…

面试官:如何保证缓存和数据库的一致性?

你好呀,我是苍何! 办公室里鸦雀无声,我木然的看着窗外射进来的阳光,它照在光滑的地板上,又反射到天花板上,再从天花板上反射下来时,就变成一片弥散的白光。 我在白光里偷偷放了一个恶毒的臭屁…

二百五十四、OceanBase——Linux上安装OceanBase数据库(四):登录ocp-express,配置租户管理等信息

一、目的 在部署OceanBase成功后,接下来就是登录ocp-express,配置租户管理等信息! 二、ocp-express网址以及账密信息 三、实施步骤 1 登录ocp-express 2 集群总览 3 租户管理 3.1 新建租户 3.2 配置新租户信息 剩下的几个模块了解即可&am…

redis实现的分布式锁redisson

redis服务宕机出现的概率很低,redis集群整体的思想是AP思想(优先保证高可用性) 如果非要保证业务数据强一致性建议采用CP思想,用zookeeper实现分布式锁。

C++自定义接口类设计器之模板代码生成四

关键代码 QStringList multis templateStr.split(\n);bool startConfig false;bool startVar false;bool startTemplate false;for (const auto& line : multis) {if(startConfig) {if(line.trimmed().startsWith("camealCase")) {auto name_val line.split…

Web开发-html篇-上

HTML发展史 HTML的历史可以追溯到20世纪90年代初。当时,互联网尚处于起步阶段,Web浏览器也刚刚问世。HTML的创建者是蒂姆伯纳斯-李(Tim Berners-Lee),他在1991年首次提出了HTML的概念。HTML的初衷是为了方便不同计算机…

TOA/TDOA测距定位,三维任意(>3)个锚节点,对一个未知点进行定位|MATLAB源代码

目录 程序介绍程序截图和运行结果程序截图运行结果 源代码代码修改建议 程序介绍 TOA/TDOA使用三点法测距,在空间中,有4个锚节点就可以定位,但如果有多个节点,定位效果会更好。 锚点不同时,修改程序中的向量和矩阵维度…

C++——哈希结构

1.unordered系列关联式容器 本节主要介绍unordered_map和unordered_set两个容器&#xff0c;底层使用哈希实现的 unordered_map 1.unordered_map是储存<key,value>键值对的关联式容器&#xff0c;其允许通过key快速查找到对应的value&#xff0c;和map非常相似&#x…

JavaFX布局-ToolBar

JavaFX布局-ToolBar 常用属性orientationpadding 实现方式Java实现fxml实现 容纳一组按钮的容器支持水平、垂直布局内容太多&#xff0c;会自动折叠 常用属性 orientation 排列方式&#xff0c;Orientation.VERTICAL、Orientation.HORIZONTAL flowPane.setOrientation(Orient…

【时时三省】(C语言基础)函数递归练习

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 求字符串长度 求的是arr里面字符串的长度 abc后面还有一个\0为结束标志 在结算字符串长度的时候不算\0 所以它的长度是3 模拟实现一个strlen函数 str等于\0的时候就会结束返回count 如果…

纯css的loading效果

在之前的文章里面实现loading组件的封装 其实在日常生活中我们可以采用纯css的组件方式实现loading 的效果 其中<p>元素被绝对定位在其父元素的中心&#xff0c;并且其内部的文本大小和对行间距&#xff08;line-height&#xff09;是响应式的&#xff0c;基于视口宽度&…

《工程检索增强生成系统时的七个失败点》论文 AI 解读

周末使用 AI 速度了一篇 RAG 相关的论文&#xff0c;文中提到的【设计 RAG 系统时需要考虑的七个失败点】非常有价值&#xff0c;简单整理一下分享出来&#xff0c;大家如果感兴趣可以继续阅读原文。 论文名称&#xff1a;Seven Failure Points When Engineering a Retrieval A…

php反序列化靶机serial实战

扫描ip,找到靶机ip后进入 他说这是cookie的测试网页&#xff0c;我们抓个包&#xff0c;得到cookie值 base64解码 扫描一下靶机ip的目录 发现http://192.168.88.153/backup/&#xff0c;访问 下载一下发现是他的网页源码 通过代码审计&#xff0c;发现 通过代码审计得知&…

盘点和讯飞语音转文字一样好用的4款转换工具。

语音转文字能够快速准确地记录下人们的发言&#xff0c;使用相应的工具能够让我们不用担心遗漏重要信息&#xff0c;或者花费大量时间手动整理成文字内容。很多人都知道讯飞语音转文字&#xff0c;但是现在网络上也有很多其他好用的工具&#xff0c;就比如这4款&#xff1a; 1、…

Spring的配置类分为Full和Lite两种模式

Spring的配置类分为Full和Lite两种模式 首先查看 Configuration 注解的源码, 如下所示: Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Component public interface Configuration {AliasFor(annotation Component.class)String value() defau…