ISP基本原理和实现(添加自己的算法及测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

我们学习Infinite-ISP开源代码之外,除了想了解一下isp的基本原理,把代码编译出来之外,其实还可以自己编写一下算法。这样不仅对isp有一个更加深刻的认识,还能在实际项目中为自己所用。其实在实际产品中,固定的isp未必能满足客户的所有要求,那么此时用fpga对isp做增强处理,就是意料之中的事情了。在用fpga处理之前,就可以用python做一下简单的设计和预研即可。

1、确认算法在流程中的位置

实际开发之前,需要确认一下新算法的位置。它的前面一个算法是哪个,后面一个算法是哪个,这个算法要达到什么目的。

2、确认算法的参数,部署到configs.yml文件

复制代码
lens_shading_correction: 
  is_enable: false
  is_save: false

3、参数解析添加到load_config

复制代码
            self.parm_lsc = c_yaml["lens_shading_correction"]

4、算法添加到run_pipeline

复制代码
        # =====================================================================
        # Digital Gain
        dga = DG(oecf_raw, self.platform, self.sensor_info, self.parm_dga)
        dga_raw, self.dga_current_gain = dga.execute()

        # =====================================================================
        # Lens shading correction
        lsc = LSC(dga_raw, self.platform, self.sensor_info, self.parm_lsc)
        lsc_raw = lsc.execute()

        # =====================================================================
        # Bayer noise reduction
        bnr = BNR(lsc_raw, self.sensor_info, self.parm_bnr, self.platform)
        bnr_raw = bnr.execute()

5、实现算法本身your_algo.py

在Infinite-ISP开源包里面,lens shading correction这个算法其实并没有实现。如果有些朋友需要练手自己设计的算法,不妨拿它试试,

复制代码
"""
File: lens_shading_correction.py
Description:
Code / Paper  Reference:
Author: 10xEngineers Pvt Ltd
------------------------------------------------------------
"""


class LensShadingCorrection:
    """
    Lens Shading Correction
    """

    def __init__(self, img, platform, sensor_info, parm_lsc):
        self.img = img
        self.enable = parm_lsc["is_enable"]
        self.sensor_info = sensor_info
        self.parm_lsc = parm_lsc
        self.platform = platform

    def execute(self):
        """
        Execute Lens Shading Correction
        """
        print("Lens Shading Correction = " + str(self.enable))

        if self.enable:
            return self.img
        else:
            return self.img

6、测试和验证

如果是前期开发阶段,可以通过肉眼导入raw图进行验证,但是到了后期,比如生成了bitfile,就要专门去进行处理调优了,这个时候一般要做这么几件事情,

复制代码
(a)准备好对应的sensor和驱动;
(b)准备好开发板;
(c)启动开发板isp server,准备上位机isp tunning tool;
(d)准备好测试的道具,比如彩色卡、灰度渐变卡、棋盘格、灯箱、毛玻璃、道具头像等;
(e)找到尽可能多的ground truth图片;
(f)找到soc厂家的文档,开始准备调试,边学习边验证,比如rk的isp文档就比较齐全;
(g)测试的时候,可以一步一步enable isp里面的算子,从bayer到rgb到yuv,从前往后算子慢慢放开,及时保存配置文件。如果发现偏差较大,就立马返工重新标定,这样就会越来越熟练,越来越成熟。

每个厂家都有自己的isp调试文档,只不过有的好找,有的不好找,某火的isp调试文档还可以,建议可以多看看,

复制代码
https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/isp/isp.html

主要标定的流程如下所示,

ground truth图片可以尽可能多找一点,一个是raw图,一个是ground truth(比如好的单反相机拍出来的图片)。不同场景下调图ok之后,再用raw图和ground truth做局部微调,这样慢慢挑出一个自己需要的isp效果出来。本身开源代码assets目录下就有这样的对比图。

注:

图中的添加的算法都是串行的,事实上在最后阶段,y/u/v分开处理,不同的部分用不同的算法,是并行处理,最终encode的时候merge在一起的,这也是非常常见的做法。

相关推荐
ccbw1610 小时前
从一颗录音豆说起:AI会议转写的端侧方案与选型
人工智能·接口隔离原则·码率·采集
星核0penstarry5 天前
企业 API 向后兼容实战:版本控制、废弃字段通知与灰度发布策略
人工智能·后端·api·接口隔离原则·版本控制·架构设计·后端架构
OCR_133716212758 天前
户外强光下护照OCR为什么崩?从ISP到边缘AI,拆一下ER阅读器的抗眩光架构
人工智能·ocr·接口隔离原则
ccbw168 天前
CH634 四端口 USB3.0 HUB 控制器方案拆解与国产替代选型
接口隔离原则·摄像头
xunyan623411 天前
4-2 动态数码管显示(SDCC + Notepad++ + STC-ISP/普中ISP)
接口隔离原则
xunyan623419 天前
4-1 静态数码管显示(SDCC + Notepad++ + STC-ISP/普中ISP)
接口隔离原则
xunyan623419 天前
3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
kyle~20 天前
实时系统通信抖动(Jitter)
计算机视觉·机器人·接口隔离原则·传感器
xunyan623421 天前
3-1 独立按键控制LED状态(SDCC + Notepad++ + STC-ISP/普中ISP)
notepad++·接口隔离原则
xunyan623421 天前
3-3 独立按键控制LED显示二进制(SDCC + Notepad++ + STC-ISP/普中ISP)
接口隔离原则