FFC向导示例程序
Euresys提供了一个示例应用程序的源代码,名为ffc-wizard
,该应用程序计算系数,并将其打包到针对Coaxlink 卡的二进制文件中。
此示例代码的目的有三个方面:
□ | 指导用户完成校准程序; |
□ | 提供本文件所述内容的技术和实践翻译; |
□ | 提供用于开发自定义应用程序的构建基块。 |

源代码位于单个源文件中:src/ffc-wizard.cpp
。构建应用程序应该简约;
□ | 对于Windows,有一个Microsoft Visual Studio项目文件;ffc-wizard.vcproj ; |
□ | 对于Linux和MacOS,提供了Makefile 。 |

向导是一个控制台应用程序。当给出 -h (或 --help) 标志时,将显示以下帮助消息:
获取帮助消息
>ffc-wizard.exe--help 平场校正向导 FCC-向导[选项] 可选: --if=INT 要使用的GenTL接口的索引 --dev=INT 要使用的GenTL设备的索引 --if=INT 要使用的GenTL数据流的索引 --average=INT 要平均的图像数量 (默认: 10) --roi_x=INT 感兴趣区域左上角的水平偏移(以像素为单位)(默认:0) --roi_x=INT 感兴趣区域左上角的垂直偏移(以像素为单位)(默认:0;忽略行扫描) --roi_width=INT 感兴趣区域的宽度(默认:整幅图像) --roi_height=INT 感兴趣区域的高度(默认:整幅图像;忽略行扫描) --balance 计算所有组件的平面图像平均值,而不是每个组件的平均值 --linescan 强制行扫描模式,即平均图像行数(自动为行扫描卡启用) --dark-setup=SCRIPT 暗采集设置脚本的路径 --flat-setup=SCRIPT 平面采集设置脚本的路径 --timeout=MS 等待图像的最长时间(毫秒)(默认值:1000) --dark-histogram=FILE 要输出和打开的平均暗图像直方图html页面的路径 --flat-histogram=FILE 要输出和打开的平均平面图像直方图html页面的路径 --output-ffc=FILE 系数输出文件的路径(Coaxlink ffc二进制格式) --load-ffc=FILE 将系数加载到 Coaxlink 系数分区中(默认:计算系数) --no-interact 跳过用户交互 -h --help 显示帮助消息 注:ROI选项允许(在计算平均值时)定义要考虑的矩形区域, 这有助于消除受晕映影响的图像中靠近边界的像素。
选项详情
标志 | 详情 |
---|---|
--if , --def , --ds |
标识要使用(和/或配置)的数据流的GenTL模块索引。 |
--average
|
为暗采集和平面采集而采集的图像数量;校准过程中仅进一步使用这些采集的平均值。 |
--roi_x , --roi_y , --roi_width , --roi_height |
计算平面图像 (平面(平均))的平均像素值时要考虑的可选矩形区域;这会影响对每个像素的增益值的评估。 |
--balance
|
启用白平衡;即无论是否计算彩色像素分量的系数来平衡分量值;显然,这要求用于获取平面图像的平面背景尽可能接近真实的灰色(所有RGB分量的值都相同)。 |
--dark-setup , --flat-setup |
在黑暗和平坦采集之前,运行的可选配置脚本 |
--dark-histogram , --flat-histogram |
可选;输出文件的路径,显示暗图像和平面图像像素分量的柱状图;这提供了暗电流变化以及平面图像变化的直观概述。 |
--no-interact
|
通常,向导会等待用户在开始暗采集和平坦采集之前设置系统;当使用此标志时,向导则不会等待用户(也不会打开创建的直方图HTML页)。 |

校准程序以及系数的打包由主函数ffcWizard
控制。
ffcWizard
任务
任务 | 由函数完成 |
---|---|
获取一系列暗图像,以生成平均暗图像 | acquireImages
|
获取一系列平面图像,以生成平均平面图像 | acquireImages
|
计算每个像素分量的值gain 。 |
computeGain
|
使用暗像素分量值作为offset 值 |
computeOffset
|
将offset and gain 值打包为16位的小端值 |
packCoefficients
|
将压缩系数写入二进制文件 | savePackedCoefficients
|

示例应用程序已经可以支持一些常见的像素格式:Mono
, RGB
, RGBa
and Bayer
。
限制:为了限制示例应用程序的复杂性,我们考虑(对于每个像素具有多个分量的像素格式)所有分量具有相同的大小。通过更新函数,仍然可以支持具有不同分量大小的像素格式。addImage
and addComponents
。
为了支持新的像素格式(在先前的限制条件下),我们需要修改两个功能:
1. | Image::getComponentsPerPixel , 返回由 PFNC 名称识别的新格式的每个像素的分量数。 |
2. | Image::getComponentFilters , to return a std::vector of ComponentFilter 描述新格式(由其PFNC名称识别)像素分量在图像中位置的对象。 |
该 ComponentFilter
objects are used to separate the processing of the different pixel components while evaluating the Gain
and Offset
values. For example, in RGB
format, the FFC coefficients related to the Red
components are computed using the Red
组件来自黑色和平面图像中。
有关像素分量布局配置的详细信息,请参见的源代码Image::getComponentFilters
。