前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[图像]图像缩放算法-双线性内插法

[图像]图像缩放算法-双线性内插法

作者头像
祥知道
发布于 2020-03-10 06:55:00
发布于 2020-03-10 06:55:00
1.5K00
代码可运行
举报
文章被收录于专栏:祥的专栏祥的专栏
运行总次数:0
代码可运行

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/45014879


简介: 图像缩放算法–双线性内插法,以及详解Matlab二维插值算法的 interp2()

1.原理介绍

双线性内插法是利用待求象素四个邻象素的灰度 (RGB可以分别进行插值) 在两个方向上作线性内插,公式推导如下 (原谅我没用visio和MathType,还是用手简单粗暴)

2.代码实现

原来做这个只是为了验证一下 Matlabinterp2() 函数,但是发现了一些问题,原来以为是 Matlab 错了,最后发现是我太年轻了,不过也怪文档不清晰 (感觉吐槽好无力啊)

众所周知,Matlab的取值是先行后列,但这个函数的用的坐标系是图像坐标系,如上图所示,所以函数 interp2(src, x, y) 中的 xy 不是 矩阵src 的行和列,而且 x和y 既可以单一的 位置值,也可以是 位置值的矩阵,其实很简单的映射关系,但是就是特别绕 (我承认我智商有点着急) 。代码附上 (Matlab实现)

2.1.插值函数代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function zi = qfxInterp2(src, x, y)
    % if src is a matrices , number x expresses the position in the column direction and the number y expresses the position in the row direction.
    % O ---------------------> x(u,i)
    % |
    % |
    % |  点src(x, y) 在Matlab里面表示为 src(y, x)
    % |
    % |
    % |
    % y(v,j)


    % x与y应该有着相同的大小。最终形成的zi也是和x, y的size相同。
    % 如果用这个函数进行图像的变换, 则src是图像, x和y还有zi应该和src的size一样大, 关系为:
    % 点zi(u, v)是原图像中的点src( x(u, v), y(u, v) ), 但实际上这个点是通过插值得到的。x, y, src, zi都是u*v大小的矩阵, 只是src和zi存的是像素值, x和y存的是zi对应像素的插值坐标。

    % src(i, j)=a ----------------src(i+1, j)=b
    % |                      |
    % |                      dv
    % |                      |
    % |                    src(i+du,j+dv)
    % |<--------- du --------->
    % src(i, j+1)=c---------------src(i+1, j+1)=d
    %Matlab的取值顺序和上述的坐标系不同, 注意切记

    [row,col] = size(x);
    [imax,jmax] = size(src);%不能超过插值表的界限
    for v = 1:row
        for u = 1:col
            i = floor(x(v,u));
            j = floor(y(v,u));
            du = x(v,u) - i;
            dv = y(v,u) - j;

            a = getValue(src, j, i, jmax, imax);
            b = getValue(src, j, i+1, jmax, imax);
            c = getValue(src, j+1,i, jmax, imax);
            d = getValue(src, j+1,i+1, jmax, imax);

            zi(v,u) = (1-du)*(1-dv)*a + (1-dv)*du*b + (1-du)*dv*c + du*dv*d;
        end
    end

    end

    function value = getValue(mat,r,c,rMax,cMax)
        if((r>rMax)||(r<=0)||(c>cMax)||(c<=0))
            value = 0;
        else
            value = mat(r,c);
        end
    end

2.2.结果对比:

调用函数以及与 Matlabinterp2() 对比:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    clear
    clc
    source = [ 1, 2;
               3, 4];

    %想要插值的目标位置
    xLocal = [1.2,1.2 ;
              1.8,1.7];
    yLocal = [1.2,1.8;
              1.2,1.8];

    I = interp2(source, xLocal, yLocal )
    I2 = qfxInterp2(source,xLocal,yLocal)

Matlab输出效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
I =

    1.6000    2.8000
    2.2000    3.3000


