如何利用EXCEL进行线性插值

如何利用EXCEL进行线性插值
如何利用EXCEL进行线性插值

如何利用EXCEL进行线性插值

EXCEL表格使用中,我们常常会遇到线性插值的问题,其中,比较有代表性的就是在水温密度和比容的取值方面。以下内容就以水温的密度和比容来说明如何利用EXCEL进行线性插值。

上图是水温密度和比容的取值计算的excel计算的截图,其中红色部分为输入的温度值,蓝色部分为计算的结果,具体的计算公式及说明见下表

计算公式 说明

温度 25 -/- 输入温度值

温度范围(下限) 20 =INDEX(A2:A12,MATCH(H2,A2:A12,1)) 找到输入的温度值的计算范围(下限)

温度范围(上限) 30 =INDEX(A2:A12,MATCH(H2,A2:A12,1)+1) 找到输入的温度值的计算范围(上限)

温度范围(下限)对应的密度 998.2 =INDEX(B2:B12,MATCH(H2,A2:A12,1)) / 温度范围(上限)对应的密度 995.7 =INDEX(B2:B12,MATCH(H2,A2:A12,1)+1) / 温度范围(下限)对应的比容 4.183 =INDEX(C2:C12,MATCH(H2,A2:A12,1)) / 温度范围(上限)对应的比容 4.174 =INDEX(C2:C12,MATCH(H2,A2:A12,1)+1) /

密度 996.95 =TREND(H5:H6,H3:H4,H2) 通过线性拟合函数求解密度

比容 4.1785 =TREND(H7:H8,H3:H4,H2) 通过线性拟合函数求解比容

相关的excel函数说明如下:

(1)INDEX函数

函数名称:INDEX

主要功能:返回列表或数组中的元素值,此元素由行序号和列序号的索引值进行确定。

使用格式:INDEX(array,row_num,column_num)

参数说明:Array代表单元格区域或数组常量;Row_num表示指定的行序号(如果省略row_num,则必须有 column_num);Column_num表示指定的列序号(如果省略column_num,则必须有 row_num)。

应用举例:如图3所示,在F8单元格中输入公式:=INDEX(A1:D11,4,3),确认后则显示出A1至D11单元格区域中,第4行和第3列交叉处的单元格(即C4)中的内容。

特别提醒:此处的行序号参数(row_num)和列序号参数(column_num)是相对于所引用的单元格区域而言的,不是Excel工作表中的行或列序号。

(2)MATCH函数

函数名称:MATCH

主要功能:返回在指定方式下与指定数值匹配的数组中元素的相应位置。

使用格式:MATCH(lookup_value,lookup_array,match_type)

参数说明:Lookup_value代表需要在数据表中查找的数值;

Lookup_array表示可能包含所要查找的数值的连续单元格区域;

Match_type表示查找方式的值(-1、0或1)。

?如果match_type为-1,查找大于或等于 lookup_value的最小数值,Lookup_array 必须按降序排列;

?如果match_type为1,查找小于或等于 lookup_value 的最大数值,Lookup_array 必须按升序排列;

?如果match_type为0,查找等于lookup_value 的第一个数值,Lookup_array 可以按任何顺序排列;如果省略match_type,则默认为1。

应用举例:如图4所示,在F2单元格中输入公式:=MATCH(E2,B1:B11,0),确认后则返回查找的结果“9”。

特别提醒:Lookup_array只能为一列或一行。

(3)TREND 函数

说明:返回一条线性回归拟合线的值。即找到适合已知数组 known_y's 和 known_x's 的直线(用最小二乘法),并返回指定数组 new_x's 在直线上对应的 y 值。

语法:

TREND(known_y's, [known_x's], [new_x's], [const])

TREND 函数语法具有下列参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):

Known_y's 必需。关系表达式 y = mx + b 中已知的 y 值集合。

?如果数组 known_y's 在单独一列中,则 known_x's 的每一列被视为一个独立的变量。

?如果数组 known_y's 在单独一行中,则 known_x's 的每一行被视为一个独立的变量。

