18.双线性插值缩放算法的matlab与FPGA实现

一篇文章为你讲透双线性插值

简介

1.什么是插值

  图片放大是图像处理中的一个特别基础的操作。几乎在每一个图片相关的项目中,从传统图像处理到i深度学习,都有应用。
  简单来说,插值指利用已知的点来“猜”未知的点,图像领域插值常用在修改图像尺寸的过程,由下图是双线性插值的效果。
在这里插入图片描述

2.常用的插值算法

  插值算法有很多种,这里列出关联比较密切的三种:
    (1)最近邻法(Nearest Interpolation):计算速度最快,但是效果最差。
    (2)双线性插值(Bilinear Interpolation):双线性插值是用原图像中4(22)个点计算新图像中1个点,效果略逊于双双三次插值,速度比双三次插值快,属于一种平衡美,在很多框架中属于默认算法。
    (3)双三次插值(Bicubic interpolation):计算速度最快,但是效果最差双三次插值是用原图像中16(4
4)个点计算新图像中1个点,效果比较好,但是计算代价过大。

插值算法介绍

2.1最近邻法(Nearest Interpolation)

  最近邻算法不需要计算新图像中矩阵中点的数值,直接找到原图像中对应的点,将数值赋值给新图像矩阵中的点,根据对应关系找到原图像中的对应的坐标,这个坐标可能不是整数;这时候找最近的点进行插值。对应关系如下:
在这里插入图片描述
  上图效果是最近邻法的计算过程示意图,由上图可见,最近邻法只是把最外围的像素复制了一遍。最近邻法不需要计算只需要寻找原图中对应的点,所以最近邻法速度最快,但是会破坏原图像中像素的渐变关系,原图像中的值是渐变的,但是在新图像中局部破坏了这种渐变关系。

2.2 双线性插值对应的关系

  双线性插值的对应公式和前面的最近邻法一样,不一样的是根据对应关系不再是找最近的一个点,而是找最近的四个点,如下图所示:
在这里插入图片描述
  这里我们根据四个点来计算一个点,这一个点是根据单线性插值在两个不同方向上计算出来的。下面先介绍以下单线性插值。

2.2.1 单线性插值

已知图像中P1和P2两个点,坐标分别为 ( x 1 , y 1 ) (x1,y1) (x1,y1) ( x 2 , y 2 ) (x2,y2) (x2,y2),要计算 [ x 1 , x 2 ] [x1,x2] [x1,x2]区间内某一位置x在直线上的y值。
在这里插入图片描述
  根据初中的知识,2点求一条直线公式(这是双线性插值所需要的唯一的基础公式)。
y − y 1 x − x 1 = y 2 − y 1 x 2 − x 1 (1) \frac{y-y_1}{x-x1}=\frac{y_2-y_1}{x_2-x_1}\tag{1} xx1yy1=x2x1y2y1(1)
  经过简单整理成下面的格式:
y = x 2 − x x 2 − x 1 y 1 + x − x 1 x 2 − x 1 y 2 (2) y=\frac{x_2-x}{x2-x_1}y_1+\frac{x-x_1}{x_2-x_1}y_2\tag{2} y=x2x1x2xy1+x2x1xx1y2(2)
  这里没有写成经典的AX+B的形式,因为这种形式从权重的角度很好理解。
  首先看分子,分子可以看成x与x1和x2的距离作为权重,这也是很好理解的,P点与P1、P2点符合线性变化的关系,所以P离P1近就更接近P1,离P2近就更接近P2。
  现在再把公式中的分式看作是一个整体,原式可以理解成y1和y2的加权系数,如何理解这个加权系数呢,要返回来思考一下,先明确根本目的:我们是要在图像中根据两个已知的像数值求未知点的像数值。这样一个公式是不满足写代码的需求的,图中的y1和y2分别代表原图像中的像素值,上面的公式可以写成如下格式。
f ( P ) = x 2 − x x 2 − x 1 f ( P 1 ) + x − x 1 x 2 − x 1 f ( P 2 ) (3) f(P)=\frac{x_2-x}{x2-x_1}f(P_1)+\frac{x-x_1}{x_2-x_1}f(P_2)\tag{3} f(P)=x2x1x2xf(P1)+x2x1xx1f(P2)(3)

