作者 ookk303

irc逻辑改动

@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #define MAJOR_VERSION 0x01 19 #define MAJOR_VERSION 0x01
20 #define MINOR_VERSION 0x03 20 #define MINOR_VERSION 0x03
21 #define MODIFY_VERSION 0x09 21 #define MODIFY_VERSION 0x09
22 -#define DEBUG_VERSION 0x05 22 +#define DEBUG_VERSION 0x06
23 23
24 //禁止修改行 滤波方式 24 //禁止修改行 滤波方式
25 #define FILTERING_TYPE HIGH_PASS_FILTERING 25 #define FILTERING_TYPE HIGH_PASS_FILTERING
@@ -117,10 +117,19 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len @@ -117,10 +117,19 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
117 //红外数据纠正处理 117 //红外数据纠正处理
118 JZC1_Irc_DataCorrect(data); 118 JZC1_Irc_DataCorrect(data);
119 119
  120 + //将 8位的raw数据 合并为16位数据
  121 + U16_t * u16Data = (U16_t *)malloc(sizeof(U16_t) * (data_len / 2));
  122 + int u16DataSize = data_len / 2;
  123 +
  124 + //合成像素,u8转换合并成u16
  125 + JZsdk_Merge_U8_to_U16_byReverse(data, data_len, u16Data, &u16DataSize);
  126 +
120 //将灰度图数据转换为原始码流数据 127 //将灰度图数据转换为原始码流数据
121 unsigned char *raw_data = NULL; 128 unsigned char *raw_data = NULL;
122 int raw_data_len = 0; 129 int raw_data_len = 0;
123 - IRC_FrameDeal(data, data_len, &raw_data, &raw_data_len); 130 +
  131 + //将原始码流数据转换为rgb数据
  132 + IRC_FrameDeal(u16Data, u16DataSize, &raw_data, &raw_data_len);
124 133
125 //将原始码流数据写入到编码器 并转换为h264 134 //将原始码流数据写入到编码器 并转换为h264
126 unsigned char *h264Data = NULL; 135 unsigned char *h264Data = NULL;
@@ -150,6 +159,12 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len @@ -150,6 +159,12 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
150 raw_data = NULL; 159 raw_data = NULL;
151 } 160 }
152 161
  162 + if (u16Data != NULL)
  163 + {
  164 + free(u16Data);
  165 + u16Data = NULL;
  166 + }
  167 +
153 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 168 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
154 } 169 }
155 170
@@ -373,12 +388,12 @@ static T_JZsdkReturnCode JZC1_MediaInit() @@ -373,12 +388,12 @@ static T_JZsdkReturnCode JZC1_MediaInit()
373 //设置快门为开 388 //设置快门为开
374 JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON); 389 JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON);
375 390
376 - //设置伪彩颜色 391 + //设置伪彩颜色为hot
377 int value = 8; 392 int value = 8;
378 Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value); 393 Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value);
379 394
380 - //设置伪彩模式  
381 - value = 1; 395 + //设置为默认输出模式
  396 + value = 0;
382 Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); 397 Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
383 398
384 #endif 399 #endif
@@ -57,10 +57,12 @@ typedef struct IRC_param @@ -57,10 +57,12 @@ typedef struct IRC_param
57 //单点校正(Single-Point Correction -> SPC) 57 //单点校正(Single-Point Correction -> SPC)
58 double *SPC_Diff; // spc截距数组 即计算得到的增益 58 double *SPC_Diff; // spc截距数组 即计算得到的增益
59 double *SPC_Slope; // spc斜率数组 即计算得到的补正 59 double *SPC_Slope; // spc斜率数组 即计算得到的补正
60 - U16_t *SPC_Mark_Data; 60 +
61 unsigned int FirstSPC_flag; //第一次使用spc的标志位 61 unsigned int FirstSPC_flag; //第一次使用spc的标志位
62 unsigned int SPC_ResetFlag; //spc校准标志位 开启时进行spc校准 62 unsigned int SPC_ResetFlag; //spc校准标志位 开启时进行spc校准
63 63
  64 + U16_t *SPC_Mark_Data; //spc标定帧灰度
  65 +