Known_x's 必需。关系表达式 y = mx + b 中已知的可选 x 值集合。

数组 known_x's 可以包含一组或多组变量。如果仅使用一个变量,那么只要 known_x's 和 known_y's 具有相同的维数,则它们可以是任何形状的区域。如果用到多个变量,则 known_y's 必须为向量(即必须为一行或一列)。

如果省略 known_x's,则假设该数组为 {1,2,3,...},其大小与 known_y's 相同。

New_x's 必需。需要函数 TREND 返回对应 y 值的新 x 值。

New_x's 与 known_x's 一样,对每个自变量必须包括单独的一列(或一行)。因此,如果 known_y's 是单列的,known_x's 和 new_x's 应该有同样的列数。如果 known_y's 是单行的,known_x's 和 new_x's 应该有同样的行数。

?如果省略 new_x's,将假设它和 known_x's 一样。

?如果 known_x's 和 new_x's 都省略,将假设它们为数组 {1,2,3,...},大小与 known_y's 相同。

Const 可选。一个逻辑值,用于指定是否将常量 b 强制设为 0。

?如果 const 为 TRUE 或省略,b 将按正常计算。

?如果 const 为 FALSE,b 将被设为 0(零),m 将被调整以使 y = mx。

实验5 双线性插值

实验五图像的空间变换 一、实验目的 1、学习图像空间变换,并通过实验体会空间变换的效果,对其作出分析。 2、掌握利用最邻近插值和双线性插值算法(灰度插值)实现图像的缩放。 3、掌握MATLAB编程环境中基本的图像处理函数。 二、实验要求 1.读入图像,对其利用最邻近插值和双线性插值法进行缩放变换,要求先使用IPT函数进行变换,然后自己编写函数实现; 2.对比上述得到的结果。 三、实验原理 图像的空间变换,也称几何变换或几何运算,包括图像的平移、旋转、镜像变换、转置、缩放等。几何运算可改变图像中各物体之间的空间关系,这种运算可以看成是将各物体在图像内移动。 空间变换可如下表示:设(u,v)为源图像上的点,(x,y)为目标图像上的点,则空间变换就是将源图像上(u,v)处的像素值与目标图像上(x,y)处的像素值对应起来,并具有以下关系: x=X(u,v),y=Y(u,v) (即由(u,v)计算对应(x,y))(1.1) 或u=U(x,y),v=V(x,y) (即由(x,y)计算对应(u,v))(1.2) 其中X(u,v)、Y(u,v)、U(x,y)、V(x,y)均为变换。由(1.1)对应的变换称作向前映射法也叫像素移交法,而由(1.2)对应的变换称作向后映射法也叫像素填充法,向后映射法是向前映射法的逆。 最简单的插值算法是最邻近插值,也称为零阶插值。最邻近插值算法简单,在许多情况

下都能得到令人满意的结果,但是当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。双线性插值算法计算量比零阶插值大,但缩放后图像质量高,不会出现像素值不连续的的情况,这样就可以获得一个令人满意的结果。最邻近点插值取插值点的4个邻点中距离最近的邻点灰度值作为该点的灰度值。设插值点(i,j)到周边4个邻点fk(i,j)(k =1,2,3,4)的距离为dk(k =1,2,3,4),则:g(i,j)=fk(i,j),dl =min{d1,d2,d3,d4},l=1,2,3,4 。 双线性插值是利用了需要处理的原始图像像素点周围的四个像素点的相关性,通过双线插值算法计算得出的。对于一个目的坐标,通过后映射法得到其在原始图像的对应的浮点坐标(i+u,j+v),其中i,j均为非负整数,u,v为[0,l]区间的浮点数,则这个像素的值f(i+u,j+v)可由原图像中坐标为(i,j)、(i+l,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v)=(1-u)×(1-v)×f(i,j)+(1-u)×v×f(i,j+1)+u×(1-v)×f(i+l,j)+u×v×f(i+l,j+1),其中f(i,j)表示源图像(i,j)处的的像素值,以此类推,这就是双线性内插值法。 如下图所示,已知(0,0)、(0,1)、(1,0)、(1,1)四点的的灰度,可以由相邻像素的灰度值f(0,0)和f(1,0)在X方向上线性插值求出(x,0)的灰度f(x,0),由另外两个相邻像素f(0,1)和f(1,1)在X方向上线性插值可求出(x,1)的灰度f(x,1),最后由f(x,0),f(x,1)在Y 方向上进行线性插值就可以得到(x,y)的灰度f(x,y)。 四、实验代码

