9. DPC¶
9.1. 功能描述¶
DPC 全称为 Defect Pixel Correction,可以修正 Sensor 上有问题的坏点。
修正方法有两种,分别为静态校正与动态校正。
静态校正:校正时分为暗点校正与亮点校正。
亮点校正时,把镜头遮黑,启动坏点标定程序。
暗点校正时,不遮黑在平坦背景时如灰度箱前,调整曝光让图像整体亮度约为 50%.
静态坏点最多允许 4095 个坏点。
动态校正:使用此方法时,不使用校正数据而是直接动态判断坏点,并且加以修正。在低噪时对画面偏色有帮助,但若强度太强可能会致画面细节降低。
【特别提醒】
这里 cv184x 系列只用到动态校正
9.2. API 参考¶
CVI_ISP_SetDPDynamicAttr : 设置动态坏点校正属性
CVI_ISP_GetDPDynamicAttr : 获取动态坏点校正属性
9.2.1. CVI_ISP_SetDPDynamicAttr¶
【描述】
设置动态坏点校正属性
【语法】
CVI_S32 CVI_ISP_SetDPDynamicAttr(VI_PIPE ViPipe, const ISP_DP_DYNAMIC_ATTR_S *pstDPDynamicAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
ViPipe |
VI_PIPE 号 |
输入 |
pstDPDynamicAttr |
动态坏点校正属性 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码。 |
【需求】
头文件: cvi_isp.h, cvi_comm_isp.h
库文件: libisp.so
【注意】
无
【举例】
VI_PIPE ViPipe = 0;
ISP_DP_DYNAMIC_ATTR_S stAttr;
CVI_ISP_GetDPDynamicAttr(ViPipe, &stAttr);
stAttr.enOpType = OP_TYPE_AUTO;
CVI_ISP_SetDPDynamicAttr(ViPipe, &stAttr);
【相关主题】
9.2.2. CVI_ISP_GetDPDynamicAttr¶
【描述】
获取动态坏点校正属性
【语法】
CVI_S32 CVI_ISP_GetDPDynamicAttr(VI_PIPE ViPipe, ISP_DP_DYNAMIC_ATTR_S *pstDPDynamicAttr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
ViPipe |
VI_PIPE 号 |
输入 |
pstDPDynamicAttr |
动态坏点校正属性 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
非 0 |
失败,其值为 错误码。 |
【需求】
头文件: cvi_isp.h, cvi_comm_isp.h
库文件: libisp.so
【注意】
无
【举例】
无
【相关主题】
9.3. 数据类型¶
ISP_DP_DYNAMIC_MANUAL_ATTR_S : 定义手动动态坏点校正属性
ISP_DP_DYNAMIC_AUTO_ATTR_S : 定义自动动态坏点校正属性
ISP_DP_DYNAMIC_ATTR_S : 定义动态坏点校正属性
9.3.1. ISP_DP_DYNAMIC_MANUAL_ATTR_S¶
【说明】
定义手动动态坏点校正属性
【定义】
typedef struct _ISP_DP_DYNAMIC_MANUAL_ATTR_S {
CVI_U8 DefectCnt1; /*Rw; Range:[0, 16]*/
CVI_U8 DefectCnt2; /*Rw; Range:[0, 16]*/
CVI_U8 AdvMode; /*Rw; Range:[0, 1]*/
CVI_U8 AvgMode; /*Rw; Range:[0, 1]*/
} ISP_DP_DYNAMIC_MANUAL_ATTR_S;
【成员】
成员名称 |
描述 |
|---|---|
DefectCnt1 |
坏点判断逻辑的阈值1 取值范围: [0, 16] 数据类型: CVI_U8 |
DefectCnt2 |
坏点判断逻辑的阈值2 一般 DefectCnt2 需要小于 DefectCnt1 取值范围: [0, 16] 数据类型: CVI_U8 |
AdvMode |
第二方向性补偿使能。 0:关闭,补偿方式取决于AvgMode。 1:使能。 取值范围: [0, 1] 数据类型: CVI_U8 |
AvgMode |
坏点补偿模式。 0: 方向性补偿。 1: 无方向性补偿(平均补偿)。 取值范围: [0, 1] 数据类型: CVI_U8 |
【注意事项】
无
【相关数据类型及接口】
9.3.2. ISP_DP_DYNAMIC_AUTO_ATTR_S¶
【说明】
定义自动动态坏点校正属性
【定义】
typedef struct _ISP_DP_DYNAMIC_AUTO_ATTR_S {
CVI_U8 DefectCnt1[ISP_AUTO_ISO_STRENGTH_NUM]; /*Rw; Range:[0, 16]*/
CVI_U8 DefectCnt2[ISP_AUTO_ISO_STRENGTH_NUM]; /*Rw; Range:[0, 16]*/
CVI_U8 AdvMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*Rw; Range:[0, 1]*/
CVI_U8 AvgMode[ISP_AUTO_ISO_STRENGTH_NUM]; /*Rw; Range:[0, 1]*/
} ISP_DP_DYNAMIC_AUTO_ATTR_S;
【成员】
成员名称 |
描述 |
|---|---|
DefectCnt1 |
坏点判断逻辑的阈值1 取值范围: [0, 16] 数据类型: CVI_U8 |
DefectCnt2 |
坏点判断逻辑的阈值2 一般 DefectCnt2 需要小于 DefectCnt1 取值范围: [0, 16] 数据类型: CVI_U8 |
AdvMode |
第二方向性补偿使能。 0:关闭,补偿方式取决于AvgMode。 1:使能。 取值范围: [0, 1] 数据类型: CVI_U8 |
AvgMode |
坏点补偿模式。 0: 方向性补偿。 1: 无方向性补偿(平均补偿)。 取值范围: [0, 1] 数据类型: CVI_U8 |
【注意事项】
无
【相关数据类型及接口】
9.3.3. ISP_DP_DYNAMIC_ATTR_S¶
【说明】
定义动态坏点校正属性
【定义】
typedef struct _ISP_DP_DYNAMIC_ATTR_S {
CVI_BOOL Enable; /*Rw; Range:[0, 1]*/
ISP_OP_TYPE_E enOpType;
CVI_U8 UpdateInterval; /*Rw; Range:[0, 255]*/
CVI_U16 DarkDefectThresh[DP_THR_LUT_NUM]; /*Rw; Range:[0, 4095]*/
CVI_U16 BrightDefectThresh[DP_THR_LUT_NUM]; /*Rw; Range:[0, 4095]*/
CVI_U16 DarkDefectThreshOffset; /*Rw; Range:[0, 4095]*/
CVI_U16 BrightDefectThreshOffset; /*Rw; Range:[0, 4095]*/
CVI_U8 TransitionWeight; /*Rw; Range:[0, 255]*/
ISP_DP_DYNAMIC_MANUAL_ATTR_S stManual;
ISP_DP_DYNAMIC_AUTO_ATTR_S stAuto;
} ISP_DP_DYNAMIC_ATTR_S;
【成员】
成员名称 |
描述 |
|---|---|
Enable |
模块使能开关 取值范围: [0, 1] 数据类型: CVI_BOOL |
enOpType |
工作类型 OP_TYPE_AUTO:自动模式 OP_TYPE_MANUAL:手动模式 数据类型: ISP_OP_TYPE_E |
UpdateInterval |
影响参数更新间隔,值越大画面变化越慢,效能越好。 取值范围: [0, 255] 数据类型: CVI_U8 |
DarkDefectThresh |
根据luma查阈值1的Lut,针对暗坏点。 取值范围: [0, 4095] 数据类型: CVI_U16 |
BrightDefectThresh |
根据luma查阈值1的Lut,针对亮坏点。 取值范围: [0, 4095] 数据类型: CVI_U16 |
DarkDefectThreshOffset |
根据偏移量求得阈值2,针对暗坏点。 取值范围: [0, 4095] 数据类型: CVI_U16 |
BrightDefectThreshOffset |
根据偏移量求得阈值2,针对亮坏点。 取值范围: [0, 4095] 数据类型: CVI_U16 |
TransitionWeight |
当坏点判断条件处于过渡范围内时(不确定是不是坏点),这个权重决定是做dpc还是不做的比例。 取值范围: [0, 255] 数据类型: CVI_U8 |
stManual |
手动参数 |
stAuto |
自动参数 |
【注意事项】
无
【相关数据类型及接口】