64 unsigned int SPC_mode; //spc模式 0低温画面打档 1手动打档 2定时打档 66 unsigned int SPC_mode; //spc模式 0低温画面打档 1手动打档 2定时打档
65 unsigned int SPC_LastMode; //上一次spc模式 67 unsigned int SPC_LastMode; //上一次spc模式
66 68
@@ -78,6 +80,12 @@ typedef struct IRC_param @@ -78,6 +80,12 @@ typedef struct IRC_param
78 unsigned int FrameCorrectMode; //画面纠正模式 0 无纠正 1 单点纠正 2 两点纠正 80 unsigned int FrameCorrectMode; //画面纠正模式 0 无纠正 1 单点纠正 2 两点纠正
79 81
80 // 高低温标定 82 // 高低温标定
  83 + U16_t *Factory_HighT_Mark_Data; //出厂的高温标定帧灰度
  84 + unsigned int Factory_HighT_Mark_Data_flag; //出厂的高温标定帧灰度标志位
  85 +
  86 + U16_t *Factory_LowT_Mark_Data; //出厂的低温标定帧灰度
  87 + unsigned int Factory_LowT_Mark_Data_flag; //出厂的高温标定帧灰度标志位
  88 +
81 U16_t *HighT_NineFrameAdd; //高温温度判定时的9帧综合数组 89 U16_t *HighT_NineFrameAdd; //高温温度判定时的9帧综合数组
82 U16_t *HighT_NineFrame_Avg; //高温温度判定时的9帧综合数组平均值 90 U16_t *HighT_NineFrame_Avg; //高温温度判定时的9帧综合数组平均值
83 unsigned int HighT_flag; //高温判定标志 0~9 0关闭,1~9 为计数 91 unsigned int HighT_flag; //高温判定标志 0~9 0关闭,1~9 为计数
@@ -727,12 +727,12 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo) @@ -727,12 +727,12 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo)
727 switch (flag) 727 switch (flag)
728 { 728 {
729 case HIGH_SD_TEMP: 729 case HIGH_SD_TEMP:
730 - memcpy(dealInfo->HighT_NineFrame_Avg, numbers, count * sizeof(U16_t)); 730 + memcpy(dealInfo->Factory_HighT_Mark_Data, numbers, count * sizeof(U16_t));
731 JZSDK_LOG_DEBUG("读取高SD温度数据"); 731 JZSDK_LOG_DEBUG("读取高SD温度数据");
732 break; 732 break;
733 733
734 case LOW_SD_TEMP: 734 case LOW_SD_TEMP:
735 - memcpy(dealInfo->LowT_NineFrame_Avg, numbers, count * sizeof(U16_t)); 735 + memcpy(dealInfo->Factory_LowT_Mark_Data, numbers, count * sizeof(U16_t));
736 JZSDK_LOG_DEBUG("读取低SD温度数据"); 736 JZSDK_LOG_DEBUG("读取低SD温度数据");
737 break; 737 break;
738 738
@@ -44,86 +44,66 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate) @@ -44,86 +44,66 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate)
44 return ret; 44 return ret;
45 } 45 }
46 46
47 -/*  
48 -  
49 -功能:IRC数据预处理  
50 -参数:U8_t *rawData, int dataSize, U16_t **returnData, unsigned int *returnDataSize, struct IRC_param *dealInfo  
51 -返回值:T_JZsdkReturnCode  
52 -备注:  
53 -  
54 -*/  
55 -static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, U16_t *returnData, unsigned int *returnDataSize, struct IRC_param *dealInfo) 47 +static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int *rawSize, struct IRC_param *dealInfo)
56 { 48 {
57 T_JZsdkReturnCode ret; 49 T_JZsdkReturnCode ret;
58 50
59 //无图像 51 //无图像
60 if (rawData == NULL || dealInfo == NULL) 52 if (rawData == NULL || dealInfo == NULL)
61 { 53 {
  54 + JZSDK_LOG_ERROR("irc数据预处理失败,参数错误");
62 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 55 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
63 } 56 }
64 57
65 - //合成像素,u8转换合并成u16  
66 - ret = JZsdk_Merge_U8_to_U16_byReverse(rawData, dataSize, returnData, returnDataSize);  
67 - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || *returnDataSize != dealInfo->PixelNum)  
68 - {  
69 - JZSDK_LOG_ERROR("像素合成失败, ret:0x%x dataSize:%d returnDataSize:%d PixelNum:%d", ret, dataSize,*returnDataSize, dealInfo->PixelNum);  
70 - return ret;  
71 - }  
72 -  
73 //数据检查 58 //数据检查
74 - for (int i = 0; i < *returnDataSize; i++) 59 + for (int i = 0; i < *rawSize; i++)
75 { 60 {
76 - if (returnData[i] > dealInfo->ExpectedMax) 61 + if (rawData[i] > dealInfo->ExpectedMax)
77 { 62 {
78 - returnData[i] = dealInfo->ExpectedMax; 63 + rawData[i] = dealInfo->ExpectedMax;
79 } 64 }
80 } 65 }
81 66
82 -/*  
83 - 手动盲点纠正部分  
84 - 手动盲点纠正默认打开  
85 -*/ 67 +/*************************************手动盲点部分******************************************************************/
  68 +
  69 + //手动盲点处理
86 if (dealInfo->BlindNum > 0) 70 if (dealInfo->BlindNum > 0)
87 { 71 {
88 - JZsdk_CutBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->Blind, dealInfo->BlindNum,dealInfo->BadPixelExtern, 1); 72 + JZsdk_CutBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->Blind, dealInfo->BlindNum,dealInfo->BadPixelExtern, 1);
89 } 73 }
90 74
91 -/*  
92 - 自动盲点纠正部分  
93 -*/ 75 +/*************************************自动盲点部分******************************************************************/
94 //如果自动盲点纠正已打开 76 //如果自动盲点纠正已打开
95 if (dealInfo->AutoBadPixelReset == JZ_FLAGCODE_ON) 77 if (dealInfo->AutoBadPixelReset == JZ_FLAGCODE_ON)
96 { 78 {
97 - JZsdk_RawCheckisBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, &dealInfo->BadPixelNum); 79 + //检查自动盲点的位置
  80 + JZsdk_RawCheckisBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, &dealInfo->BadPixelNum);
  81 +
  82 + //关闭自动盲点校正
