介绍几种常用的插值方法以及代码-双线性插值

早就想着找个地方记录自己的学习历程,今天终于动笔了,虽然和好多前辈比起来,我的学习脚步慢了不少,但是我会一点点的努力的~我的第一篇博客~~嘿嘿

废话少说吧,先要介绍的插值方法有双线性插值(bilinear interpolation),双三次插值(Bi-cubic interpolation),拉格朗日插值(Largrange interpolation),还有个B-Spline,额不知道这个中文叫什么……以这样的方式介绍吧,先介绍原理,再介绍代码,我写的代码很烂的……

双线性插值

双线性插值是通过周边的四个点,计算权值,然后决定插入后的图像的像素值。新生成的图像中每个点都会计算一遍,所以很慢……

The bilinear interpolation is analogous to linear interpolation. A weighted average of the 4 surrounding grid points is used to determine the interpolated value. The method  shows as following:

上面的图图是从别处来的……是通过周边的四个肉色的点,计算出中间的红色的点的像素值。

我的代码如下,我是用了opencv,计算的方法也是最笨的那种,但是希望和我一样的初学者能理解,s1到s4是取了周边的四个点,然后计算权值:

void bilinear(IplImage *src,int h, int w, int x, int y,IplImage *dst){
	int i,j;
	float tempX,tempY;
	int xOr, yOr;
	float aX,aY;
	CvScalar s1,s2,s3,s4,sf;
	for(i = 5; i

 也许大家还有疑惑,在Bi-cubic方法中我会详细介绍,因为在那种方法的时候,我才理解的,这个代码写的很拖沓,还乱七八糟的,不过仅供理解吧。欢迎拍砖……

你可能感兴趣的:(数字图像处理,插值,双线性插值,OpenCV)