2.2.2 双线性插值

  已知 Q 11 ( x 1 , y 1 ) 、 Q 12 ( x 1 , y 2 ) 、 Q 2 , 1 ( x 2 , y 1 ) 、 Q 22 ( x 2 , y 2 ) Q_{11}(x_1,y_1)、Q_{12}(x_1,y_2)、Q_{2,1}(x_2,y_1)、Q_{22}(x_2,y_2) Q11(x1,y1)Q12(x1,y2)Q2,1(x2,y1)Q22(x2,y2),求其中 P ( x , y ) P(x,y) P(x,y)的值。
在这里插入图片描述
  根据前面介绍的单线性插值,我们可以推算出双线性插值的计算过程,首先对 Q 11 Q_{11} Q11 Q 21 Q_{21} Q21在X轴上求线性插值得到 R 1 R_1 R1,同样对 Q 12 Q_{12} Q12 Q 22 Q_{22} Q22在X轴上求线性插值可以得到 R 2 R_2 R2,然后再对 R 1 R_1 R1 R 2 R_2 R2在y轴上求线性插值得到 P ( x , y ) P_(x,y) P(x,y)
  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 ) (4) f(R_1)=\frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21})\tag{4} f(R1)=x2x1x2xf(Q11)+x2x1xx1f(Q21)(4)
f ( R 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) (5) f(R_2)=\frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22})\tag{5} f(R2)=x2x1x2xf(Q12)+x2x1xx1f(Q22)(5)
  2.y方向上的单线性插值,根据公式三有:
f ( P ) = y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) (6) f(P)=\frac{y_2-y}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2)\tag{6} f(P)=y2y1y2yf(R1)+y2y1yy1f(R2)(6)
  将第一步结果带入第二步有
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 ( Q 22 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x − x 1 ) ( y − y 1 ) f(x,y)=\frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y_2-y)+\frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y_2-y)+\frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y-y_1)+\frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y-y_1) f(x,y)=(x2x1)(y2y1)f(Q11)(x2x)(y2y)+(x2x1)(y2y1)f(Q21)(xx1)(y2y)+(x2x1)(y2y1)f(Q12)(x2x)(yy1)+(x2x1)(y2y1)f(Q22)(xx1)(yy1)
  观察图片中双线性插值的关系图,可以有
x 2 = x 1 + 1 y 2 = y 1 + 1 (8) x_2=x_1+1\;\;\;\;\;\;\;\;\;\;y_2=y_1+1\tag{8} x2=x1+1y2=y1+1(8)
  那么公式七中的分母全部为1,可以得到如下公式:
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(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(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 (10) f(x,y)=f(Q_{11})w_{11}+f(Q_{21})w_{21}+f(Q12)w_{12}+f(Q_{22})w_{22}\tag{10} f(x,y)=f(Q11)w11+f(Q21)w21+f(Q12)w12+f(Q22)w22(10)
  这种权重表达式也不难理解,观察一下可以发现每个点的权重都和代求点和对角点的距离有关。

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

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

相关文章

华为OD机试【分奖金】(java)(100分)

1、题目描述 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么&…

【class9】人工智能初步(处理单张图片)

Class9的任务:处理单张图像 为了更高效地学习,我们将“处理单张图像”拆分成以下几步完成: 1. 读取图像文件 2. 调用通用物体识别 3. 提取图像分类信息 4. 对应分类文件夹还未创建时,创建文件夹 5. 移动图像到对应文件夹 0.获取…

Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置

目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本:22.04.3 位数:64-bit 二…

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明: 项目A是现在的vue2前端项目,项目B是一个开源的工作流前端,项目后端代码已经整合了,就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能,拷贝到自己对应的vue2项目里…

大模型MoE技术深度解读,引领AI走向新高度

大模型系列之解读MoE Mixtral 8x7B的亮相,引领我们深入探索MoE大模型架构的奥秘。MoE究竟是什么?一起揭开它的神秘面纱。 1. MoE溯源 MoE,源自1991年的研究论文《Adaptive Mixture of Local Experts》,与集成学习方法相契合&…

机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)

一、简述 在最近的研究中,出现了号称传统多层感知器 (MLP) 的突破性替代方案,重塑了人工神经网络 (ANN) 的格局。这种创新架构被称为柯尔莫哥洛夫-阿诺德网络 (KAN),它提出了一种受柯尔莫哥洛夫-阿诺德表示定理启发的函数逼近的方法。 与 MLP 不同,MLP 依赖于各个节…

NASA数据集——GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT)

