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

一、软光敏介绍

消费类摄像机,一般都存在全彩模式和黑白模式,即环境照度较高画面全彩,环境照度较低 画面黑白、开红外补光灯。这时候涉及一个切换问题,如何判断当前的环境照度。

最开始使用的都是硬光敏,即光敏电阻,后需便开发完善了软光敏,主要目的就是代替硬光敏实现判断功能。

二、软光敏逻辑

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

1、基本实现原理

使用AE模块的EV值(增益和曝光行合起来的一个参数)来判断画面亮度,AWB模块的RGB分量来判断红外灯反光场景。

白天只判断亮度,超过阈值后切黑白、开红外灯;夜视下通过EV值来判断亮度,RGB分量判断红外占比,到达一定亮度,且红外灯占比很小时切全彩、关灯板

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

cpp 复制代码
/*获取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信息

cpp 复制代码
	/*计算画面总的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;
	}

③软光敏具体功能实现

cpp 复制代码
	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

相关推荐
智驾1 天前
SOLID原则学习,接口隔离原则
c++·接口隔离原则·solid
合方圆~小文4 天前
【传统枪机现代枪机的功能需求】
人工智能·功能测试·接口隔离原则·零售·外观模式
ke_wu12 天前
常见设计原则
接口隔离原则·依赖倒置原则·里氏替换原则·开闭原则·迪米特法则·单一职责原则
比格丽巴格丽抱23 天前
spring\strust\springboot\isp前后端那些事儿
spring boot·spring·接口隔离原则
爱跨境的笑笑1 个月前
ISP 代理提供商:互联网安全的关键参与者
网络·网络协议·tcp/ip·智能路由器·ip·接口隔离原则
huaqianzkh1 个月前
接口隔离原则理解和实践
设计模式·接口隔离原则
记录无知岁月2 个月前
【GD32】(三) ISP基本使用
接口隔离原则
Theodore_10222 个月前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
Bonne journée2 个月前
摄像机ISP和DSP的区别?
接口隔离原则·摄像机isp和dsp的区别?