火焰识别的基本方法

一、检测方式

1.1 传统方式

  • 基于颜色空间
    • RGB
    • HSV
    • YCbCr
  • 基于纹理
  • 高斯混合模型
  • 基于视频流的帧差法

1.2 机器学习

  • 支持向量机
  • 随即森林
  • 决策树

1.3 深度学习

  • 分类网络
    • mobileNet
    • squeezeNet
    • VGG16
    • AlexNet
  • 目标检测
    • yolo
    • Fast-RCNN
  • 语义分割
    • FCN
    • UNet
    • SegNet
    • DeepLab

二、检测方式介绍

由于时间有限,在这会主讲基于颜色空间的传统方式及深度学习方式。还有日后我研一论文的实现细节,现在暂时不做叙述。关注我别迷失哦

2.1 基于YCbCr颜色空间的火焰检测

1、实验环境

import cv2
import numpy as np

2、公式介绍
3、正常情况下我们通过opencv得到的是一张基于BGR颜色空间的图片。因此,我们第一步是将BGR图片转换成YCbCr颜色空间的图片。代码如下:

def BGRToYCbCr(image):
    """
    颜色空间转换
    :param image: 图像
    :return:
    """
    image_B, image_G, image_R = cv2.split(image)
    y = np.array(0.2568 * image_R + 0.5041 * image_G + 0.0979 * image_B, dtype=np.uint8) + 16
    cb = np.array(-0.1482 * image_R - 0.2910 * image_G + 0.4392 * image_B, dtype=np.uint8) + 128
    cr = np.array(0.4392 * image_R - 0.3678 * image_G - 0.0714 * image_B, dtype=np.uint8) + 128
    return y, cb, cr

4、第二步就是完成对论文中火焰区域的限制条件,也就是论文中所列公式的代码编写。
代码如下:注:X_decay为X的衰减系数是本人额外添加的。
具体公式以后再详细介绍

def detectFireByYCbCr(Y, Cb, Cr, Y_decay=1.15, Cb_decay=0.75, Cr_decay=1.15, threshold=40):
    """
    通过YCbCr颜色空间进行火焰识别,为Y, Cb, Cr添加对应的权值衰减
    """
    rows, cols = Y.shape
    # 像素的个数
    numPixs = rows * cols
    zeros = np.zeros((rows, cols))
    ones = np.ones((rows, cols))
    # 等式3
    YgtCb = np.where(Y > Cb, ones, zeros)
    # 等式4
    CrgtCb = np.where(Cr > Cb, ones, zeros)
    # 等式5
    Y_mean = cv2.integral(Y)[-1, -1] / numPixs * Y_decay
    Cb_mean = cv2.integral(Cb)[-1, -1] / numPixs * Cb_decay
    Cr_mean = cv2.integral(Cr)[-1, -1] / numPixs * Cr_decay
    F = np.where(Y > Y_mean, np.where(Cb < Cb_mean, np.where(Cr > Cr_mean, ones, zeros), zeros), zeros)
    # 等式6
    Ft = np.where(np.abs(Cb - Cr) > threshold, ones, zeros)
    return YgtCb * CrgtCb * F * Ft

3、实验结果
火焰识别的基本方法

上一篇:遍历Collection的两种方式:


下一篇:【Reactor】总结