98 dealInfo->AutoBadPixelReset = JZ_FLAGCODE_OFF; 83 dealInfo->AutoBadPixelReset = JZ_FLAGCODE_OFF;
99 } 84 }
100 85
101 - //盲元纠正 86 + //如果自动盲点校正已打开
102 if (dealInfo->AutoBadPixel_flag == JZ_FLAGCODE_ON) 87 if (dealInfo->AutoBadPixel_flag == JZ_FLAGCODE_ON)
103 { 88 {
104 - JZsdk_CutBadPixel_U16(returnData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1); 89 + //对数据进行自动盲点校正
  90 + JZsdk_CutBadPixel_U16(rawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1);
105 } 91 }
106 92
107 -  
108 - /*  
109 - 两点纠正部分  
110 - */  
111 - //如果开启了低温循环标定 93 +/*************************************两点纠正部分******************************************************************/
  94 + //如果开启了低温循环标定,计算低温循环数据
112 if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF) 95 if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF)
113 { 96 {
114 - IRC_LowT_CycleCalibration(returnData, dealInfo); 97 + IRC_LowT_CycleCalibration(rawData, dealInfo);
115 } 98 }
116 -  
117 - //如果开启了高温循环标定 99 +
  100 + //如果开启了高温循环标定,计算高温循环数据
118 if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF) 101 if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF)
119 { 102 {
120 - IRC_HighT_CycleCalibration(returnData, dealInfo); 103 + IRC_HighT_CycleCalibration(rawData, dealInfo);
121 } 104 }
122 -  
123 - /*  
124 - 单点纠正部分  
125 - */  
126 105
  106 +/*************************************单点纠正部分******************************************************************/