I2 =

    1.6000    2.8000
    2.2000    3.3000
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
matlab—回归与内插(完结)
十七、拟合(回归)与内插 17.1 polyfit()     假设当前有一组身高数据,与其对应的有一组体重数据,我们要分析两者之间是否有某种关联,这时就需要用到曲线拟合函数polyfit,其调用格式
mathor
2018/06/22
2.2K0
[五色令人目盲|五音令人耳聋]Rayleigh-Benard对流视听盛宴~根本停不下来!
如下是一份计算Rayleigh-Benard 对流的Matlab源代码,源码来源与说明点击“阅读原文”:
周星星9527
2019/09/29
4720
[五色令人目盲|五音令人耳聋]Rayleigh-Benard对流视听盛宴~根本停不下来!
MATLAB实现线性插值interp1的功能
插值,它根据已知的数据序列(也可以理解为坐标中一连串离散的点),找到其中的规律;然后根据找到的这个规律,来对其中尚未有数据记录的点进数值的估计。
全栈程序员站长
2022/09/01
6460
MATLAB实现线性插值interp1的功能
数字图像处理学习笔记(七)——用Pycharm及MATLAB实现三种图像内插法(最近邻内插法、双线性内插法、双三次内插法)
★由于之前学习笔记(四)有对于图像三种插值的理论讲解,这里就不再赘余; 可参照此文阅读学习☞图像的三种内插法
荣仔_最靓的仔
2021/02/02
1.1K0
数字图像处理学习笔记(七)——用Pycharm及MATLAB实现三种图像内插法(最近邻内插法、双线性内插法、双三次内插法)
ROI Align和图像的双线性内插法讲解
最近在看Mask R-CNN,了解到其边框包裹紧密的原因在于将 Roi Pooling 层替换成了 RoiAlign 层,后者舍去了近似像素取整数的量化方法,改用双线性插值的方法确定特征图坐标对应于原图中的像素位置。本文整理了双线性插值的一些知识,便于更好的理解其中的操作。
泽霖
2023/11/22
5540
双线性插值 一文全讲解
大家好,又见面了,我是你们的朋友全栈君。 1、原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度,运用比较广泛。   越是简单的模型越适合用来举例子,我们就举个简单的图像:33 的256级灰度图。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source): 234 38 22 67 44 12 89 65 63   这 个矩阵中,元素坐标
全栈程序员站长
2022/08/22
1.6K0
双线性插值 一文全讲解
图像处理常用插值方法总结
在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象素的值来对该坐标进行插值。比如:做地图投影转换,对目标图像的一个象素进行坐标变换到源图像上对应的点时,变换出来的对应的坐标是一个小数,再比如做图像的几何校正,也会碰到同样的问题。以下是对常用的三种数字图像插值方法进行介绍。 1、最邻近元法   这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐
智能算法
2018/04/03
4K0
图像处理常用插值方法总结
深入理解双线性插值算法
看了好几篇关于双线性插值算法的博文,解释得都不好理解,不过下面这篇博文就解释得很好,以下内容均参考这篇:
全栈程序员站长
2022/09/06
1.5K0
深入理解双线性插值算法
图像几何变换(缩放、旋转)中的常用的插值算法
在图像几何变换的过程中,常用的插值方法有最邻近插值(近邻取样法)、双线性内插值和三次卷积法。
chaibubble
2022/05/07
2.3K0
图像几何变换(缩放、旋转)中的常用的插值算法
双线性插值算法详解并用matlab实现「建议收藏」
参考: https://blog.csdn.net/huang1024rui/article/details/46545329 数字图像处理
全栈程序员站长
2022/06/30
2.1K0
双线性插值算法详解并用matlab实现「建议收藏」
[图像]畸变校正详解
原文链接: http://blog.csdn.net/humanking7/article/details/45037239
祥知道
2020/03/10
4.3K0
最近邻插值、双线性插值、双三次插值
越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source): 234 38 22 67 44 12 89 65 63
全栈程序员站长
2022/07/01
1.5K0
最近邻插值、双线性插值、双三次插值
Matlab中插值函数汇总和使用说明
MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,'method')           
AIHGF
2019/02/18
5.5K0
Matlab中插值函数汇总和使用说明
【OpenCV】双线性插值法
定义: 又称双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向上分别进行一次线性插值。 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。
全栈程序员站长
2022/06/28
1.5K0
【OpenCV】双线性插值法
Matlab数据处理
(1) y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。
十二惊惶
2024/02/28
1880
Matlab数据处理
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
2.1 最近邻插值 (Nearest Neighbor Interpolation) —— 零阶插值法
全栈程序员站长
2022/09/06
19.4K0
【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值「建议收藏」
数学建模常用模型02:插值与拟合
拟合:已知有限个数据点,求近似函数,可不过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。
小磊建模
2023/02/11
1.3K0
数学建模常用模型02:插值与拟合
matlab插值计算
插值方法有如下: method=‘nearest’,‘linear’,‘spline’,‘pchip’,‘cubic’ 比如使用三次条样插值spline,则
全栈程序员站长
2022/09/05
1.1K0
Harris角点学习[通俗易懂]
人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点。这些点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。其在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。
全栈程序员站长
2022/11/09
2940
Harris角点学习[通俗易懂]
Matlab线性插值
figure yi_nearest=interp1(t,p,x,'nearest');%最邻近插值法 plot(t,p,'ko'); hold on plot(x,yi_nearest,'g','LineWidth',1.5);grid on; title('Nearest Method');
AIHGF
2019/02/18
2.5K0
Matlab线性插值
推荐阅读
相关推荐
matlab—回归与内插(完结)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文