基于MATLAB的多循环火焰图像识别与叠加程序
Posted 研而有术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MATLAB的多循环火焰图像识别与叠加程序相关的知识,希望对你有一定的参考价值。
基于光学发动机对内燃机缸内着火及火焰传播过程进行光学测试是研究发动机燃烧过程的重要手段。同内燃机的燃烧压力一样,其火焰传播过程也具有典型的循环特性,即每个循环的初始条件相同,点火时刻一样,也会存在火焰传播过程的循环变动。不同于缸压曲线,多循环火焰传播过程的图片无法全部展示出来,也难以观察具体到循环之间的差异,因此本期将介绍一种能对多循环火焰图片进行处理的方法和小程序。该小程序分为两部分,第一部分功能是对拍摄到的火焰图像进行降噪、识别、提取,并输出为二值化图像,第二部分则对二值化图像进行叠加、着色,生成相应的概率云图。该程序基于MATLAB内置函数以及ColorMap工具包等的简单调用,以下对该程序的思路进行简单介绍。
接下来,对图像进行灰度处理(其原理已在前面的推送中说明),并采用 “im2bw”函数将灰度图像转变为二进制图像(如下图所示),利用MATLAB中自带基于Otsu方法的内置函数Graythresh实时获取每一张图像的阈值,根据阈值来确定已燃区域和未燃区域。在二值化的过程中,阈值的选取对已燃区域识别的准确性非常重要,为了提高识别的准确性,在本研究中往往根据图像亮度,二值化阈值分开采用“自适应阈值”(Adaptive Threshold)和“固定阈值”,通常在阈值范围为0.01-0.1内时,采用自适应阈值根据亮度对像素进行划分,在此范围之外则采用固定阈值,图像较暗处为0.01,图像较亮处则为0.1。在获得二值化图像后,MATLAB将构成二值化图像的像素与“Mask Filter”所选中的区域相除,以获得火焰区域的面积。
在对所有原始火焰图像进行二值化处理后,为了分析火焰传播过程的循环变动,我们需要对同一时刻的不同循环二进制图像进行叠加处理。简单思路就是在MATLAB中实现图像批量读取,调用叠加函数和着色函数,即多张图像叠加然后按像素点叠加重叠次数着色。这里采用MATLAB中自带的着色工具——彩色映射矩阵map(Colormap函数),Colormap中常用的有18种色带,本例中笔者采用较为常见的“Jetmap”来进行上色。在光学机试验中,高速相机拍摄不同于容弹或者快压机试验,其触发模式采用随机重置触发,根据点火模块给出的5V方波信号上升沿触发,拍摄固定张数后停止,等待下一个触发信号,以此循环,因此在相邻两个循环同一时刻火焰图像中间相差的图片张数是固定的。在图像处理程序中,图像的本质是矩阵,而叠加的原理则是多张图片的矩阵相加,再除以已经叠加的图片个数,根据需要叠加的时刻来设置从第几张图像开始,根据每循环拍摄张数来设置间隔张数,循环叠加,最后效果如下图所示。
以上叠加着色后的概率分布云图,标尺固定为0到1,可以看出,实际最大概率并不能达到1,这里主要是为了在展示多个图像时,固定标尺以方便对比。那么,我们可以将标尺改为0到最大概率,只需将Caxis函数的取值范围改为“auto”即可,最后效果如下图所示。
以上是关于基于MATLAB的多循环火焰图像识别与叠加程序的主要内容,如果未能解决你的问题,请参考以下文章