127 //单点校正spc如果未进行过数据的标定,则进行一次 107 //单点校正spc如果未进行过数据的标定,则进行一次
128 if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_OFF) 108 if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_OFF)
129 { 109 {
@@ -155,7 +135,7 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, @@ -155,7 +135,7 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
155 { 135 {
156 JZSDK_LOG_INFO("SPC重置标定"); 136 JZSDK_LOG_INFO("SPC重置标定");
157 137
158 - memcpy(dealInfo->SPC_Mark_Data, returnData, dealInfo->PixelNum * sizeof(U16_t)); 138 + memcpy(dealInfo->SPC_Mark_Data, rawData, dealInfo->PixelNum * sizeof(U16_t));
159 139
160 //保存spc标定点 140 //保存spc标定点
161 IRC_LocalFrame_DataWrite(SPC_MARK_DATA, dealInfo, (U16_t *)dealInfo->SPC_Mark_Data, dealInfo->PixelNum); 141 IRC_LocalFrame_DataWrite(SPC_MARK_DATA, dealInfo, (U16_t *)dealInfo->SPC_Mark_Data, dealInfo->PixelNum);
@@ -163,25 +143,8 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, @@ -163,25 +143,8 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
163 dealInfo->SPC_ResetFlag = JZ_FLAGCODE_OFF; 143 dealInfo->SPC_ResetFlag = JZ_FLAGCODE_OFF;
164 } 144 }
165 145
166 - //备注:这部分使用我们自己的库才要这样做  
167 - //如果开启了spc单点校正  
168 - if(dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC && dealInfo->DealWay == IRC_DEALMODE_JZSDK)  
169 - {  
170 - //计算spc参数(后续要改成只计算一次,总不能每帧都计算吧)  
171 - if (dealInfo->SPC_mode == 0 && dealInfo->LowT_NineFrame_Avg != NULL)  
172 - {  
173 - IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);  
174 - }  
175 - else  
176 - {  
177 - IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);  
178 - }  
179 - } 146 +/*************************************气体增强部分,标记气体增图像图像******************************************************************/
180 147
181 -/*  
182 - 气体增强部分  
183 - 标记气体增图像图像  
184 - */  
185 //如果开启气体增强时,未标记过气体画面,则标记 148 //如果开启气体增强时,未标记过气体画面,则标记
186 if (dealInfo->OutputPixelColorMode == 2 && dealInfo->First_DGCE_flag == JZ_FLAGCODE_OFF) 149 if (dealInfo->OutputPixelColorMode == 2 && dealInfo->First_DGCE_flag == JZ_FLAGCODE_OFF)
187 { 150 {
@@ -194,14 +157,13 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, @@ -194,14 +157,13 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize,
194 if (dealInfo->DGCE_ResetFlag == JZ_FLAGCODE_ON) 157 if (dealInfo->DGCE_ResetFlag == JZ_FLAGCODE_ON)
195 { 158 {
196 JZSDK_LOG_INFO("气体增强重置标定"); 159 JZSDK_LOG_INFO("气体增强重置标定");
197 - memcpy(dealInfo->DGCE_Mark_Data, returnData, dealInfo->PixelNum * sizeof(U16_t)); 160 + memcpy(dealInfo->DGCE_Mark_Data, rawData, dealInfo->PixelNum * sizeof(U16_t));
198 dealInfo->DGCE_ResetFlag = JZ_FLAGCODE_OFF; 161 dealInfo->DGCE_ResetFlag = JZ_FLAGCODE_OFF;
199 } 162 }
200 163
201 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 164 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
202 } 165 }
203 166
204 -  
205 unsigned int Get_2DImage_PointToArray(int x, int y, int width, int height) 167 unsigned int Get_2DImage_PointToArray(int x, int y, int width, int height)
206 { 168 {
207 return (x + y*width); 169 return (x + y*width);
@@ -398,35 +360,33 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param @@ -398,35 +360,33 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param
398 } 360 }
399 361
400 362
401 -/*  
402 363
403 -功能:IRC 帧处理  
404 -参数:  
405 -返回值:T_JZsdkReturnCode  
406 -备注: 364 +/****************************
407 365
408 -*/  
409 -T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize)  
410 -{  
411 - //1、数据预处理(将红外相机的8位数据,合成为16位数据,移除盲点,并记录标定点)  
412 - U16_t *U16_data = (U16_t *)malloc(dataSize/2 * sizeof(U16_t));  
413 - unsigned int U16_dataSize = 0;  
414 - IRC_data_PreliminaryDeal(rawData , dataSize, U16_data, &U16_dataSize, g_IRC_Param); 366 + 功能:IRC 帧处理
  367 + 参数:
  368 + 返回值:T_JZsdkReturnCode
  369 + 备注:
415 370
416 - //printf("预处理完成\n"); 371 + * *************/
  372 +T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize)
  373 +{
  374 + //1、数据预处理(移除数据的盲点,并记录标定数据)
  375 + IRC_data_PreliminaryDeal(rawData , &dataSize, g_IRC_Param);
417 376
418 //2、数据前处理,将原始数据和16位数据 合成为rgb数据 377 //2、数据前处理,将原始数据和16位数据 合成为rgb数据
419 U8_t *RGB_data = NULL; 378 U8_t *RGB_data = NULL;
420 unsigned int RGB_dataSize = 0; 379 unsigned int RGB_dataSize = 0;
421 380
  381 + //选择前处理的方式
422 switch (g_IRC_Param->DealWay) 382 switch (g_IRC_Param->DealWay)
423 { 383 {
424 case IRC_DEALMODE_KTLIB: 384 case IRC_DEALMODE_KTLIB:
425 - KtLib_DataDeal(U16_data, U16_dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param); 385 + KtLib_DataDeal(rawData, dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
426 break; 386 break;
427 387
428 case IRC_DEALMODE_JZSDK: 388 case IRC_DEALMODE_JZSDK:
429 - JZIrcLib_DataDeal(U16_data, U16_dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param); 389 + JZIrcLib_DataDeal(rawData, dataSize, &RGB_data, &RGB_dataSize,g_IRC_Param);
430 break; 390 break;
431 391
432 default: 392 default:
@@ -434,8 +394,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u @@ -434,8 +394,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
434 break; 394 break;
435 } 395 }
436 396
437 - //printf("前处理完成\n");  
438 -  
439 //3、数据后处理,在rgb数据上,进行图像处理 397 //3、数据后处理,在rgb数据上,进行图像处理
440 IRC_Postdeal(RGB_data, g_IRC_Param); 398 IRC_Postdeal(RGB_data, g_IRC_Param);
441 399
@@ -458,7 +416,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u @@ -458,7 +416,6 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
458 } 416 }
459 417
460 //printf("输出yuv\n"); 418 //printf("输出yuv\n");
461 -  
462 } 419 }
463 420
464 /***************** 421 /*****************
@@ -467,18 +424,12 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u @@ -467,18 +424,12 @@ T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, u
467 * 如果码流类型要求为rgb888 424 * 如果码流类型要求为rgb888
468 * 425 *
469 * **********************/ 426 * **********************/
470 - if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_RGB888) 427 + else if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_RGB888)
471 { 428 {
472 *outData = RGB_data; 429 *outData = RGB_data;
473 *outDataSize = g_IRC_Param->Width*g_IRC_Param->Height*3; 430 *outDataSize = g_IRC_Param->Width*g_IRC_Param->Height*3;
474 } 431 }
475 432
476 - //5、数据释放  
477 - if (U16_data != NULL)  
478 - {  
479 - JZsdk_Free((void *)U16_data);  
480 - }  
481 -  
482 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 433 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
483 } 434 }
484 435
@@ -980,7 +931,7 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo) @@ -980,7 +931,7 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo)
980 if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 931 if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
981 { 932 {
982 JZSDK_LOG_INFO("外置高温数据录入成功"); 933 JZSDK_LOG_INFO("外置高温数据录入成功");
983 - return ret; 934 + dealInfo->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_ON;
984 } 935 }
985 936
986 //失败了录入 本地数据 937 //失败了录入 本地数据
@@ -989,11 +940,11 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo) @@ -989,11 +940,11 @@ static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo)
989 { 940 {
990 JZSDK_LOG_ERROR("没有本地高温数据数据,打开录入标志"); 941 JZSDK_LOG_ERROR("没有本地高温数据数据,打开录入标志");
991 dealInfo->HighT_flag = JZ_FLAGCODE_ON; //打开录入标志 942 dealInfo->HighT_flag = JZ_FLAGCODE_ON; //打开录入标志
992 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;  
993 } 943 }
994 -  
995 - JZSDK_LOG_INFO("本地高温数据录入成功");  
996 - 944 + else
  945 + {
  946 + JZSDK_LOG_INFO("本地高温数据录入成功");
  947 + }
