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在一起的,这也是非常常见的做法。

相关推荐
大熊背19 小时前
ISP基本框架及软硬件算法实现介绍目录
网络·接口隔离原则
嵌入式-老费1 天前
ISP基本原理和实现(代码流程)
fpga开发·接口隔离原则
嵌入式-老费1 天前
ISP基本原理和实现(isp中的反馈机制)
接口隔离原则
blueSatchel10 天前
STM32F4系列使用ISP下载后,导致芯片被读写保护,无法烧录程序
stm32·嵌入式硬件·接口隔离原则
__万波__12 天前
七大设计原则(二)--接口隔离原则ISP
接口隔离原则
口袋物联25 天前
图解码说-六大设计原则(开闭原则、单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特法则)
接口隔离原则·依赖倒置原则·里氏替换原则·开闭原则·单一职责原则·设计模式原则·迪米特法原则
weixin_Todd_Wong20101 个月前
基于海思AI ISP视频编解码IPC平台的算法承载方案
接口隔离原则·视频编解码
来生硬件工程师1 个月前
【STM32笔记】:P03 ISP 一键下载电路详解
c语言·笔记·stm32·嵌入式硬件·硬件工程·接口隔离原则·硬件设计
K_i1341 个月前
云原生网络基础:IP、端口与网关实战
网络·ip·接口隔离原则