1.4 本文采用的算法
上述3种图像插值算法中最近邻插值放大实现最为简单,处理速度快,但它只是把原始像素简单的复制到其邻域内,放大图像就会出现明显的方块或锯齿,不能很好地保留原始图像的边缘信息。双三次插值算法的视觉效果最好,但计算复杂开发周期长,占用的硬件资源较大,不符合本系统的资源要求。使用双线性插值能够较好地消除锯齿,保留原始图像的边缘信息,放大后的图像较平滑,且有较好的视觉效果。本文选取改进型的线性插值(2×1邻域和1×2邻域)作为最终实现方案。如图1所示,实心表示原始像素,空心表示放大后的图像。本文采用的算法数学表达式为:
2 算法基于FPGA的设计与实现
2.1 系统结构
系统总体结构如图2所示,行插值和数据控制模块控制数据存入双口RAM中,并在存入的过程中实现行的放大,因为采用2×2领域放大,每个目标像素放大所需的原始图像相邻2行的2个像素,所以可以将相邻2行写入双口RAM。列插值和数据控制模块实现列放大和把插值后的数据送入到下一个模块。
数据流向是图像放大模块的重点和难点,如何实现实时性,良好的数据控制很重要。在数据从上一个模块读入的同时,行插值模块就完成了行放大。在一帧图像的帧头,行插值模块对2行数据进行操作,在第2行到倒数第2行,行插值只对单行数据进行处理,处理完毕后并通知列插值模块进行下一步运算。列插值模块在收到行插值模块给的信号后,从双口RAM中读取已经存入的两行数据,并完成中间行的插值,在运算的过程中并把RAM中的第一行的数据逐个读出并送到下一个模块。当完成列插值运算后,立即通知行插值模块开始读入新的一行,并在读入的同时,把新产生的行读出。行插值模块完成新的一行读入后,通知列插值模块与RAM中上一次存入的第二行(第一次列插值的第3行)进行列插值操作,并重复上述操作,直至完成当前帧。具体流程如图3所示。
上一页 [1] [2] [3] 下一页