双线性内插值(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档