123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- // =============================================================================
- // File : Gem_isp_iris.h
- // Version : v1.0
- // Author : Honglei Zhu
- // Date : 2014.12.5
- // -----------------------------------------------------------------------------
- // Description :
- //
- // -----------------------------------------------------------------------------
- #ifndef __GEM_ISP_ERIS_HEADFILE__
- #define __GEM_ISP_ERIS_HEADFILE__
- #include "Gem_isp_ae.h"
- #define GEM_ERIS_BASE (0x110)
- #define GEM_LUT_BASE (0x1a0)
- #define GEM_ERIS_HIST_BASE (0x6f*4)
- #define GEM_ERIS_INFO_BASE (0x9b*4)
- typedef struct isp_eris_
- {
- unsigned short enable;
-
- unsigned short manual; // 1 手动模式 0 自动模式
-
- unsigned short dfsEris; // 1bit, 缺省为0
- // dfsEris = 0, resolt使用由"表项索引"="resoli^spacev"查表(指数表)得到的定值表(每个表项都使用同一个值),
- // "表项索引"越大, eris拉伸的强度越大, 画面直方图向左边挤压, 画面高光处的细节基本不变, 画面低光处的细节逐渐丢失.
- // 随着拉伸的强度越大, 画面偏色的情况逐步增加(紫绿条纹增加)
- //
- // dfsEris = 1, resolt使用由外部提供的拉伸系数表resolt, 共33项. 此时不再使用上面的"表项索引".
- // 拉伸系数表resolt描述了基于亮度的系数表( 0, 8, 16, ..., 248, 255 )
- // 这样, 可以定制不同场景下的拉伸系数表, 根据场景对低光区/高光区/其他区配置不同的拉伸系数(拉伸强度)
- // 以上获得的拉伸系数再查一个指数表, 得到拉伸强度系数
- //
- // *** 以下2种不同设置得到的eris效果完全一致 **********
- //
- // 设置1 dfsEris = 0, resoli = 230, spacev = 0
- // 设置2 dfsEris = 1, resolt的每个表项均为230
- //
- // ******************************************************
-
- unsigned short varEris; // 2bit, 选择权重系数不同的高斯表(4个表)
- // 选择不同的高斯表, 比较差异最大的选项0及选项3的图像效果, 图像效果变化非常轻微.
- // 使用imatest分析不同高斯表选项的sfrplus测试图像,
- // 1) 比较解析度, 选项3的MTF50值(1547 LW/PH)大于选项0的MTF50值(1515 LW/PH),
- // 2) 比较色差 chrom aber, 选项3的值也小于选项0的值.
- // 缺省选择选项 3. (相比选项0, 锐度稍微有点提升, 主观上(视觉)基本无法感知差异.)
-
- unsigned short resols; // 已废弃
-
- unsigned short resoli; // dfsEris = 0下的索引项值 = "resoli^spacev"
- unsigned short spacev;
-
- unsigned short target; // lum target value (default 128), 0 ~ 255
- // 超出255时, 取低字节. 即(256) == (0)
- // target增加时(最大255), 画面的平均亮度增加, 画面的动态范围基本不变(高光处及低光处细节基本不变).
-
- unsigned short black; // minium black level(0-4095)
- // 黑电平增加会减少低光处的细节, 保留高光处的细节, 缩小画面的动态范围, 提升画面的对比度
- // black值减小, 直方图逐步向右移动, 暗部细节增加, 整体亮度增加, 高光处细节会保留. 对比度降低
- // black值增加, 直方图逐步向左移动, 暗部细节减少, 整体亮度降低, 高光处细节会保留. 对比度提升
-
- unsigned short white; // maxium white level(0-4095)
- // 10bit sensor, 超出1023会压缩画面的动态范围
- // 超出4095等同4095.
- // 较小的white设置会导致画面的动态范围缩小
- // 如蓝天/白云的场景, 蓝天会随着参数的减小变为白色而使画面整体动态范围降低.
- // white值减小, 直方图向右移动. 暗部细节增加, 整体亮度增加, 高光处细节会丢失.
- // white值增加, 直方图向左移动. 暗部细节减少, 整体亮度降低, 高光处细节会保留.
- //
- // 夜晚环境下, white值较大时, 光晕现象较弱. white值较小时, 光晕现象较强.
- //
- // 场景的环境光强度较小时, 应减小white值.(夜晚, 环境光较弱, 曝光时间较长)
- // 场景的环境光强度较大时, 应增加white值.(白天, 环境光较强, 曝光时间较短)
- //
- // AR0330的white需要设置到3700以上才能很好的保护高光区不溢出,
- // 这与AR0330的12bit数据宽度有关(最大值4095).
- //
- // PS1210的white只需要设置到1023左右,就可以很好的保护高光区不溢出,
- // 这与PS1210的10bit数据宽度有关.
- //
- // 曝光时间较短时,应增加white值,
- // 1) 压缩低光区,直方图向左移动. 抑制低光区可能因为曝光时间不够而引起的色斑或紫绿条纹.
- // 2) 高光区向左移动,防止拉伸后更多高光区溢出的问题
- //
- // 夜晚场景下, 减少white值可以极大地增加场景的亮度.(white < 128)
- // 通过自适应调节white值, 可以将场景的亮度维持在某个范围之内(通过监控二次曝光的信息).
-
-
- unsigned short gain_max; // Eris max gain (0-1023)
- unsigned short gain_min; // Eris min gain (0-1023)
- // gain主要受到gain_max的影响, gain_min的影响很小. (gain_min增加时, 图像效果轻微降低, 人眼基本无法观察)
- // gain_max参数增大时, 整体亮度值增加. 直方图向右移动.(类似曝光补偿增加)
- // gain_max参数可以微调.
- // gain_max, gain_min基本不影响画面的动态范围.
- // (如蓝天/白云的场景, 蓝天不会随着参数的增加变为白色而使画面整体动态范围降低 )
- //
- // ? 值超出1023时, 画面亮度会出现翻转. (此处应确认是否需要保护)
- // 已通过ISP脚本确认, (1024) = (0), (1025) = (1), 以此类推
- //
- // 1) 过曝时应该降低gain的设置
- // 256 --> 64 (1654ID10.RAW)
-
- unsigned short cont_max; //
- unsigned short cont_min; // Eris min cont (0 - 1024)
- // 超出1024(16*64)等于1024.
- // 实际存在2个区域,
- // 区域1 (0 ~ 64), 参数变化时,ISP效果变化明显, 不适合微调。
- // 区域2 (65 ~ 1024),参数变化时,ISP效果变化缓慢, 适合微调。
- // 实际中使用区域2
- //
- // ISP Eris的对比度设置仅与Cont_min有关, 与Cont_max无关.
- // 使用自动模式时, 当设置(Cont_max, Cont_min)为(4*64, 4*64), (10*64, 4*64), (64*64, 4*64)时, ISP的效果完全一致.
- // Cont_min越小, 画面平均亮度越大, 画面对比度也越大, 动态范围也越大.
- // Cont_min增加时, 画面对比度减小, 动态范围减小.
- // 随Cont_min的参数变化,ISP画面效果变化明显.
- // 比如, 从(12,1)到(12,2), (12,3), (12,4), Cont_min每一阶梯(单位为1)的效果变化非常明显, 不利于参数微调.
- // (最好将参数灵敏度降低16倍)
- // 20160622 ISP新版本已修改, 灵敏度降低64倍, 可以微调效果.
- // 调控
- // 明亮场景下, Cont_min应该变小, 提升场景的对比度及动态范围, 保留更多的细节.
- // 阴暗场景下, Cont_max应该变大, 降低场景的对比度及动态范围, 抑制噪声与色差.
- // 直方图的暗部比例过大时, 应该降低对比度, 抑制暗部的噪声及拉伸引起的色差(紫绿纹).
- //
-
- unsigned short gain_man; // 手动模式下增益及对比度的设置参数 (0-1023)
- unsigned short cont_man;
-
- unsigned char resolt[33]; // 表项最大取值为255
- // 场景的环境光强度较小时, 应减小resolt[0], resolt[1]这2个表项的值(控制0 ~ 8 ~ 15之间的线性插值),
- // 减弱低光区拉伸后出现的色差(比如夜晚的天空拉伸后偏红, 将resolt[0], resolt[1]置为0可减弱该现象).
- // 极端情况下为0. 降低拉伸的强度, 减少暗处拉伸的噪音.
- // 拉伸的强度越大(表项值越大), 对比度越大, 但是低光处(暗处)会容易出现块状的紫/绿/蓝色斑点.
- // 拉伸的强度越小(表项值为0), 对比度最低(画面缺少层次感), 此时低光处(暗处)不容易出现块状的紫/绿/蓝色斑点.
- //
- // 表项值的变化不会影响画面的动态范围.
-
- unsigned short colort[33]; // 表项最大取值为4095 (12bit)
- // 值越大, 颜色的饱和度越高, 色彩越鲜艳.
- // 低光处(暗处)越容易出现块状的紫/绿/蓝色斑点. 表项索引越小,表项值应越小,避免色斑现象。
- // 表项值较大时,高光处容易出现偏色现象,表项索引越大,表项值应越小,降低偏色程度。
- // 实际的颜色表是一个2边小中间大的分布。
- // 表项的值一般不要超过512。
-
-
-
- // 20160627
- // 加入ERIS直方图统计
- unsigned char eris_hist_thresh[4]; // ERIS亮度直方图的4个阈值(每个阈值的取值范围为0~255)
- // bit0~7对应01区间, bit8~15对应12区间, bit16~23对应23区间, bit24~31对应34区间
-
- unsigned int eris_hist_statics[5]; // (只读信息) 5段ERIS亮度直方图的统计点像素个数,
- unsigned int eris_yavg; // (只读信息) ERIS亮度统计值, 需除以总像素点数, 得到平均亮度值
-
- } isp_eris_t;
- typedef struct isp_eris_ *isp_eris_ptr_t;
- void isp_eris_init (isp_eris_ptr_t p_iris);
- void isp_eris_init_io (isp_eris_ptr_t p_iris);
- void isp_eris_run (isp_eris_ptr_t p_iris ,isp_ae_ptr_t p_ae);
- #endif // #ifndef __GEM_ISP_ERIS_HEADFILE__
|