客户端光标定设置界面:
光标定设置独立作为Recipe的一个步骤,由于预览图的像元比较大,直接在预览图上选标定点的话偏差较大,操作方式可以这样:
用户通过双击预览图上的某个位置(可在相机视口查看图形,控制面板微调),新增(更新)标定点在预览图上的位置,记录标定点的平台坐标位置及预览图上的坐标。
标定点的最大数量3个,是否要加用于符合灰度值的点的个数设置,个数就可以得到标定结果。
灰度值上下幅度范围
光标定设置前必须要做对准测试
光标定
方案一:
透反射同时调整光、core代码 SL、DB光标定的接口分别独立开来
1、透射光和反射光分别设置期望的最佳亮度
2、通过用户输入的起始透射光亮度和反射光能量值采集图像
3、在起始值附近采集图像,透射光和反射光分别N张(假设有N个光标定点)。
透射光和反射光采集一次定点后分别调用下面的接口:
int StormInspect::AutoLight(unsigned char* img_data, int width, int height, int lightEnergy, int src_idx,int bestlight )
{
//拷贝返回
VOS_Log(LL_INFO, "AutoLight:get light energy %d.", lightEnergy);
unsigned char * pstrip_dst = new unsigned char[width*height];
while (pstrip_dst == NULL)
{
Sleep(300);
VOS_Log(LL_ERROR, "pstrip_dst is null.");
}
memcpy(pstrip_dst, img_data, sizeof(unsigned char)*width*height);
light_s *light_inst = new light_s;
light_inst->img_width = width;
light_inst->img_height = height;
light_inst->lightEnergy = lightEnergy;
light_inst->src_idx = src_idx;
light_inst->img_data = pstrip_dst;
light_inst->best_light = bestlight;
light_char.insert(light_char.end(), (*light_inst));
return 0;
}
4、客户端调用,core线性插值计算一次最佳亮度
AutoLightReturn(int &bestenergy,int &itr_confirm)
5、根据第一次返回的透射光、反射光亮度调整光、采集图像后再次迭代计算。
6、设置最大迭代次数,如果收敛,则返回。如果不收敛,则返回迭代过程中的最佳值。
7、考虑到透射光和反射光的亮度相互影响,和光标定点位置不同亮度也可能这些影响,可以通过几次迭代先确定一个大致的范围,然后不使用线性插值,对大致范围小步长调整。
方案二:
透反射分别调整光