【EPS32S3学习笔记】OPENCV应用于热成像的插值运算

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

之前解锁了在ESP32上布置OPENCV及一些人脸识别的应用,后面看看还有哪些应用可以尝试。
当然可能每个点都不是很大,更多的是记录一些过程。


一、热成像应用的插值运算

简单来说就是一个图像Resize的过程,只不过在热成像这个领域避免不了,主要是因为传感器价格比较贵,例如一个2432像素的传感器就200块钱左右了,如果是要做一个分辨率高一点的,仅传感器的成本就承担不了。所以就需要插值运算来强行提升分辨率。
不过插值运算对于初入行的童鞋并不友好,更多会涉及数学方面的知识,插值的算法也很多:双线性插值法、三次多项式插值、先双线性插值再三次多项式插值、先三次多项式插值再双线性插值等等。如果没有一些参考,从0开始码这块的代码会比较麻烦。而且一般的插值的运算都是4倍的关系,比如现在像素是24
32,一次插值之后就是24324。如果是一些非4次幂的变换,还要额外考虑。所以会比较麻烦,而对于底层的嵌入式应用来说,相关的参考并不是很好找,所以这个时候就用到OPENCV提供的功能了。

二、热成像的插值运算过程

以2432变换到240320为例,步骤如下:。
1、从热成像传感器获取的数据,经过运算转成温度;
2、将温度数据转换为8位的灰度值,简单的计算方法就是取温度的最大值,最小值,按比例*255。
3、之后利用这些灰度值,创建MAT对象,再调用resize进行像素的变换。
4、之后再将转换后的灰度数据,转换成对应格式的RGB数据,也就是红外图像的伪彩色编码过程。

    static Mat dstImage;
    Mat inputImage(srcHeight, srcWidth, CV_8UC1, pSrcBuf);
    resize(inputImage,dstImage,Size(dstWidth,dstHeight),0,0,INTER_LANCZOS4  );

resize可以选择的插值算法也有很多:
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值,默认值
INTER_CUBIC 双三次插值
INTER_AREA 使用像素面积关系重采样。图像变化时的首选方法
INTER_LANCZOS4 8x8 邻域的 Lanczos 插值
INTER_MAX 插值代码的掩码
WARP_FILL_OUTLIERS 标志,填充所有目标图像像素。如果其中一些对应于源图像中的异常值,则将它们设置为零
WARP_INVERSE_MAP 标志,逆变换

这些算法都可以尝试下,看看效果差别。按照官方的推荐要缩小图像,通常使用 INTER_AREA 插值看起来效果最好,而使用放大图像,通常使用 INTER_CUBIC或 INTER_LINEAR 。

小TIPS,在这个过程中先进行灰度插值,再伪彩色编码比较好,还是先伪彩色编码,再进行插值?试验过了,对先伪彩色编码再插值的图像效果很差,连续性比较差。原因其实跟伪彩色编码的算法有关,因为伪彩色编码都不是线性的,而是分段的,这样原图像的差,经过非线性放大,再进行插值后,与原来就不再成比例了。


总结

猜你喜欢

转载自blog.csdn.net/lunzilx/article/details/130885554