IDNEO 开发嵌入式计算机视觉和机器学习算法以解释血型结果
挑战
对医院工作人员用于确定患者血液抗原分型的卡片自动进行视觉解释
解决方案
使用 MATLAB 开发、测试和生成用于图像分析和机器学习算法的嵌入式代码
结果
- 超出准确度要求
- 项目完成时间减半
- 交付了经过优化的系统
了解医疗创伤患者的血液抗原分型,对于医生提供有效的治疗通常必不可少。Grifols MDmulticard 可以在短短 5 分钟内从一滴血液中确定血液抗原分型。该卡片使用基于免疫层析条带的侧向流动技术来显示不同的红色条带,以指示存在或不存在关键抗原。
为帮助临床医生解读 MDmulticard 结果,Grifols 聘请 IDNEO 开发一款自动读卡器。这款读卡器软件使用 MATLAB® 开发,并在 Android 目标硬件上实现,包括图像处理、计算机视觉和机器学习算法,这些算法可以将卡片上的条带图案和形状转换为血液抗原分型结果。
IDNEO 硬件研发主管 Marc Blanch 表示:“MATLAB 使我们能够快速分析图像,并通过多次迭代改进算法。在我们开发出算法之后,MATLAB 可以轻松将其部署到嵌入式系统。用 C 语言或其他语言完成这项任务要困难得多,尤其是在很短的时间内。”
挑战
由于湿度、温度、患者的输血史、稀释血样的手动过程或其他因素,MDmulticard 上的红色条带有时会变形或褪色。因此,IDNEO 团队需要开发出能够处理带状图案和形状的显著变化的算法。在项目开始时,该团队只能访问有限数量的卡片。他们需要一个支持快速迭代的工作流程,这样当他们收到更多具有不同带状图案和形状的卡片时,就可以轻松改进算法。
Grifols 和 IDNEO 希望尽快交付原型,以便临床工作人员能够在算法部署到生产硬件之前对软件提供反馈。由于团队需要在短时间内完成任务,因此他们希望采用敏捷的开发方法,使他们能够整合客户意见并快速响应不断变化的要求。
解决方案
IDNEO 工程师使用 MATLAB 开发图像处理、计算机视觉和机器学习算法,然后使用 Embedded Coder® 为 MDmulticard 读卡器的 Android 产品级实现生成代码。
使用 MATLAB 和 Image Processing Toolbox™ 开发的核心图像分析算法,可对图像进行颜色均衡和白平衡,将图像转换为 CIELUV 色度空间,计算色差,然后在指示图像中带状图案的卡片上定位基准标记。IDNEO 团队为核心算法添加了条带分析,可创建图像的二进制版本,然后应用形态学操作以获取卡片上每个条带的骨架图像。
接下来,他们实现了一个线性回归分类器,该分类器已使用从骨架图像中提取的特征进行训练。如果患者先前输过血,该分类器可以检测到实心条带(阳性)、无条带(阴性)和混合外观凝集条带(疑似)。
在对 Grifols 提供的图像进行算法测试后,工程师使用 MATLAB App Designer设计了用户界面。他们使用 MATLAB Compiler™ 生成了一个独立的 MATLAB 应用程序,Grifols 工程师和部分医院工作人员可在不安装 MATLAB 的情况下使用该程序。
IDNEO 团队使用 Embedded Coder 并根据核心图像分析算法生成了产品级 C 代码。他们通过将其生成的结果与原始 MATLAB 算法生成的结果进行对比来测试 C 代码,并使用 MATLAB Profiler 衡量代码覆盖率。
该团队将生成的代码集成到一个 Android 应用程序中,该程序为 Grifols MDmulticard 读卡器提供了触摸屏界面。
为满足客户紧张的交付期要求,IDNEO 团队在整个开发过程中使用 Scrum 流程框架和持续集成。MATLAB 支持此工作流程,同时使用 Jenkins Jobs 根据卡片图像数据库对使用 Embedded Coder 生成的代码进行测试。
目前,一款经过充分验证的读卡器试生产样机正在西班牙的多家医院接受可用性测试。与此同时,IDNEO 的工程师们也在使用 Statistics and Machine Learning Toolbox™ 中的分类学习器应用程序来评估支持向量机等机器学习模型,以不断提高算法的准确性。
结果
- 超出准确度要求。Blanch 表示:“我们的客户要求阳性和阴性条带的识别准确率必须超过 90%。我们使用 MATLAB 开发的算法在样本数据集中产生的误报或漏报为零,因此我们超出了这一要求。”
- 项目完成时间减半。Blanch 表示:“MATLAB 和 Embedded Coder 让我们得以将完成项目需要的时间从 24 个月缩短到 12 个月,并且无需向团队增加更多工程师。这种方法使团队成员能够专注于自己的特定职责,从而使我们的工作更加高效,并且减少了软件缺陷的数量。”
- 交付了经过优化的系统。Blanch 表示:“通过使用 Embedded Coder 为设备生成 C 代码,让我们能够集中精力开发和优化我们的算法。因此,我们能够在现有时间内交付更高质量的系统。”