![](https://csdnimg.cn/release/download_crawler_static/89423692/bg1.jpg)
火焰识别的三个特征:1个颜色特征,2个几何特征
颜色特征:HSV颜色空间下,对三个通道值进行阈值滤波
几何特征1:长宽比
几何特征2:圆形度
因为中文注释很容易出乱码问题,而且杂糅在一起不容易看清楚,所以下面挑选算法部分代码讲
解,源代码的注释不是很多,如果需要,后面再帮你加
Line12-line15
filter_hsv = (original_hsv(:,:,1))>0.16;
filter_hsv = filter_hsv.*(original_hsv(:,:,2))>0.5;
filter_hsv = filter_hsv.*(original_hsv(:,:,2))<0.6;
filter_hsv = filter_hsv.*(original_hsv(:,:,3))>0.95;
Filter_hsv是一个模板Mask,保存HSV三通道的阈值滤波结果,符合的index位置处为1,否则为0
Line33
[B,L] = bwboundaries(hsv_dilate,'noholes');
找出所有不包括孔洞的连通域,这个B和L的意义需要自己去看matlab的help文档。
tempRatio = range(boundary(:,1))/range(boundary(:,2));
Line44-line49
计算出目前区域的长宽比
% not in the range
if tempRatio < ratio*(1-bias) || tempRatio > ratio*(1+bias)
和之前测量的样本的标准长宽比进行对比,bias是偏移的百分比,目前是28%
selected = (L == iii);
selected = ~selected;
filter_hsv=filter_hsv.*selected;
如果在范围内,也就是不符合要求,则更新filter_hsv这个mask。
Line78-83
stats = regionprops('table',B{iii},'Area','Perimeter');
统计第iii个连通域的面积和周长
Ck = 4*pi*sum(stats.Area)/(sum(stats.Perimeter)).^2;
计算Ck值,也就是圆形度,圆形度的公式为
,
为面积,
为周长
Matlab火焰识别
Friday, April 26, 2019
8:19 PM
New Section 1 Page 1