matlab旋转+双线性插值

自己写的Matlab旋转+双线性插值图像函数效果图: 源码: clear all; I = imread('original.jpg');

[Height,Width,RGB] = size(I); II = I;%当角度为0时直接输出 %本程序是以左上角为坐标原点 %angle_j是旋转角度,正值是按顺时针旋转,负值时按逆时针旋转 angle_j = 181; %angle是弧度 angle = 2*pi*angle_j/360; %将angle转成正值 while(angle < 0) angle = 2 * pi + angle; end %约束在0-2π内 while(angle > 2 * pi) angle = angle - 2 * pi; end %tag是判断下面的while循环有没有执行过 tag = 0; while(angle > 0) %超过90度的旋转,都先旋转90度,直到角度在0°-90°之间 %原理是旋转90度整数倍时,信息是不丢失的 if angle >= pi/2 a = pi/2; angle = angle - pi/2; elseif0 < angle < pi/2 a = angle; angle = 0; end if tag == 0 tag = 1; else I = II; [Height,Width,RGB] = size(I);%在旋转后的图像上继续旋转,从而实现大于90° 的旋转 end %正向变换用 sina = sin(a); cosa = cos(a); %逆向变换用_m == _minus sina_m = sin(-a); cosa_m = cos(-a); %旋转后图像的长度和宽度 II_height = round(sina * Width + cosa * Height); II_width = round(sina * Height + cosa * Width); II = ones(II_height,II_width,3); %先转成unit8。或者下面赋值0-1规划一下。否则imshow全是白色。 II = im2uint8(II); %%%%%%%%%%%%%%%%%%%%正向映射%%%%%%%%%%%%%%%%%%%%%%%%

双线性内插值(精)

