(图像缩放算法)最邻近插值法
例如:图像src为3*3的256级灰度图像(源图像)
234 38 22
67 44 12
89 65 63
矩阵中x坐标从左到右依次为0,1,2 y坐标从上到下依次为0,1,2
假设将该33图像放大至44的图像dst,那么每个像素值计算方式为:
(1)坐标对应方法(srcX srcY 为源图像坐标,dstX dstY为目标图像坐标)
srcX = datX * (srcWidth / dstWidth)
srcY = dstY * (srcHeight / dstHeight)
(2)目标图像dst像素值计算
目标图像dst中(0,0)像素点坐标对应源图像src中像素点坐标为
0 * ( 3 / 4 ) = 0
0 * ( 3 / 4 ) = 0
则目标图像dst中(0,0)点的像素值对应为源图像src中(0,0)点的像素值
即dst(0,0) = src(0,0) = 234
同理计算目标图像dst中(1,0)像素点的值
1* ( 3 / 4 ) = 0.75
0 * ( 3 / 4 ) = 0
由于数字图像坐标计算中1位最小单位(非亚像素计算下),则此处的0.75浮点数采取四舍五入或直接截断小数部分处理方式。
那么
四舍五入 dst(1,0) = src(1,0) = 38
截断小数 dst(1,0) = src(,0) = 234
由此方法产生放大后的4*4目标图像dst为
234 38 22 22
67 44 12 12
89 65 63 63
89 65 63 63
这种放大图像的方法就叫做最邻近插值法是一种最基本也是最简单的缩放算法,但效果也是最不好的,放大后的图像有严重马赛克,缩小后的图像有严重失真。
效果不好的根源是其简单的最邻近插值法引入了严重的图像失真,比如,当由目标图像的坐标反推得到的源图像坐标是一个浮点数时,采用四舍五入的方法,直接采用了和这个浮点数最接近的像素的值,这种方法是很不科学的。
当推得坐标值为0.75的时候,不应该直接采取四舍五入的方式。而是应该根据0.75这个源图像src中虚拟的点四周的四个真实点来计算。