AIRS-AMSU variables-CloudSat cloud mask, radar reflectivities, and cloud classification matchups V3.2 (AIRSM_CPR_MAT) at GES DISC GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT) 简介 这是 NetCDF-4 格式的 AIRS-CloudSat 定位子…

餐谱的展示程序

开发背景 可以根据分类直接找到需要展示的餐谱,大的分类A、B、C、D等 二级分类 A1、A2、A3、A4。。。 餐谱就是图片 加 说明 页面 选择一级分类A,选择二级分类A1,查询出该分类下的餐谱 代码 /*** 查询列表*/RequiresPermissions("…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 (1)Express定义: Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面

Python代码:一、HelloWorld

1、题目: 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来。 2、代码 import sys str Hello World ! print(str)3、在sublime运行的结果

第18节 神级开源shellcode工具:donut

我做了一个关于shellcode入门和开发的专题👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。 我的…

python创建新环境并安装pytorch

python创建新环境并安装pytorch 一、创建新环境1、准备工作2、创建虚拟环境并命名3、激活虚拟环境 二、安装pytorch1、pytorch官网2、选择与你的系统相对应的版本3、安装成功 一、创建新环境 1、准备工作 本次创建的环境是在anaconda环境下,否则需要在纯净环境下创…

AutoNeRF:Training Implicit Scene Representations with Autonomous Agents

论文概述 《AutoNeRF》是由Pierre Marza等人撰写的一篇研究论文,旨在通过自主智能体收集数据来训练隐式场景表示(如神经辐射场,NeRF)。传统的NeRF训练通常需要人为的数据收集,而AutoNeRF则提出了一种使用自主智能体高效…

Spring Boot | Spring Boot 中 自定义“用户退出控制“、获取“登录用户信息“

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 ) :二、 自定义 "用户退出控制" ( 通过 "HttpSecurity类" 的 logout( )方法来实现 "自定义用户用户登录控制" ) :1.基础项目文件准备2.实现 "自定义身份认证"…

springboot005学生心理咨询评估系统

springboot005学生心理咨询评估系统 亲测完美运行带论文:获取源码,私信评论或者v:niliuapp 运行视频 包含的文件列表(含论文) 数据库脚本:db.sql其他文件:ppt.ppt论文:开题.doc论文&#xf…

WT99C262-SG LoRa开发板使用教程

WT99C262-SG模块是全新一代的Wi-FiBLELoRa无线扩频模块,基于启明云端WTLRC262-SG系列模组设计开发的新一代LoRa扩频芯片方案设计的无线串口模块。具有多种传输方式,LoRa扩频技术,且模组大部分管脚均已引出至两侧排针,开发人员可根…

爬虫界的“闪电侠”:异步爬虫与分布式系统的实战秘籍

Hi,我是阿佑,前文给大家讲了,如何做一个合法“采蜜”的蜜蜂,有了这么个自保的能力后,阿佑今天就将和大家踏入 —— 异步爬虫 的大门! 异步爬虫大法 1. 引言1.1 爬虫框架的价值:效率与复杂度管理…

卷轴分红商城模式:适用于多种的商业营销模式

卷轴分红商城模式是一种基于区块链技术的去中心化积分商城系统,通过智能合约和数字资产分红实现积分流通和价值回馈,适用于多种场景。 什么是卷轴分红商城模式: 这是一个去中心化的积分商城系统,消费者在商城消费时,可…

番外篇 | 一文读懂卷积神经网络(CNN)的基础概念及原理

前言:Hello大家好,我是小哥谈。卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。本文旨在对卷积神经网络进行详细的讲解,从基本原理到实际应用,帮助读者全面了解CNN的工作原理、优势和基本组成等,以及其在现实生…