20.闪光灯打闪和拍照不同步,拍照暗



1. 客户使用外挂GPIO或者I2C的flashlight IC通常会遇到:打闪拍照, 抓到的图片会很暗. 客户通常描述为:预闪与主闪不同步,或者打闪时序有问题.
 
2. 然后我司工程师会结合flashlight IC spec查看和修改leds_strobe.c以及flash_tuning_custom.cpp文档(想要了解具体操作,请登录MTKOnline-->Ecourse
专区-->标签"mt6589 flashlight"-->"mt6589 Flashlight Driver&Tuning 解析"视频).然后做实验,通过试验数据flash_nvdata.bin解析出engTab[]中的数据.

 
3. 更新过engTab[]以后,拍照就不会出现"不同步"问题, 那为什么会这样呢?这些值又是干嘛的?
 
 
[SOLUTION]
 
1. flash_tuning_custom_cct.cpp中有个值为:
 
   p->tuningPara[0/1/2/3].yTar=188;
 
   该值是使用flashlight以后AE收敛的Target(目标值).
 
2. 从上图可知duty=0(预闪),1(主闪)时候对应的闪光灯亮度值为:1171 8768.
  
   所以预闪和主闪亮度比为eng=8768/1171.
 
   假设预闪和主闪闪光时间内,场景对AE和flash的感光度分别为A和B.
 
3. 那么yTar=AE*(A+eng*B),从而可以推出:
  
    AE=yTar/(A+eng*B)
 
   所以AE的正确与否,直接受eng的影响.
  
  eng过大capture的图片就偏暗, eng过小capture的图片就过曝.
 
4. 所以客户使用外挂的flashlight,需要对engTab[]进行客制化
1. 客户使用外挂GPIO或者I2C的flashlight IC通常会遇到:打闪拍照, 抓到的图片会很暗. 客户通常描述为:预闪与主闪不同步,或者打闪时序有问题.
 
2. 然后我司工程师会结合flashlight IC spec查看和修改leds_strobe.c以及flash_tuning_custom.cpp文档(想要了解具体操作,请登录MTKOnline-->Ecourse
专区-->标签"mt6589 flashlight"-->"mt6589 Flashlight Driver&Tuning 解析"视频).然后做实验,通过试验数据flash_nvdata.bin解析出engTab[]中的数据.
 
3. 更新过engTab[]以后,拍照就不会出现"不同步"问题, 那为什么会这样呢?这些值又是干嘛的?
 
 
[SOLUTION]
 
1. flash_tuning_custom_cct.cpp中有个值为:
 
   p->tuningPara[0/1/2/3].yTar=188;
 
   该值是使用flashlight以后AE收敛的Target(目标值).
 
2. 从上图可知duty=0(预闪),1(主闪)时候对应的闪光灯亮度值为:1171 8768.
  
   所以预闪和主闪亮度比为eng=8768/1171.
 
   假设预闪和主闪闪光时间内,场景对AE和flash的感光度分别为A和B.
 
3. 那么yTar=AE*(A+eng*B),从而可以推出:
  
    AE=yTar/(A+eng*B)
 
   所以AE的正确与否,直接受eng的影响.
  
  eng过大capture的图片就偏暗, eng过小capture的图片就过曝.
 
4. 所以客户使用外挂的flashlight,需要对engTab[]进行客制化
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
def Grad_Cam(model, image, layer_name): # 获取模型提取全链接之前的特征图 new_model = nn.Sequential(*list(model.children())[:44]) print(new_model) new_model.eval() feature_maps = new_model(image) # 获取模型最后一层卷积层 target_layer = model._modules.get(layer_name) # 将模型最后一层卷积层的输出结果作为反向传播的梯度 gradient = torch.zeros(feature_maps.size()) # 返回一个形状与feature_maps相同全为标量 0 的张量 gradient[:, :, feature_maps.size()[2]//2, feature_maps.size()[3]//2] = 1 target_layer.zero_grad() # 将模型中参数的梯度置为0 feature_maps.backward(gradient=gradient) # 获取模型最后一层卷积层的输出结果和梯度 _, _, H, W = feature_maps.size() output_activations = feature_maps.detach().numpy()[0] gradients = target_layer.weight.grad.detach().numpy() # 计算特征图中每个像素点的权重 weights = np.mean(gradients, axis=(2, 3))[0] cam = np.zeros((H, W), dtype=np.float32) for i, w in enumerate(weights): cam += w * output_activations[i, :, :] # 对权重进行归一化处理 cam = np.maximum(cam, 0) cam = cv2.resize(cam, (1440, 1440)) cam = cam - np.min(cam) cam = cam / np.max(cam) # 将热力图叠加到原图上 heatmap = cv2.applyColorMap(np.uint8(255 * cam), cv2.COLORMAP_JET) heatmap = np.float32(heatmap) / 255 image = image.detach().numpy() image = np.transpose(image, (0, 2, 3, 1)) img_CCT = cv2.imread("F:/BaiduSyncdisk/python/svm_CCT/picture CCT_CP/2L5830N023_CCT.png") img_CP = cv2.imread("F:/BaiduSyncdisk/python/svm_CCT/picture CCT_CP/2L5830N023_CP.png") img_CCT = cv2.resize(img_CCT, (1440, 1440)) img_CP = cv2.resize(img_CP, (1440, 1440)) cam_img = heatmap + np.float32(img_CCT[0]) cam_img = cam_img / np.max(cam_img) return np.uint8(255 * cam_img) 上述代码不显示热力图,怎么解决
最新发布
05-26

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值