FPGA ISP LensShading
关于LensShading 形成的原因, 参考资料众多,这里重点讲解FPGA上如何实现Mesh LensShading。
首先,给出FPGA实现的系统框图:
在算法设计时,对图像采用分块的方式,每个块中包含一定数目的像素点,实际需要根据处理的分辨率来设计块的大小,这个需要在资源和效果两方面需要考虑:采用较小的块均衡后效果会比较细腻,但是占用大量偏上存储资源保存系数;采用较大的块均衡后效果可能比较粗糙,但是对偏上存储资源要求低。
根据输入像素点,分别在行方向和列方向计数,确定当前像素点所在的行块、列块的系数,拼接形成地址,用于索引系数LUT。同时,行计数、列计数在每个块内会有一个局部的坐标,用于索引行权重、列权重。所以FPGA会用到3张查找表,用于计算当前像素点的均衡系数。
如果所示,在对黄色的pixel进行均衡时,知道块索引以后,可以得到当前像素点用于均衡的四个系数(保存于系数LUT),Weight coe1/2/3/4。同时知道黄色pixel在矩阵中相对位置,则可以根据双线性插值原理,计算pixel对应的权重。
最后则可以完成对pixel的均衡。
理论上mesh的方式要优于radius的方式,sensor毕竟是矩形。另外,海思芯片的ISP也是推荐采用mesh shading的方式。