曝光强度和曝光时间
与传统相机不同,盛相相机使用曝光强度(Exposure Intensity)控制曝光的强弱,其特征是对于同一个材质,使用任意盛相相机型号,都可以用同一个曝光强度值拍摄,同时拍摄的2D图像或是3D图像是几乎一致的。这被称作曝光强度一致性。
因此,用户通常只需要关注被拍摄物体,而不需要考虑相机的更换;当使用任意盛相调整出一个合适的曝光强度值后,则无论是换了一台同型号的相机,或是不同型号的相机,都可以继续使用之前的曝光强度值,从而大大降低了更换的难度。
前提是未修改过相机的工厂设置。
部分特殊定制型号或系列可能不满足与其他系列或型号的曝光强度的一致性,但是仍然是与同系列相机和同型号相机保持曝光强度一致性。
曝光强度
盛相相机使用曝光强度(Exposure Intensity)控制曝光的强弱,其是一个0~100
的数值,对于不同材质,如白纸,氧化铝等,都对应一个合适的数值,如白纸,使用任意盛相相机用曝光强度=1拍摄,都会得到一致的,且最佳的2D图像和3D图像。
相机拍摄前,会经过特定的换算,把曝光强度转换为曝光时间,再按时间进行曝光,因此二者内在是关联的。
曝光时间
传统相机通常使用曝光时间来控制曝光的强弱,在保持其他条件不变,则曝光时间越长,拍摄的图像越亮/灰度值越大。
曝光时间是一个时间变量,通常使用ms或us为单位,其范围可以是0~,但在实际情况中,根据传感器不同,都通常会有一个上限值;且曝光时间越长,拍摄一张图像的时间也越长,这通常不是期望的。
在曝光时间一定的情况下,图像的亮度/灰度值还与传感器型号,镜头光圈大小,光源,传感器增益等诸多因素相关。
适用场景对比
适合用曝光强度的场景:
- 要求曝光强度一致性。
例如,当要求所有测量设备都有一致的曝光强弱,体现在图像上是几乎一致的2D图像灰度和一致的3D成像完整新/效果。
适合用曝光时间的场景:
- 不要求图像灰度一致性,但是要求时间值;
- 用时间作为测量的因子等。
例如,当为了抵抗灯光频闪,要求曝光时间是某个固定值(通常是灯光频闪时间的倍数);或是要求其必须小于某个值以减小残影等。
二者关系和换算
虽然相机保存和使用的设置是曝光强度,但是相机拍摄前,会经过换算,把曝光强度转换为曝光时间,再按时间进行曝光和拍照。因此修改了曝光强度,相机的拍摄时间也同样是变化了。
对于单个设备而言,曝光强度和曝光时间是一一对应的,曝光强度与曝光时间的换算公式是:
曝光时间 = 曝光强度 x ExpICoef x LedCoef x GainCoef x BinningCoef (微秒)
其中GainCoef与Gain(用户增益)相关:
其中BinningCoef与用户设置Binning(合并像素)相关:
所有各参数的定义如下:
参数 | 定义 |
---|---|
Gain | 用户增益,属于用户设置 |
Binning | 合并像素,属于用户设置 |
ExpICoef | 曝光强度系数,属于工厂设置 |
LedCoef | 投影功率系数,属于工厂设置;注意多投影设备,每个投影都有一个投影功率系数 |
GainCoef | 增益系数,计算如上述(1) |
BinningCoef | 合并像素系数,计算如上述(2) |
在需要考虑曝光强度和曝光时间换算时,建议关闭过曝抑制3
功能;此功能会引入更复杂的换算系数,不做具体解释。
软件使用
相机直接使用的曝光设置是曝光强度值。
从ContolCenter V2.41及以上版本增加了设置相机曝光时间的接口和工具,需要注意的是其只是一个辅助接口/工具,修改曝光时间,最终是转换为曝光强度再设置到相机。因此通过软件修改曝光时间,也会同时修改曝光强度的设置,二者是关联的。
曝光强度:通过相机
设置-曝光
界面。曝光时间:通过菜单栏
工具栏-设置曝光时间
:
API使用
- C++
- C#
class IMPSizectorS
{
public:
virtual bool SetExposureTime2D(float ExpoTime_ms) = 0;
virtual bool GetExposureTime2D(float* ExpoTime_ms) = 0;
virtual bool SetExposureTime3D_1st(float ExpoTime_ms) = 0;
virtual bool GetExposureTime3D_1st(float* ExpoTime_ms) = 0;
virtual bool SetExposureTime3D_2nd(float ExpoTime_ms) = 0;
virtual bool GetExposureTime3D_2nd(float* ExpoTime_ms) = 0;
virtual bool SetExposureTime3D_3rd(float ExpoTime_ms) = 0;
virtual bool GetExposureTime3D_3rd(float* ExpoTime_ms) = 0;
}
public class MPSizectorS
{
public float ExposureTime2D { get; set; }
public float ExposureTime3D_1st { get; set; }
public float ExposureTime3D_2nd { get; set; }
public float ExposureTime3D_3rd { get; set; }
}