1 概述
在人体温度检测报警系统中,我们需要在检测区域中实时的标识出一个或者多
个人体的脸部区域,并在识别出的每个区域中查找最高温度。
本文所描述的算法主要是识别出图像范围中的高温区域,涉及到的算法有图像
二值化、二值图像的连通区域标记。
参考文档:
https://blog.csdn.net/ny1986/article/details/94431548
https://blog.csdn.net/qq_37385726/article/details/82015545
https://www.haolizi.net/example/view_21005.html
https://blog.csdn.net/icvpr/article/details/10259577
2 算法描述
2.1 输入图像
算法是基于红外图像的 8 位灰度图,灰度值范围是 0-255。
2.2 图像二值化
图像二值算法,我们需提前设置一个阀值。在整幅图中查找,如果灰度值低于
阀值则赋值为 0,如果灰度值大于阀值则赋值为 255。如下图:
在上图中的阀值设置为 200,这个阀值可以在软件中修改,主要是用于区分高温
部分的范围,这个可以根据现场情况做调整。
海思 IVE 算法:HI_MPI_IVE_Thresh
OpenCV 算法:threshold
2.3 二值图像的连通区域标记
在我们讨论连通区域标记的算法之前,我们先要明确什么是连通区域,怎样的
像素邻接关系构成连通。在图像中,最小的单位是像素,每个像素周围有 8 个邻接
像素,常见的邻接关系有 2 种:4 邻接与 8 邻接。4 邻接一共 4 个点,即上下左右,
如下左图所示。8 邻接的点一共有 8 个,包括了对角线位置的点,如下图所示。
如果像素点 A 与 B 邻接,我们称 A 与 B 连通,于是我们不加证明的有如下的结
论:
如果 A 与 B 连通,B 与 C 连通,则 A 与 C 连通。
在视觉上看来,彼此连通的点形成了一个区域,而不连通的点形成了不同的区
域。这样的一个所有的点彼此连通点构成的集合,我们称为一个连通区域。
下面这符图中,如果考虑 4 邻接,则有 3 个连通区域;如果考虑 8 邻接,则有 2
个连通区域。(注:图像是被放大的效果,图像正方形实际只有 4 个像素)。
二值图像的连通区域的算法需要设置一个最小面积,如果小于该面积的区域则忽略,本
示例设置的范围是 16 个像素,算法会将符合条件的区域全部找出,并标识出每个区域的坐
标点,如下图
1
右边有两个小区域并没有被标识出来,因为面积小于 16 个像素。
海思 IVE 算法:HI_MPI_IVE_CCL
OpenCV 算法:cvFindContours
2