你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32图像处理库经验分享

[复制链接]
STMCU小助手 发布时间:2023-5-18 19:38
STM32图像处理库介绍
STM32图像处理库(STM32IPL)是一个用C语言编写的开源软件库,它提供图像处理和计算机视觉功能,以便在STM32微控制器上更快地开发视觉分析应用程序。最近,STM32IPL作为STM32Cube的一个中间件组件, 在FP-AI-VISION1功能包的最新版本(v3.1.0)中一起发布。
众所周知,计算机视觉深度学习模型的输入通常与相机捕获的图像帧不同。深度学习模型的输入可能有不同的维度和不同的图像格式,因此通常需要对原始图像进行一些基本的预处理,例如:调整大小、图像格式转换、归一化等。STM32IPL通过提供一些功能强大且随时可用的软件组件,简化并加速此类图像预处理功能的开发。
主要特性
STM32IPL的关键特性:
  • 为开发人员提供功能强大且随时可用的软件组件,缩短STM32平台上图像处理和计算机视觉应用程序的开发时间;
  • 满足嵌入式系统在图像处理和计算机视觉功能方面最常见的需求;
  • 通过尽可能封装和隐藏典型图像处理和计算机视觉操作的复杂性,简化并加快应用程序的开发。

STM32IPL在功能上被划分为各种模块,如下图所示:

微信图片_20230518193748.png

这些模块可以虚拟分组在以下宏组中:
  • 库初始化和反初始化组(深绿色模块);
  • 包括图像创建、初始化、释放等功能的组(浅绿色模块);
  • 包括图像变换功能的组,如:过滤、颜色转换、缩放、形态算子、扭曲等(深黄色模块);
  • 包含特征和对象提取功能的组,如:边缘和斑点检测器、霍夫变换等(浅黄色模块);
  • 包括对直线、矩形、椭圆等进行操作的功能组(深蓝色模块);
  • 包括图像读写功能的组(浅蓝色模块);
  • 包括在图像中绘制图形元素的功能组(深灰色模块);
  • 最后一组,包括用于计算积分图像和图像统计的剩余模块(浅灰色模块)。


下图展示了STM32IPL中提供的图像处理功能示例:

原图
微信图片_20230518193731.png

高斯滤波后
微信图片_20230518193723.png

经过Canny边缘检测算法后
微信图片_20230518193718.png

镜像翻转后
微信图片_20230518193714.png

旋转180°后

微信图片_20230518193711.png

软件架构

一个典型的使用STM32IPL的STM32应用程序的软件架构如下所示:

微信图片_20230518193708.png


STM32IPL位于BSP和HAL之上的中间件内。基本上,几乎所有的STM32IPL函数都与平台无关,除了以下两种函数,它们利用了一些STM32 MCU提供的硬件功能,而这些硬件功能只在部分而不是全部STM32 MCU里提供:
✦ 对文件执行读写操作的I/O函数。特别是用于处理所支持的图像文件格式(如 BMP、PPM、PGM 和 JPEG)的两个读/写函数。这些函数依赖于以下作为STM32Cube中间件组件的第三方开源库:
  • FatFs,在FatFs文件系统上提供读/写操作。例如,在microSD卡上读写图像。
  • LibJPEG,提供JPEG编码和解码功能。

✦ 通过利用STM32 DMA2D(用于图形操作的硬件加速器)在屏幕上快速绘制图像的函数。

高级功能示例

本节将以两个高级功能为例来说明其工作原理以及其应用在图像上的效果:霍夫变换和目标检测。

霍夫变换
霍夫变换是一种特征提取方法,用于检测图像中的线条和圆形等简单形状。这里的“简单”形状是指只需要几个参数就能表示的形状。例如,一条线可以用两个参数(斜率、截距)来表示,而一个圆有三个参数——圆心坐标和半径。霍夫变换在寻找图像中这种形状方面有出色的表现。

STM32IPL支持两种霍夫变换函数:
  • STM32Ipl_FindLines(),通过霍夫变换找到图像中的所有无限线。
  • STM32Ipl_FindCircles(),通过霍夫变换在图像中查找圆。


下面两张照片显示了使用霍夫变换进行线条检测的结果。

原图
微信图片_20230518193703.png

通过霍夫变换进行线条检测后
微信图片_20230518193700.png

请注意,检测到的线的质量很大程度上取决于边缘图的质量。因此,在现实世界中,霍夫变换通常在当您可以控制环境并因此获得一致的边缘图,或者当您可以针对您正在寻找的特定类型的边缘来训练边缘检测器时使用。

下面的另外两张照片显示了使用霍夫变换进行圆检测的结果。同样,结果的质量很大程度上取决于您可以找到的边缘的质量,以及您对要检测的圆的大小有多少先验知识。

原图
微信图片_20230518193656.png

通过霍夫变换进行圆检测后
微信图片_20230518193653.png

目标检测
目标检测是一种计算机视觉技术,可以识别和定位图像或视频中的对象。常用于自动驾驶汽车、机器人、面部识别等许多应用场景。

STM32IPL提供三种函数用于目标检测:
  • STM32Ipl_LoadFaceCascade(),加载面部级联。
  • STM32Ipl_LoadEyeCascade(),加载眼部级联。
  • STM32Ipl_DetectObject(),检测特定级联描述的对象。


以下照片显示了面部检测和眼部检测功能的结果:

原图
微信图片_20230518193650.png

眼部及面部检测后
微信图片_20230518193636.png

最后,要获得STM32IPL库,用户需下载最新的FP-AI-VISION1功能包,然后该库便可以在以下路径找到:
  1. FP-AI-VISION1_V3.1.0\Middlewares\ST\STM32_ImageProcessing_Library
复制代码


收藏 评论1 发布时间:2023-5-18 19:38

举报

1个回答
知南北游 回答时间:2023-6-27 08:37:36

可以的

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版