997 948
998 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 949 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
999 } 950 }
@@ -1010,7 +961,7 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo) @@ -1010,7 +961,7 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo)
1010 if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 961 if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
1011 { 962 {
1012 JZSDK_LOG_INFO("外置低温数据录入成功"); 963 JZSDK_LOG_INFO("外置低温数据录入成功");
1013 - return ret; 964 + dealInfo->Factory_LowT_Mark_Data_flag = JZ_FLAGCODE_ON;
1014 } 965 }
1015 966
1016 //失败了录入 本地数据 967 //失败了录入 本地数据
@@ -1020,8 +971,10 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo) @@ -1020,8 +971,10 @@ static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo)
1020 JZSDK_LOG_ERROR("没有本地低温数据数据,打开录入标志"); 971 JZSDK_LOG_ERROR("没有本地低温数据数据,打开录入标志");
1021 dealInfo->LowT_flag = JZ_FLAGCODE_ON; //打开录入标志 972 dealInfo->LowT_flag = JZ_FLAGCODE_ON; //打开录入标志
1022 } 973 }
1023 -  
1024 - JZSDK_LOG_INFO("本地低温数据录入成功"); 974 + else
  975 + {
  976 + JZSDK_LOG_INFO("本地低温数据录入成功");
  977 + }
1025 978
1026 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 979 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
1027 } 980 }
@@ -1155,20 +1108,33 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in @@ -1155,20 +1108,33 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in
1155 JZSDK_LOG_ERROR("SPC_Mark_Data注册失败"); 1108 JZSDK_LOG_ERROR("SPC_Mark_Data注册失败");
1156 } 1109 }
1157 1110
1158 - //填入本地高温数据  
1159 - ret = IRC_Set_HighTempData(IrcDealCfg);  
1160 - if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 1111 + IrcDealCfg->Factory_HighT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t));
  1112 + if (IrcDealCfg->Factory_HighT_Mark_Data == NULL)
