该接口提供平场标定和校正等功能。
平场校正用于补偿相机和镜头组合的成像不均匀性,如:
- 视场中不均匀的照明强度
- 相机传感器上像元之间的感光度差异
- 镜头阴影,这是镜头渐晕的一种常见形式,其中光线衰减可能是不对称的,并且可能会出现色偏
平场标定的通常方法是使用一个能够覆盖整个视场的标准物,通常为一张标准灰卡或白卡。平场图像通过以下方式采集:
- 将标准物放置在相机视野中,并覆盖整个视野
- 调整镜头光圈和照明强度,在不过曝的前提下获得尽可能亮的图像
- 采集多张图像,使用 多帧融合 工具将其合并为一张降噪后的图像,并传递给 LFlatField 对象进行 训练
另一种可行的方法是使用实际用于检测的被测物体作为标准物。这种方法的优点在于,可以采集到被测物材质表面的真实光照反射情况,使得校正更适用于被测物体。 这种方法的平场图像通过以下方式采集:
- 调整镜头光圈和照明强度,在不过曝和检测目标显著的前提下获得尽可能亮的图像
- 设定 LFlatField 对象的原始和目标颜色或灰度值,以提取前景像素。也可以借助其他定位工具,检测目标位置再生成前景像素的区域或蒙版。
- 在多个不同位置采集被测物体的图像,使之覆盖整个视野。将这些图像(及该位置的前景区域或蒙版)传递给 LFlatField 对象进行 训练
使用这个接口,需要创建一个 LFlatField 对象。
示例代码
C++
Code snippets: snippets/FlatFieldWhiteBoard.cpp, snippets/FlatFieldSolar.cpp
ILFlatFieldPtr ffc = LFlatField::Create();
ffc->ColorMode = LPVImageFormat::LPVImageFormatGrayscale8;
ffc->ToGray = 160;
ffc->Tolerance = 0;
if (err != LPVErrorCode::LPVNoError) return;
err = ffc->Train(wbImg, NULL);
if (err != LPVErrorCode::LPVNoError) return;
ILImagePtr correctedImg = LImage::Create();
err = ffc->FixImage(rawImg, correctedImg);
if (err != LPVErrorCode::LPVNoError) return;
LPVErrorCode
LPV 算法或函数运行过程中遇到的错误。
Definition: LPVCore.idl:545
C#
Code snippets: snippets/FlatFieldWhiteBoard.cs, snippets/FlatFieldSolar.cs
LFlatField ffc = new LFlatField();
ffc.ToGray = 160;
ffc.Tolerance = 0;
err = ffc.Train(wbImg, null);
LImage correctedImg = new LImage();
err = ffc.FixImage(rawImg, correctedImg);
LPVImageFormat
该枚举表示图像类型
Definition: LPVCore.idl:1694
COM
ILFlatFieldPtr ffc = LFlatField::Create();
ffc->ColorMode = LPVImageFormat::LPVImageFormatGrayscale8;
ffc->ToGray = 160;
ffc->Tolerance = 0;
if (err != LPVErrorCode::LPVNoError) return;
err = ffc->Train(wbImg, NULL);
if (err != LPVErrorCode::LPVNoError) return;
ILImagePtr correctedImg = LImage::Create();
err = ffc->FixImage(rawImg, correctedImg);
if (err != LPVErrorCode::LPVNoError) return;