关于双三次插值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 11:31:56
我初学图像处理,现在在研究图像放大的插值算法,但是看到双三次插值的时候就糊涂了,它是要考虑周围16个点的加权,但是我看了半天也没弄明白这个究竟是怎么算的,也看了几个源程序,但是水平有限,仍然没看出来。请哪位高手帮我解释下原理和算法思想?
还有就是网上有的资料那最近邻插值,双线性插值和三次样条插值或是三次卷积插值一块讲的,我想问的是三次样条插值和三次卷积插值是不是一样的?还有那个双三次插值有人告诉我是双三次卷积插值,那和三次卷积插值又有什么不一样啊?

核心代码如下:
for(y = 0; y < nNewHeight; y++)
{
//指向新图像第y行
//注意此处宽度和高度是新图像的宽度和高度
pNewTemp = pNewBits;
pNewTemp += (nNewHeight - 1 - y) * nNewWidthBytes;
//针对图像每列进行操作
for(x = 0; x < nNewWidth; x++)
{
//计算该像素在源图像中的坐标
int y0 = (long) (y / fYZoomRatio + 0.5);
int x0 = (long) (x / fXZoomRatio + 0.5);

//判断是否在源图范围内
if( (x0 >= 0) && (x0 < nOldWidth) &&
(y0 >= 0) && (y0 < nOldHeight))
{
//用双线性插值
if(bBilinear)
{
unsigned char *pTemp = Interpolation (nOldWidth, nOldHeight,
(float)x0, (float)y0,
nOldWidthBytes, nMovedBits, pOldBits);
//复制像素
memcpy(pNewTemp, pTemp, nMovedBits);

delete [] pTemp ;
}
else
//最近邻插值
{
//指向源图像第y0行,第x0个像素
//注意此处宽度和高度应该互换
pOldTemp = pOldBits;
pOldTemp += (nOldHeight - 1 - y0) * nOldWidthBytes;
pOldTemp += x0 * nMovedBits;

//复制像素