1161 { 1113 {
1162 - JZSDK_LOG_INFO("本地高温数据 0:%d 1:%d 2:%d", IrcDealCfg->HighT_NineFrame_Avg[2550], IrcDealCfg->HighT_NineFrame_Avg[2551], IrcDealCfg->HighT_NineFrame_Avg[2552]); 1114 + JZSDK_LOG_ERROR("Factory_HighT_Mark_Data注册失败");
1163 } 1115 }
1164 - 1116 + IrcDealCfg->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_OFF;
1165 1117
1166 - //填入低温数据  
1167 - ret = IRC_Set_LowTempData(IrcDealCfg);  
1168 - if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 1118 + IrcDealCfg->Factory_LowT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t));
  1119 + if (IrcDealCfg->Factory_LowT_Mark_Data == NULL)
1169 { 1120 {
1170 - JZSDK_LOG_INFO("本地低温数据 0:%d 1:%d 2:%d", IrcDealCfg->LowT_NineFrame_Avg[2550], IrcDealCfg->LowT_NineFrame_Avg[2551], IrcDealCfg->LowT_NineFrame_Avg[2552]); 1121 + JZSDK_LOG_ERROR("Factory_LowT_Mark_Data注册失败");
1171 } 1122 }
  1123 + IrcDealCfg->Factory_LowT_Mark_Data_flag = JZ_FLAGCODE_OFF;
  1124 +
  1125 +/*******************************************************************************************
  1126 + *
  1127 + * 加载文件数据
  1128 + *
  1129 + *
  1130 +**********************************************************************************************/
  1131 +
  1132 +
  1133 + //填入高温数据
  1134 + IRC_Set_HighTempData(IrcDealCfg);
  1135 +
  1136 + //填入低温数据
  1137 + IRC_Set_LowTempData(IrcDealCfg);
1172 1138
1173 //获取markdata的本地数据 1139 //获取markdata的本地数据
1174 ret = IRC_LocalFrame_DataRead(SPC_MARK_DATA, IrcDealCfg); 1140 ret = IRC_LocalFrame_DataRead(SPC_MARK_DATA, IrcDealCfg);
@@ -27,7 +27,7 @@ extern "C" { @@ -27,7 +27,7 @@ extern "C" {
27 /* Exported functions --------------------------------------------------------*/ 27 /* Exported functions --------------------------------------------------------*/
28 28
29 T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate); 29 T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate);
30 -T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize); 30 +T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize);
31 31
32 T_JZsdkReturnCode IRC_SetRawPixel_ResetFlag(); 32 T_JZsdkReturnCode IRC_SetRawPixel_ResetFlag();
33 T_JZsdkReturnCode IRC_SetGrayPixel_ResetFlag(); 33 T_JZsdkReturnCode IRC_SetGrayPixel_ResetFlag();
@@ -501,9 +501,43 @@ static T_JZsdkReturnCode JZIrcLib_SPC(U16_t *ImageData,struct IRC_param *dealInf @@ -501,9 +501,43 @@ static T_JZsdkReturnCode JZIrcLib_SPC(U16_t *ImageData,struct IRC_param *dealInf
501 } 501 }
502 } 502 }
503 503
  504 + //JZSDK_LOG_INFO("单点校正");
  505 +
