当前位置: 首页 > article >正文

君正ISP记录三:AE与AWB衍生功能“软光敏“

一、软光敏介绍
消费类摄像机,一般都存在全彩模式和黑白模式,即环境照度较高画面全彩,环境照度较低 画面黑白、开红外补光灯。这时候涉及一个切换问题,如何判断当前的环境照度。
最开始使用的都是硬光敏,即光敏电阻,后需便开发完善了软光敏,主要目的就是代替硬光敏实现判断功能。

二、软光敏逻辑
两大点:①如何判断环境亮度 ②黑白模式下,如何分辨当前场景这光亮是环境光还是机器自己的红外灯反光。实现这两点软光敏基本就OK了

1、基本实现原理
使用AE模块的EV值(增益和曝光行合起来的一个参数)来判断画面亮度,AWB模块的RGB分量来判断红外灯反光场景。
白天只判断亮度,超过阈值后切黑白、开红外灯;夜视下通过EV值来判断亮度,RGB分量判断红外占比,到达一定亮度,且红外灯占比很小时切全彩、关灯板

2、实现流程
①获取画面所需信息

/*获取AE曝光值*/
iRet = IMP_ISP_Tuning_GetAeExprInfo(0,&ExpAttr);
if (iRet != 0) {
	UTIL_ERR();
	return -1;
}
ev = ExpAttr.ExposureValue;

/*拿到AWB 统计信息*/
iRet = IMP_ISP_Tuning_GetAwbStatistics(0,&awb_zone);
if (iRet != 0) {
	UTIL_ERR("", iRet);
	return -1;
}
memcpy(zone_r,awb_zone.awb_r.statis,225 * 4);
memcpy(zone_g,awb_zone.awb_g.statis,225 * 4);
memcpy(zone_b,awb_zone.awb_b.statis,225 * 4);


②处理获取到的awb信息

	/*计算画面总的RBG分量*/
	for(i = 0;i < 15; i++) {
	    for(j = 0;j < 15; j++) {
	    	r_sum += zone_r[i][j];
	    	g_sum += zone_g[i][j];
	    	b_sum += zone_b[i][j];
	    }
	}
	if(g_sum > 0) {
		rg = (r_sum*100)/g_sum; //计算rg的100倍
		bg = (b_sum*100)/g_sum; //计算bg的100倍
		
		rgdiff = abs(rg - 100); //r跟g分量的差值
		bgdiff = abs(bg - 100); //b跟g分量的差值
		diff = (rgdiff + bgdiff)/2;
	}


③软光敏具体功能实现

	if(1 == Day_Night) {
		/*当前白天,判断是否切换夜视*/
		if((int)ev > to_night_ev) { 
		/*to_night_ev 根据不同sensor设的切换阈值*/
		/*ev值很大,说明当前场景很黑,所以切换夜视模式*/
			night_count++;
			if (night_count > 3) {
				night_count = 0;
				/*这里放切黑白夜视的需要的各种函数,灯板、ISP模式、IRCUT等*/
				}
			}
		}
		else {
			night_count = 0;
		}
	}
	else if(0 == IR_Mode_Is_Day_Night) {   
		/*当前夜视,判断是否切换白天*/
        if (ev < to_day_ev && diff > 8 ) {
        /*to_day_ev 根据不同sensor设的切换阈值*/
        /*diff 处理的awb信息,实测基本上所有sensor都适配这个数,有特殊的可以单独拎重设*/
            day_count ++;
        }
		if (day_count > 6) {
				/*这里放切黑白夜视的需要的各种函数,灯板、ISP模式、IRCUT等*/
				day_count = 0;
			}
        }
    }


这样基本功能就实现了

3、延伸
①一些主控没通过类似方法判断红外灯反光,还坚持要上软光敏的话,可以退而求其次,使用模式锁逻辑。
具体原理:软光敏在一定时间内反复切,比如 一分钟内来回切换了五次,就判断为红外灯反光场景,直接固定黑白模式一定时间,不走软光敏。该原理也可用于白光灯补光但需要上软光敏的项目
②有时候白切黑\黑切白阈值 设置的太近了,也会出发频切
③有些场景有些杂光混合,不好判断,也不想上模式锁的话,可在软光敏新增一个预切机制
具体原理:黑切白前,记住当前场景的参数,即上文代码里的diff,先关灯板切到白天,如果EV值达到白切黑的阈值,那便切到晚上,在之前记住的参数的一定范围内,不做模式切换。

                        
原文链接:https://blog.csdn.net/sashimi69/article/details/140639210


http://www.kler.cn/a/499879.html

相关文章:

  • Entity 的材质(棋盘、条纹、网格)
  • 【数据链电台】洛克希德·马丁(Lockheed Martin)
  • 错误修改系列---基于RNN模型的心脏病预测(pytorch实现)
  • NLTK分词以及处理方法
  • 智能运维新时代:AI在云资源管理中的应用与实践
  • 在 Ubuntu 中安装 C++ 版本的 Protocol Buffers
  • 【数据库篇一: MySQL的安装与配置_Windows】
  • 【Node.js】Common JS 和 ES Module 对于导出值的探究
  • linux删除用户
  • Linux 智能化系统
  • Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩
  • Vue.js:现代前端开发的灵活框架
  • 【python小工具】怎么获取视频的关键帧频率?
  • .NETCore WebApi阻止接口重复调用(并发操作)
  • JVM实战—13.OOM的生产案例
  • Apache Hop从入门到精通 第一课 揭开Apache Hop神秘面纱
  • C# 语法中级
  • 后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
  • 计算机网络 (36)TCP可靠传输的实现
  • python项目结构,PyCharm 调试Debug模式配置