双线性内插值(精)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三种插值算法
最近邻插值法的
双线性内插值:
对于图像中一个目的像素,设置坐标通过反向变换得到的浮点坐标为
(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点一样。虽然这种算法简单,因此处理的速度很快,但结果通常会产生明显可见的锯齿,效果往往不佳。
双线性插值算法,是指输出的图像的每个像素都是原图中四个像素运算的结果
,
由于它是从原图四个像素中运算的,因此这种算法很大程度上消除了锯齿现象,而且效果也比较好。双三次插值算法是双线性插值算法的改进算法,它输出图像的每个像素都
是原图16个像素运算的结果,由于效果好,运算速度也不慢,因而这种插值方法是一种很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。
分形算法具有无限的细节和自相似的特点,它可以使到图形无论如何放大,看起来都与原图形很相似,因此得到的图像效果,跟其他算法相比更清晰、更锐利,但在计算上也相对比其他算法要复杂很多
三次卷积法能够克服以上两种算法的不足,计算精度高,但计算亮大,他考虑一个浮点坐标(i+u,j+v周围的16个邻点,目的像素值f(i+u,j+v可由如下插值公式得到
f(i+u,j+v = [A] * [B] * [C]
[A]=[ S(u + 1 S(u + 0 S(u - 1 S(u - 2 ]
厂f(i-1, j-1 f(i-1, j+0 f(i-1, j+1 f(i-1, j+2 n
[B]= | f(i+0, j-1 f(i+0, j+0 f(i+0, j+1 f(i+0, j+2 |
I f(i+1, j-1 f(i+1, j+0 f(i+1, j+1 f(i+1, j+2 |
L f(i+2, j-1 f(i+2, j+0 f(i+2, j+1 f(i+2, j+2 」厂S(v + 1 q
[C]= | S(v + 0 |
I S(v - 1 |
厂1-2*Abs(x A2+Abs(x A3,0<=Abs(x<1
S(x={ 4-8*Abs(x+5*Abs(xA2-Abs(xA3,1<=Abs(x<2
L 0 , Abs(x>=2
S(x是对Sin(x*Pi/x的逼近(Pi是圆周率冗
最邻近插值(近邻取样法、双线性内插值、三次卷积法等插值算法对于旋转变换、错切变换、一般线性变换和非线性变换都适用。
程序:
% BILINEAR-INTERPLOT SOUCE-IMAGE TO GET A DESTINATE-IMAGE %
MAXIMUM SCALOR == 5.0, MINIMUM SCALOR == 0.2
% read source image into memory, and get the primitive rows and cols
l=imread('111.bmp';
[n rows ,n cols]=size(I;
% acquire scale-factor, the range is 0.2-5.0
K = str2double( in putdlg('please in put scale factor (must between 0.2 - 5.0', 'INPUT scale factor', 1, {'0.5'};
% Validat ing
if (K < 0.2 | (K > 5.0
errordlg('scale factor bey ond permitted ran ge(0.2 - 5.0', 'ERROR'; error('please input scale factor (must betwee n 0.2 - 5.0';
end
% display source image
imshow(I;
% output image width and height are both scaled by factor K width = K * n rows;
height = K * n cols;
J = uin t8(zeros(width,height;
% width scale and height scale
widthScale = n rows/width;
heightScale = n cols/height;
% bili near in terplot
for x = 5:width - 5
for y = 5:height - 5
xx = x * widthScale;
yy = y * heightScale;
if (xx/double(ui nt16(xx == 1.0 & (xx/double(ui nt16(xx == 1.0 J(x,y = I(i nt16(xx,i nt16(yy;
else % a or b is not in teger
a = double( uin t16(xx; % (a,
b is the base-dot
b = double(ui nt16(yy;
x11 = double(I(a,b; % x11 <- I(a,b
x12 = double(l(a,b+1; % x12 <- l(a,b+1
x21 = double(l(a+1,b; % x21 <- l(a+1,b
x22 = double(l(a+1,b+1; % x22 <- l(a+1,b+1