仿射变换与插值算法

仿射变换

仿射变换数学上可以表示为矩阵乘法,本质是线性变换。具体可以实现为图像的平移、旋转、以及缩放等。

插值算法

插值的本质就是利用原图已知点的像素来计算新图对应位置上的像素值。插值算法就是如何对原图像素点进行选取然后计算。

最近邻法(nearest)

最近邻法不需要计算,只需要按照图像比例,将新图像素点映射到原图像素点获取像素值。

假设新图坐标为(des_x,des_y),新图长宽为img_o_h、img_o_w,原图长宽为img_i_h、img_i_w。则新图像素点对应在原图上坐标为(src_x,src_y)

其中des_x/src_x = img_o_w/img_i_w,des_y/src_y = img_o_h/img_i_h

将求得的src_x和src_y四舍五入即可对应到原图上某一点,认为此点像素值即是新图上对应点的像素值。

单线性插值

公式来源

若认为y是新像素点的像素值,y1和y2是所取点的像素值,即可根据两个所取点的像素值按照新点与所取点横坐标确定的权重系数获得新的像素值。

双线性插值

双线性插值的本质是进行三次单线性插值。即取四个点,例如(1,1)(2,2)(3,3)(4,4),四个点按照对角线分布。

双线性插值计算过程就是先在(1,1)(2,2)之间和(3,3)(4,4)之间分别进行单线性插值,获得两个中间点(x0,y0)(x1,y1),然后(x0,y0)(x1,y1)之间再进行一次单线性插值,即可获得新像素点的像素值。

小结

图像的线性变换所有新像素点的像素值完全由原图像素点计算得来,具体精度取决于权重系数。

如图像放大,采用双线性插值每4个点计算出8个像素值即可进行放大。而每4个点计算出1个像素值,就实现了缩放。

RTL实现

secret

posted @ 2022-04-08 11:37  骑猪上树的少年  阅读(506)  评论(0)    收藏  举报
回到顶部