三种插值算法 最近邻插值法的 双线性内插值: 对于图像中一个目的像素,设置坐标通过反向变换得到的浮点坐标为 (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-vf(i,j + (1-uvf(i,j+1 + u(1-vf(i+1,j + uvf(i+1,j+1 其中f(i,j表示源图像(i,j处的的像素值,以此类推 这就是双线性内插值法。双线性内插值法计算量大,但缩放后图像质量高,不会 出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊 插值的计算方法有很多,比较常用的有最近像素插值算法、双线性插值算法、双三次插值算法和分形算法的四种。其中,最近像素插值算法是最简单的一种插值 算法,这种方法是当图片放大时,缺少的像素通过直接使用与之最接近的原有像素的颜色生成,也就是说照搬旁边的像素。如图1所示,当图片扩大时,要增加X点处的像素,由于X点与A、B这两个有效像素中的B点最接近,因此X点会直接照搬B点的像素,从而使到X点生成的效果与B点一样。虽然这种算法简单,因此处理的速度很快,但结果通常会产生明显可见的锯齿,效果往往不佳。 双线性插值算法,是指输出的图像的每个像素都是原图中四个像素运算的结果 , 由于它是从原图四个像素中运算的,因此这种算法很大程度上消除了锯齿现象,而且效果也比较好。双三次插值算法是双线性插值算法的改进算法,它输出图像的每个像素都

双线性插值

双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。例如已知的红色数据点与待插值得到的绿色点如图1所示: 图1 假如我们想得到未知函数在点的值,假设我们已知函数 在, , , 及四个点的值。首先在 x 方向进行线性插值,得到 然后在 y 方向进行线性插值,得到 这样就得到所要的结果, 如果选择一个坐标系统使得的四个已知点坐标分别为(0, 0)、(0, 1)、(1, 0) 和(1, 1),那么插值公式就可以化简为

或者用矩阵运算表示为 这就是双线性内插值法。双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值 不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使 图像轮廓在一定程度上变得模糊。 双线性插值法的MATLAB源代码为: I=imread('lena.jpg'); %读入原图像 [nrows,ncols,z]=size(I); %读取图像矩阵大小,方便后面操作 K = str2double(inputdlg('please input scale factor (must between 0.2 - 5.0)', 'INPUT scale factor', 1, {'0.5'})); width = K * nrows; height = K * ncols; J = uint8(zeros(width,height,z)); widthScale = nrows/width; heightScale = ncols/height; for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出 for y = 5:height - 5 for z=1:3 xx = x * widthScale; % xx, yy为原坐标,x,y为新坐标 yy = y * heightScale; if((xx/double(uint16(xx))==1.0)&&(yy/double(uint16(yy))==1.0)) J(x,y,z) = I(int16(xx),int16(yy),z); %若xx,yy为整数,直接赋值 else a = double(uint16(xx)); b = double(uint16(yy)); x11 = double(I(a,b,z)); % x11 <- I(a,b) x12 = double(I(a,b+1,z)); % x12 <- I(a,b+1) x21 = double(I(a+1,b,z)); % x21 <- I(a+1,b) x22 = double(I(a+1,b+1,z));% x22 <- I(a+1,b+1) J(x,y,z) = uint8((b+1-yy)*((xx-a)*x21+(a+1-xx)*x11)+(yy-b)* ((xx-a)*x22+(a+1-xx)*x12)); %用双线性插值计算公式计算 end end end end

最邻近插值和双线性插值算法的比较

最邻近插值和双线性插值算法的比较 摘要:图像缩放是数字图像处理的一个基本内容,为了更好地对数字图像细节进行描述,本文简单介绍了图像处理中的空间变换、最邻近插值算法,重点分析了双线性插值算法,并通过MATLAB仿真进行图像的缩放,比较实验结果,从而验证双线性插值算法效果较好。 关键词:图像缩放;空间变换;最邻近插值;双线性插值; 0引言 数字图像处理的对象因其涉及到社会的各个领域,倍受到越来越多的关注,而图像缩放作为数字图像处理中的基本操作尤为重要,在社会的很多领域都需要对图像进行放大和缩小。本文主要比较了空间变换、最邻近插值算法和双线性插值算法。 1图像处理中的空间变换 图像的空间变换[1],也称几何变换或几何运算,包括图像的平移、旋转、镜像变换、转置、缩放等。几何运算可改变图像中各物体之间的空间关系,这种运算可以跛看成是将各物体在图像内移动。 空间变换可如下表示:设(u,v)为源图像上的点,(x,y)为目标图像上的点,则空间变换就是将源图像上(u,v)处的颜色值与目标图像上(X,y)处的颜色对应起来 (u,v) (x,y) 并具有以下关系: x=X(u,v),y=Y(u,v) (即由(u,v)计算对应(x,y))(1) 或 u=U(x,y),v=V(x,y) (即由(x,y)计算对应(u,v))(2) 其中X(u,v)、Y(u,v)、U(x,y)、V(x,y)均为变换。由(1.1)对应的变换称作向前映射法也叫像素移交法,而由(1.2)对应的变换称作向后映射法也叫像素填充法,向后映射法是向前映射法的逆[1,4]。 对于向前映射法来说,由于许多输入像素可能映射到输出图像的边界之外,故向前映射法有些浪费,而且每个输出像素的灰度值可能要由许多输入像素的灰

双线性插值-matlab实现

双线性插值算法 张俊飞一、算法简介 假设c[a]到c[a+1]之间是线性变化的,那么对于浮点数 x( a <= x < a+1) c(x) = c[a+1]*( x - a) + c[a]*( 1 + a - x); c(x) = c[a] + [ (c[a+1]-c[a])/(b-a)]*( x - a); b = a+1; c(x) = c[a] + [ c[a+1] - c[a]]*( x - a); 把这种插值方式扩展到二维情况:对于一个二维数组c, 我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数) , 那么对于浮点数的坐标(x,y)满足(a <= x < a+1, b <= y < b+1),可以先分别求出c(x,b)和c(x,b+1): c(x,b) = c[a+1][b]*( x - a) + c[a][b]*( 1 + a - x); c(x,b+1) = c[a+1][b+1]*( x - a) + c[a][b+1]*( 1 + a - x); 现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以: c(x,y) = c(x,b+1)*( y - b) + c(x,b)*( 1 + b - y) 二、matlab实现 在command窗口输入chahzi('cameraman.tif',2),这里cameraman.tif为灰度图片,得到结果如下: origin image

result image 在command窗口输入chahzi('a.jpg',0.5),这里a.jpg为彩色图片,得到结果为: origin image

双线性插值Matlab程序

I=imread('flower.jpg'); %读入原图像 [nrows,ncols]=size(I);%读取图像矩阵大小,方便后面操作 K = str2double(inputdlg('please input scale factor (must between 0.2 - 5.0)', 'INPUT scale factor', 1, {'0.5'})); width = K * nrows; height = K * ncols; J = uint8(zeros(width,height)); widthScale = nrows/width; heightScale = ncols/height; for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出 for y = 5:height - 5 xx = x * widthScale; % xx, yy为原坐标,x,y为新坐标 yy = y * heightScale; if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0) J(x,y) = I(int16(xx),int16(yy));%若xx,yy为整数,直接赋值 else a = double(uint16(xx)); b = double(uint16(yy)); x11 = double(I(a,b)); % x11 <- I(a,b) x12 = double(I(a,b+1)); % x12 <- I(a,b+1) x21 = double(I(a+1,b)); % x21 <- I(a+1,b) x22 = double(I(a+1,b+1)); % x22 <- I(a+1,b+1) J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx)

图像缩放的双线性内插值算法的原理解析

图像缩放的双线性内插值算法的原理解析 图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。 越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source): 234 38 22 67 44 12 89 65 63 这个矩阵中,元素坐标(x,y)是这样确定的,x从左到右,从0开始,y从上到下,也是从零开始,这是图象处理中最常用的坐标系,就是这样一个坐标: ---------------------->X | | | | | ∨Y 如果想把这副图放大为4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把4X4的矩阵先画出来再说,好了矩阵画出来了,如下所示,当然,矩阵的每个像素都是未知数,等待着我们去填充(这个将要被填充的图的叫做目标图,Destination): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 然后要往这个空的矩阵里面填值了,要填的值从哪里来来呢?是从源图中来,好,先填写目标图最左上角的象素,坐标为(0,0),那么该坐标对应源图中的坐标可以由如下公式得出:

实验九、图像几何变换(最近邻,双线性插值法)

实验九、图像几何变换 一,目的 1)了解图像变换的基本原理 2)掌握最近邻法及双线插值法 二,实验条件 1)微型计算机:INTEL 奔腾及更高 2)MATLAB 3)典型的灰度、彩色图像文件 三,原理 1)最近邻点法 2)双线性插值法 四,实验内容 1)对给定的图像进行缩放,倍率分别为1.5和0.7,在缩放过程中,根据灰度值不变 原理相应位置的灰度值进行记标,其中不能直接在对应的位置予以插值,记标分别 按最近邻法和双线法确定之; i.最近邻法 clear cd d: I_=imread('test.jpg');%读入原始图像 I1=rgb2gray(I_);%I2=double(I1); % J1_5 = imresize(I1,1.5);%调整图像的大小 % J0_7 = imresize(I1,.7);%调整图像的大小 [i,j]=size(I1); m=round(i*1.5);n=round(j*1.5); m_=round(i*0.7);n_=round(j*0.7); % 1.5倍最邻近 TEMP=zeros(m,n);%产生m*n矩阵 for i = 1:m for j = 1:n TEMP(i,j)=I1(round(i/1.5),round(j/1.5)); end end subplot(1,3,1) ,imshow(I1),title('原图') TEMP1_5=uint8(TEMP); subplot(1,3,2),imshow(TEMP1_5),title('1.5倍最邻近') % 0.7倍最邻近 TEMP7=zeros(m_,n_);%产生m*n矩阵 for i_ = 1:m_ for j_ = 1:n_ TEMP7(i_,j_)=I1( round(i_/0.7),round(j_/0.7) ); end end