504 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 506 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
505 } 507 }
506 508
  509 +/*******************
  510 + *
  511 + * 单点校正斜率计算
  512 + *
  513 + *
  514 + * *******************/
  515 +static T_JZsdkReturnCode JZIrcLib_SPC_Slope_Calculation(struct IRC_param *dealInfo)
  516 +{
  517 + if (dealInfo->SPC_mode == 0)
  518 + {
  519 + //采用出厂模式的斜率
  520 + if (dealInfo->TPC_mode == 0 && dealInfo->Factory_LowT_Mark_Data != NULL)
  521 + {
  522 + IRC_SPC_ParamCorrect(dealInfo, dealInfo->Factory_LowT_Mark_Data);
  523 + }
  524 + //采用手动模式的斜率
  525 + else if (dealInfo->TPC_mode == 1 && dealInfo->LowT_NineFrame_Avg != NULL)
  526 + {
  527 + IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);
  528 + }
  529 + //都不满足的情况下,采用默认的斜率
  530 + else
  531 + {
  532 + IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);
  533 + }
  534 + }
  535 + //都不满足的情况下,采用默认的斜率
  536 + else
  537 + {
  538 + IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data);
  539 + }
  540 +}
507 541
508 /****** 542 /******
509 * 543 *
@@ -519,6 +553,39 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo) @@ -519,6 +553,39 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
519 return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; 553 return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
520 } 554 }
521 555
  556 + // 应用两点校正公式
  557 + for (int i = 0; i < dealInfo->PixelNum; i++)
  558 + {
  559 + ImageData[i] = (int)(dealInfo->TPC_Slope[i] * ImageData[i] + dealInfo->TPC_Diff[i]);
  560 + if (ImageData[i] < 0)
  561 + {
  562 + ImageData[i] = 0;
  563 + }
  564 + else if (ImageData[i] > dealInfo->ExpectedMax)
  565 + {
  566 + ImageData[i] = dealInfo->ExpectedMax;
  567 + }
  568 + }
  569 +
  570 + //JZSDK_LOG_INFO("两点校正");
  571 +
  572 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回校正后的灰度数组
  573 +}
  574 +
  575 +/*******************
  576 + *
  577 + * 两点校正斜率计算
  578 + *
  579 + *
  580 + * *******************/
  581 +static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealInfo)
  582 +{
  583 + //无图像
  584 + if (dealInfo == NULL)
  585 + {
  586 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  587 + }
  588 +
522 // 如果tpc的斜率和tpc的截距都为0,重新计算斜率与斜距 589 // 如果tpc的斜率和tpc的截距都为0,重新计算斜率与斜距
523 int allZeroSlope_flag = 1, allZeroDiff_flag = 1; 590 int allZeroSlope_flag = 1, allZeroDiff_flag = 1;
524 for (int i = 0; i < dealInfo->PixelNum; i++) 591 for (int i = 0; i < dealInfo->PixelNum; i++)
@@ -527,7 +594,9 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo) @@ -527,7 +594,9 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
527 { 594 {
528 allZeroSlope_flag = 0; 595 allZeroSlope_flag = 0;
529 } 596 }
530 - if (dealInfo->TPC_Diff[i] != 0) { 597 +
  598 + if (dealInfo->TPC_Diff[i] != 0)
  599 + {
531 allZeroDiff_flag = 0; 600 allZeroDiff_flag = 0;
532 } 601 }
533 } 602 }
@@ -559,26 +628,8 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo) @@ -559,26 +628,8 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo)
559 dealInfo->TPC_Diff[i] = AvgSingleFrame_LowT - dealInfo->TPC_Slope[i] * dealInfo->LowT_NineFrame_Avg[i]; 628 dealInfo->TPC_Diff[i] = AvgSingleFrame_LowT - dealInfo->TPC_Slope[i] * dealInfo->LowT_NineFrame_Avg[i];
560 } 629 }
561 } 630 }
562 -  
563 - // 应用两点校正公式  
564 - for (int i = 0; i < dealInfo->PixelNum; i++)  
565 - {  
566 - ImageData[i] = (int)(dealInfo->TPC_Slope[i] * ImageData[i] + dealInfo->TPC_Diff[i]);  
567 - if (ImageData[i] < 0)  
568 - {  
569 - ImageData[i] = 0;  
570 - }  
571 - else if (ImageData[i] > dealInfo->ExpectedMax)  
572 - {  
573 - ImageData[i] = dealInfo->ExpectedMax;  
574 - }  
575 - }  
576 -  
577 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回校正后的灰度数组  
578 } 631 }
579 632
580 -  
581 -  
582 /*计算直方图均衡化并转换为8位灰度值 633 /*计算直方图均衡化并转换为8位灰度值
583 U16_t in_str 输入的数据 634 U16_t in_str 输入的数据
584 int in_str_len 输入的数据长度 635 int in_str_len 输入的数据长度
@@ -780,19 +831,36 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, @@ -780,19 +831,36 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize,
780 //如果打开了单点纠正模式 831 //如果打开了单点纠正模式
781 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC) 832 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC)
782 { 833 {
783 - JZIrcLib_SPC(u16_CorrentData, dealInfo); 834 + //计算单点校正的斜率
  835 + JZIrcLib_SPC_Slope_Calculation(dealInfo);
  836 +
  837 + //通过斜率进行单点校正
  838 + ret = JZIrcLib_SPC(u16_CorrentData, dealInfo);
  839 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  840 + {
  841 + JZSDK_LOG_ERROR("两点校正失败");
  842 + }
784 } 843 }
785 844
786 // 如果打开了两点校正 845 // 如果打开了两点校正
787 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC) 846 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC)
788 { 847 {
789 - JZIrcLib_TPC(u16_CorrentData, dealInfo); 848 + //计算两点校正的斜率
  849 + JZIrcLib_TPC_Slope_Calculation(dealInfo);
  850 +
  851 + //对数据进行两点校正
  852 + ret = JZIrcLib_TPC(u16_CorrentData, dealInfo);
  853 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  854 + {
  855 + JZSDK_LOG_ERROR("两点校正失败");
  856 + }
  857 +
790 } 858 }
791 859
792 U8_t *GrayImage = NULL; 860 U8_t *GrayImage = NULL;
793 int GrayImageLen = 0; 861 int GrayImageLen = 0;
794 862
795 - //直方图 863 + //直方图均衡化
796 JZIrcLib_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); 864 JZIrcLib_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo);
797 865
798 //图像输出模式 866 //图像输出模式
@@ -26,12 +26,12 @@ extern "C" { @@ -26,12 +26,12 @@ extern "C" {
26 26
27 typedef enum CameraParam 27 typedef enum CameraParam
28 { 28 {
29 - CAMERA_PSEUDO_COLOR = 0x000001,  
30 - CAMERA_PIXEL_PSEUDO_COLOR_MODE = 0x000002,  
31 - CAMERA_REGION_BOX = 0x000003,  
32 - CAMERA_CORRCTION_MODE = 0x000004,  
33 - CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005,  
34 - CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006, 29 + CAMERA_PSEUDO_COLOR = 0x000001, //伪彩色
  30 + CAMERA_PIXEL_PSEUDO_COLOR_MODE = 0x000002, //像素输出模式
  31 + CAMERA_REGION_BOX = 0x000003, //区域框
  32 + CAMERA_CORRCTION_MODE = 0x000004, //纠正模式
  33 + CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005, //气体增强颜色
  34 + CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006, //气体增强纠正
35 35
36 }CameraParam; 36 }CameraParam;
37 37
@@ -191,7 +191,7 @@ int32_t s_widgetValueList[] = {VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST, //视频 @@ -191,7 +191,7 @@ int32_t s_widgetValueList[] = {VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST, //视频
191 OFF, //测温模式 191 OFF, //测温模式
192 ON, //光圈开关 192 ON, //光圈开关
193 OFF, //冻结开关 193 OFF, //冻结开关
194 - 1, //色彩输出模式 194 + 0, //色彩输出模式
195 OFF, //画面放大 195 OFF, //画面放大
196 OFF, //打档 196 OFF, //打档
197 8, //伪彩颜色 197 8, //伪彩颜色