时域插值的几种图像放大方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a=p(1,:,z);%get row 1
c=p(m,:,z);%get row m
b=[a;a;p(:,:,z);c;c];
a=b(:,1);%col 1
c=b(:,n);%col n
d=[a,a,b(:,:),c,c];
p1(:,:,z)=double(d);
end
i=zeros(nrow,ncol,3);
i(x,y,z)=(A*B*C);
end
end
end
functionA=h(t)
t=abs(t);
ift<1&&t>=0
A=1-2*t^2+t^3;
elseift>=1&&t<2
A=4-8*t+5*t^2-t^3;
else
A=0;
end
附录2
Matlab运行三种算法时间原数据
时间/s
倍率
NN
bilinear
i(x,y,:)=p(a,b,:);
end
end
2双线性插值
function[i]=bilinear(p,k)
%p the origianl graph
%k the magnification
[row,col,rgb]=size(p);%get the size of graph
nrow=row*k;
%p the origianl graph
%k the magnification
[row,col,rgb]=size(p);%get the size of graph
nrow=row*k;
ncol=col*k;
m=row;
n=col;
p1=zeros(m+4,n+4,3);
forz=1:3
%expand 2 head and 2 teil
[7]卢君,张起贵.插值算法在图像缩放中的评估研究.同煤科技.2013
[8]李红梅.基于插值算法的图像缩放技术.新乡学院学报.2017
附录
Matlab主要源程序
1最邻近插值
function[i]=NN(p,k)
%p the origianl graph
%k the magnification
[row,col,rgb]=size(p);%get the size of graph
对于数字图像
则其缩放 倍的图像
若 ,则I为x轴方向和y轴方向等比例缩放的图像;否则,图像内的像素位置会发生相对变化,产生图像几何畸变。在本文中,讨论等比例放大图像时的情况,即
由图像变换的思想,图像几何变换应当是源图像到目的图像矩阵的映射(前向映射)。前向映射时,由于系数k为有理数,矩阵坐标为自然数的情况,此目的矩阵映射为空;同时目的矩阵存在无灰度值相对应的情况。
p1(i1,j1-1,z) p1(i1,j1,z) p1(i1,j1+1,z) p1(i1,j1+2,z);
p1(i1+1,j1-1,z) p1(i1+1,j1,z) p1(i1+1,j1+1,z) p1(i1+1,j1+2,z);
p1(i1+2,j1-1,z) p1(i1+2,j1,z) p1(i1+2,j1+1,z) p1(i1+2,j1+2,z)];
统计三者相同放大倍率时的处理时间
图8
最邻近和双线性插值具有较小的时间复杂度,从而运行时间较短,而双立方由于需要计算更多的像素点以及更多浮点运算,消耗最多的时间,但可以得到最好的图像质量。
6结论
最邻近插值本质上只用了一个最接近像素点的灰度信息,运算方法简单,速度快,但其图像灰度变化处会出现明显的阶梯变化,出现“马赛克”的失真现象,整体还原情况不佳;双线性插值上是对周围4个像素点求加权平均,整体失真较小,在频域上可看作低通滤波器,在图像颜色梯度较大或图像边缘可观察到模糊的现象;双立方插值算法不仅考虑到插值临近像素的取值,还引入了周围的16个像素灰度值来锐化图像。得到的放大图像失真较小,而且还原了图像本身的细节,但其运算复杂,时间成本高。在实际应用中,应根据系统的资源、运行的环境和要求灵活运用,以达到最佳的尺度变换效果。
ifd>col d=col;c=c-1;end;i(x,y,z)=(p(b,d,z)*(x/k-a)+p(a,d,z)*(b-x/k))*(y/k-c)+(p(b,c,z)*(x/k-a)+p(a,c,z)*(b-x/k))*(d-y/k);
end
end
end
3双立方插值
function[i]=bicubic(p,k)
ncol=col*k;
i=zeros(nrow,ncol,3);
forz=1:3
forx=1:nrow
fory=1:ncol
a=floor(x/k);
b=a+1;
c=floor(y/k);
d=c+1;
%fix the edge
ifa==0 a=1;end;
ifc==0 c=1;end;
ifbwenku.baidu.comrow b=row;a=a-1;end;
[3]王林,杨克俭.基于双线性插值的图像缩放算法.电脑编程技巧与维护.2008
[4]李秀英,袁红.几种图像缩放算法的研究.现代电子技术.2012
[5]邓林华,柳光乾等.基于插值算法的图像缩放的应用研究.微计算机信息.2010
[6] Rafael C. Gonzalez,Richard E. Woods.Digital Image Processing.电子工业出版社.2013
基于时域插值的几种图像放大方法
摘要:图像插值是图像比例缩放的常用方法。针对时域图像的放大问题,介绍了最邻近、双线性和双立方三种插值方法,并使用matlab对其进行实现、分析。结果表明双立方插值得到的图像质量最高,最邻近和双线性速度较快。
1
在数字图像处理中,图像的几何变换作为图像处理的基础操作之一,为图像分析提供了灵活多变的预处理模式,简化了后级处理过程,图像的几何变换还为生成特殊样式的图形提供了可能。在图像的几何变换中,图像的比例缩放是最常用的模式。图像的比例缩放是指对数字图像大小按某确定比例进行调整的过程。
bicubic
1
0.022735
0.033644
0.150431
2
0.074091
0.137337
0.649094
3
0.169049
0.169396
1.395079
4
0.197607
0.288268
2.479701
5
0.308903
0.436682
4.167286
6
0.450844
0.63919
5.968857
因此,可引入逆映射法,首先生成一个对应大小的空目的矩阵,分别计算目的矩阵每个像素点对应于原矩阵的位置,对于落在源图像两像素之间的点,可用插值法为其映射一个灰度值,这个过程称为重采样。
重采样得出的灰度值由周围像素点的灰度和其权值特性决定,在此讨论三种常见的插值算法:最邻近(Nearest Neighbor)、双线性(Bilinear)和双立方(Bicubic)。
本文只讨论了三种在时域范围内变换的插值方法,其处理手段还有相当的局限性。若引入FFT(快速傅里叶变换),将图像变换为频域进行更灵活的处理,还可以进一步提高图像尺度变换的效率和质量,为后续图像处理提供更好的原始样本。
参考文献
[1]何东健.数字图像处理(第二版).西安电子科技大学出版社.2008
[2]王森,杨克俭.基于双线性插值的图像缩放算法的研究与实现.自动化技术与应用.2008
7
0.610786
0.852564
8.074292
8
0.802231
1.141129
10.63027
9
1.055779
1.4554
13.605293
10
1.27757
1.714451
17.008054
最邻近插值方法简单,运算速度快,但其图像灰度变化处会出现明显的阶梯变化,出现“马赛克”的失真现象,整体还原情况不佳。
3
双线性插值算法中,新插入的像素值由其距离最近的2*2个像素及与它们的距离决定。距离和权值大小成线性关系,在x轴和y轴方向同时存在现象关系,因此称为双线性插值。
定义函数
为线性插值的权值函数
4
双立方插值改进了双线性中图像模糊的问题,它参考了目的像素点映射到源图像矩阵周围4*4共16个像素的灰度值,运用的权值函数h(t)逼近来最佳插值函数 。
定义函数
图5
对插值的对应源矩阵像素点p(x,y),取其附近的4x4邻域点p(xi,yj), i,j = 1,2,3,4。按如下公式进行插值计算:
以上述4*4颜色矩阵为例
图3
在此,为加快计算速度,采用x和y轴方向长度的乘积作为衡量两像素点之间距离的参数。因此,令d为原像素点间距
则目的矩阵的灰度值为
同样以上述4*4颜色矩阵为例
图4
双线性插值本质上是对周围像素点求加权平均的过程,在频域上可看作低通滤波器,对图像有模糊的作用。在图像颜色梯度较大或图像边缘可观察到模糊的现象。
图6
双立方插值算法不仅考虑到插值临近像素的取值,还引入了周围的灰度值来锐化图像。得到的放大图像失真较小,而且还原了图像本身的细节。
5
为了比较以上三种插值方法对于图像的处理性能,分别对同一灰度图放大相同的倍数(3倍):
(a)原图
(b)最邻近插值放大
(c)双线性插值放大
(d)双立方插值放大
图7
直观比较得到,最近邻放大的图像(b)具有很明显的“马赛克”锯齿现象,图像细节几乎无法体现,物体边缘明显存在畸变和失真。图(c)由双线性插值放大而来,整体还原较好,但细节高频部分被滤波器衰减,出现了模糊的现象。双立方插值得到的图像失真少,局部有较好的体现,效果较好。
forz=1:3
forx=1:nrow
u=rem(x,k)/k;
i1=floor(x/k)+2;
A=[h(1+u) h(u) h(1-u) h(2-u)];
fory=1:ncol
v=rem(y,k)/k;j1=floor(y/k)+2;
C=[h(1+v);h(v);h(1-v);h(2-v)];
B=[p1(i1-1,j1-1,z) p1(i1-1,j1,z) p1(i1-1,j1+1,z) p1(i1-1,j1+2,z);
2
最邻近插值是最简单的插值方式,它是将目的矩阵映射到源矩阵上,将其距离最近的像素点的值作为插值的值。
将目的矩阵的点 映射到源矩阵上,
定义函数
图1
则目的矩阵的元素灰度值
在程序设计只需将转换到源矩阵的坐标四舍五入至整数
以4*4的像素矩阵RGB色域为例
将其放大30倍,并与Matlab库函数imresize()放大结果比较
i=zeros(k*row,k*col,3);
forx=1:row*k
fory=1:col*k;
a=round(x/k);
b=round(y/k);%Nearst Neibor Interpolation
%deal with if a,b==0
ifa==0 a=1;end;
ifb==0 b=1;end;
相关文档
最新文档