用matlab实现双线性插值旋转图像程序

用matlab实现双线性插值旋转图像程序 2008年11月06日星期四 19:13 用matlab实现双线性插值旋转图像程序 2008-04-27 1 2:51 双线性插值:输出像素值是它在输入图像中2*2邻域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方法上对其插值。为了方便理解,先考虑一维情况下的线性插值:对于一个数列c,假设c[a]到c[a+1]之间是线性变化的,那么对于浮点数x(a<=x 1 && t(2) > 1 && t(1) < h && t(2) < w )%双线性插值 x = floor( t(1) ); y = floor( t(2) ); v1 = im( x + 1, y, : ) * ( t(1) - x ) + im( x, y, : ) * ( 1

一种不同于双线性插值的上采样方法

一种不同于双线性插值的上采样方法 今天为大家推荐一篇CVPR2019 关于语义分割的文章Decoders Matter for Semantic Segmentation: Data-Dependent Decoding Enables Flexible Feature Aggregation,该文章提出了一种不同于双线性插值的上采样方法,能够更好的建立每个像素之间预测的相关性。得益于这个强大的上采样方法,模型能够减少对特征图分辨率的依赖,能极大的减少运算量。该工作在PASCAL VOC 数据集上达到了88.1% 的mIOU,超过了DeeplabV3 + 的同时只有其30% 的计算量。 论文传送门:https://arxiv/abs/1903.02120 1. Introduction 在之前的语义分割方法中,双线性插值通常作为其最后一步来还原特征图的分辨率,由于非线性差值不能建立起每个像素的预测之间的关系,因此为了得到精细的结果,对特征图的分辨率要求较高,同时带来了巨额的计算量。 为了解决这个问题,本工作提出了Data-dependent Up-sampling (DUpsample),能够减少上采样操作对特征图分辨率的依赖,大量的减少计算量。同时得益于DUpsample,Encoder 中的low-level feature 能够以更小的运算量与Decoder 中的high-level feature 进行融合,模型结构如下所示: 我们可以看到,该网络将传统的非线性插值替换成DUpsample,同时在feature fuse 方面,不同于之前方法将Decoder 中的特征上采样与Encoder 特征融合,本工作将Encoder 中的特征下采样与Decoder 融合,大大减少了计算量,这都得益于DUpsample。 2. Our Approach 之前的语义分割方法使用下列公式来得到最终的损失: 其中Loss 通常为交叉熵损失,F 为特征图,Y 为ground truth,由于双线性插值过于简单,对特征图 F 的分辨率较高,因此引入了大量的计算。一个重要的发现是语义分割输入图像的label Y 并不是i.i.d 的,所以Y 可以被压缩成Y′,我们令, 并将Y 划分成

使用双线性插值进行图像放大的实现

使用双线性插值进行图像放大的实现 一、总体设计思路 Step 1:实现图像的打开、显示、保存,在打开图片之后将图片读入内存并获得了该图像除文件头以外的部分在缓存内存储的句柄,以及该图的调色板,调色板颜色种类数等等参数。Step 2:在显示的基础上,利用代码根据放大比例重新开辟一个缓存。将原图的BITMAPINFOHEADER拷贝过来。并修改biHeight、biWidth、biSizeImage等参数。 Step 3:利用双线性插值算法,以原图信息为基础生成新的像素信息。 原理: 双线性插值 维基百科,自由的百科全书 跳转到:导航, 搜索 双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。 红色的数据点与待插值得到的绿色点 假如我们想得到未知函数在点的值,假设我们已知函数在 , , , 及四个点的值。 首先在x方向进行线性插值,得到 然后在y方向进行线性插值,得到 这样就得到所要的结果,

如果选择一个坐标系统使得的四个已知点坐标分别为(0, 0)、(0, 1)、(1, 0) 和(1, 1),那么插值公式就可以化简为 或者用矩阵运算表示为 与这种插值方法名称不同的是,这种插值方法并不是线性的,它的形式是 它是两个线性函数的乘积。另外,插值也可以表示为 在这两种情况下,常数的数目都对应于给定的f的数据点数目。 线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。 双线性插值的一个显然的三维空间延伸是三线性插值。 二、具体实现方案及细节 1、需要改变的项: ①BITMAPINFOHEADER里的biHeight、biWidth、biSizeImage。 ②所有像素点信息 2、具体方案的设计: ①对双线性插值的理解: 放大图像时,插值就是根据比例得到一个坐标(x,y)。该坐标可分为四种情况: (1)得到的x和y都是整数且落在原图中,则直接取出该像素点的颜色信息即可。 (2)得到的x为整数,y为小数。这个时候则根据插值法的计算方式。对y取y1=(int)y;y2=(int)y+1;x取该整数即可。若得到的点都在原图上,则y方向进行插值得到该像素点的颜色信息。 (3)得到的x为小数,y为整数时。可仿照(2)进行计算。 (4)得到的想x,y都为小数。x1=(int)x;x2=(int)x+1;y1=(int)y;y2=(int)y+1;若得到的点都在原图上,则按照双线性插值的计算方法得到该像素点的颜色信息。 ②对于求出的点中不在原图上的情况,我采取了放弃该像素点数值计算这样一种处理办法。 ③遍历所有像素点以及进行插值时有两种遍历方案,即按照内存行列还是按照图像实际行列进行计算和插值。在处理灰度图时,我采取了前者。也就是按照内存的行列作为计算像

图像缩放的双线性插值原理及DSP下的优化

图像缩放的双线性插值原理及DSP下的优化

目录 图目录 (3) 1案例描述 (2) 1.1图像缩放模块处理函数的实现方式 (2) 1.2双线性缩放原理 (4) 1.3DSP上的双线性缩放的实现 (8) 1.3.1通用双线性的实现 (8) 1.3.2快速双线性的实现 (10) 2案例分析 (12) 3解决过程 (12) 4解决结果 (12) 5总结 (12)

图目录 图表 1 基本的任意位置缩放效果图 (2) 图表 2 帧格式目的图像的缩放效果图 (2) 图表 3 场格式的目的图像缩放效果图 (3) 图表 4 原始图片 (6) 图表 5 最临近插值放大的效果图 (7) 图表6双线型内插值放大图片 (7)

关键词: 双线性插值dm6446 内联指令YUV格式 摘要: 本文描述了双线性插值的基本原理,同时介绍了其在YUV格式图像缩放中的应用及优化。模板编号: 模板版本:V1.0Beta1.0第1页共15页

1 案例描述 1.1 图像缩放模块处理函数的实现方式 422缩放、420的缩放以及两者之间相互缩放,在Resizer模块中都是采用双线性原理实现的,唯一不同的就是根据图像的格式不同,取数据和拼数据的方式稍有不同,另外在实现缩放的同时也加入了根据用户输入的信息在目的图像周围加上任意颜色的边框的功能。 图像缩放原理示意图如下: 图表1 基本的任意位置缩放效果图 缩放位置的宽和高缩放后图像的宽高,包括边框 源图像的步进值 目的图像的步进值 源图像首指针 目的图 像指针缩放 到指 定位 置 下面是目的图像为帧格式时加边框之后的效果: 图表2 帧格式目的图像的缩放效果图 模板编号: 模板版本:V1.0Beta1.0第2页共15页

双线性插值matlab程序

灰度级插值之双线性原理与实现 (陈云川ybc2084@https://www.360docs.net/doc/375927425.html, UESTC,CD) 1 原理简述 在对图像进行空间变换的过程中,典型的情况是在对图像进行放大处理的时候,图像会出现失真的现象。这是由于在变换之后的图像中,存在着一些变换之前的图像中没有的像素位置。为了说明这个问题,不妨假设有一副大小为64x64的灰度图像A,现在将图像放大到256x256,不妨令其为图像B,如图1所示。显然,根据简单的几何换算关系,可以知道B图像中(x,y)处的像素值应该对应着A图像中的(x/4,y/4)处的象素值,即 B(x,y) = A(x/4,y/4) (式1) 对于B中的(4,4),(4,8),(4,16)…(256,256)这些位置,通过式1就可以计算出其在A 中的位置,从而可以得到灰度值。但是,对于B中的(1,1),(1,2),(1,3)…等等这些坐标点而言,如果按照式1计算的话,那么它们在A中对应的坐标不再是整数。比如,对于B中的坐标点(1,1),其在A中的对应坐标就变成了(0.25,0.25)。对于数字图像而言,小数坐标是没有意义的。因此,必须考虑采用某种方法来得到B中像素点在A中对应位置上的灰度级。 处理这一问题的方法被称为图像灰度级插值。常用的插值方式有三种:最近邻域插值、双线性插值、双三次插值。理论上来讲,最近邻域插值的效果最差,双三次插值的效果最好,双线性插值的效果介于两者之间。不过对于要求不是非常严格的图像插值而言,使用双线性插值通常就足够了。 本文中将采用matlab实现一个双线性插值的程序。 双线性插值的原理如图2所示。图像之间坐标映射有两种方式:如果是从原图像的坐标映射到目标图像,称为前向映射,反之则称为后向映射。显然,双线性插值采用的是后向映射方式。 下面对图2的具体含义进行说明。首先,根据几何关系,从B图像中的坐标(x,y)得到A图像中的坐标(x/4,y/4),但是,映射得到的这个坐标(x/4,y/4)并没有刚好位于A 图像中的整数坐标上,而是映射到了四个像素坐标(a,b)、(a+1,b)、(a,b+1)、(a+1,b+1)所围成的矩形之间,其中,a、b是A图像的整数坐标。现在的问题就是如何根据A(a,b)、A(a+1,b)、A(a,b+1)、A(a+1,b+1)这四个点上的灰度级求出A(x/4,y/4)处的灰度级。双线性插值技术采用的方法是:假设A图像的灰度级变化在纵向方向上是线性变化的,这样根据直线方程或者几何比例关系就能够求得(a,y/4)和(a+1,y/4)坐标处的灰度级 A(a,y/4)和A(a+1,y/4)。然后,再假设在((a,y/4),A(a,y/4))和(a+1,y/4),A(a+1,y/4))这两点所确定的直线上,灰度级仍然是线性变化的。求出直线方程,于是就可以求得(x/4,y/4)处的灰度级A(x/4,y/4)。这就是双线性插值的基本思路。其中用到的两个基本假设是:首先灰度级在纵向方向上是线性变化的,然后假定灰度级在横向方向上也是线性变化的。

双线性插值法缩放图像函数MATLAB程序(精)

% Define a function for shrinking and zooming images by bilinear interpolation % I is the original image and N is the factor for shrinking firstly and zooming later function interpolation_shrink_zoom_image(I, N % First to shrink the original image % To measure the size of original image I [P,Q]=size(I; % Rebuild the original image I to I_TEMP for bilinear interpolation I_TEMP=zeros(P+2,Q+2; I_TEMP(2:P+1,2:Q+1=I; I_TEMP(1,2:Q+1=I(1,:; I_TEMP(P+2,2:Q+1=I(P,:; I_TEMP(2:P+1,1=I(:,1; I_TEMP(2:P+1,Q+2=I(:,Q; I_TEMP(1,1=I(1,1; I_TEMP(1,P+2=I(1,P; I_TEMP(P+2,1=I(P,1; I_TEMP(P+2,Q+2=I(P,Q; I_TEMP=double(I_TEMP; % To fix the size of shrunken image % R is the number of rows and C is the number of columns R=floor(P/N; C=floor(Q/N; % Define the shrunken image I_S=zeros(R,C;

相关主题
相关文档
最新文档