远程红外热成像app

码云地址

8.实时识别并标记算法

1.调试演示所用传感器为8×8像素(IR64)

本次红外传感器比较小只有64个像素,无法准备描绘出物体轮廓,所以才需要插值提升像素。         

2.mqtt实时将数据转发给移动端

传感器数据直接通过mqtt发送给移动端或者服务器通过mqtt中转给移动端,都可以做到无刷新实时显示热成像画面。
本次测试使用的是5Hz,传感器每秒发送5次数据,移动端每秒渲染5次热成像画面。实时度高的场景可以增加次数。

3.温度数组转为温度矩阵算法

由于红外传感器上报给服务器的数据是一维数组,要想显示图像就需要将数据转为二维数组矩阵    

//传感器横轴像素
int sourcePixelRowCount = 8;
int len = temperatureList.length;
//传感器纵轴像素
int lineNum = len % sourcePixelRowCount == 0
    ? (len ~/ sourcePixelRowCount).toInt()
    : ((len / sourcePixelRowCount) + 1).floor();
for (var i = 0; i < lineNum; i++) {
  int startIndex = i * sourcePixelRowCount;
  //截取数组指定长度后生成新数组
  Iterable<double> range = temperatureList.getRange(startIndex ,startIndex  + sourcePixelRowCount);
  temperature.add(range.toList());
}     

4.画面镜像翻转,二维数组重新排序

如果不进行镜像翻转,显示的画面将和实际的画面是相反的,左右相反       

5.双三次多项式插值提升像素算法

插值提升像素,锐化边缘后,提升后像素为32×32,看下图片基本可以看到物体轮廓了。 

  //计算权重
  static dynamic getCubicWeight(double v) {
    double a = -0.5;
    // 取整
    int nv = v.floor();
    // 坐标差值集合
    List<double> xList = new List(4);
    // 坐标集合
    List<int> xs = new List(4);

    // 最近的4个坐标差值
    xList[0] = nv - v - 1;
    xList[1] = nv - v;
    xList[2] = nv - v + 1;
    xList[3] = nv - v + 2;
    //
    xs[0] = nv - 1;
    xs[1] = nv;
    xs[2] = nv + 1;
    xs[3] = nv + 2;

    // 计算权重
    List<double> ws = List(4);
    for (int i = 0; i < 4; i++) {
      double val = xList[i].abs();
      double w = 0;
      // 基于BiCubic基函数的双三次插值
      if (val <= 1) {
        w = (a + 2) * val * val * val - (a + 3) * val * val + 1;
      } else if (val < 2) {
        w = a * val * val * val - 5 * a * val * val + 8 * a * val - 4 * a;
      }
      ws[i] = w;
    }
    return {'weight': ws, 'coordinate': xs};
  }      

6.温度数值转为RGB色彩编码算法,想要色阶越多可以用255/色阶数,我用的4

  //将温度转为RGB,用64将颜色分为4个区间,可以分为更多区间比如51
  RGB grayToPseColor(int grayValue) {

    if (grayValue > 255) {
      return RGB(255, 0, 0);
    }

    if (grayValue < 0) {
      return RGB(0, 0, 0);
    }

    if ((grayValue >= 0) && (grayValue <= 63)) {

      return RGB(0, 0, (grayValue / 64 * 255).round());

    } else if ((grayValue >= 64) && (grayValue <= 127)) {

      return RGB(0, ((grayValue - 64) / 64 * 255).round(),((127 - grayValue) / 64 * 255).round());

    } else if ((grayValue >= 128) && (grayValue <= 191)) {

      return RGB(((grayValue - 128) / 64 * 255).round(), 255, 0);

    } else if ((grayValue >= 192) && (grayValue <= 255)) {

      return RGB(255, ((255 - grayValue) / 64 * 255).round(), 0);

    }
    return RGB(0, 0, 0);
  }       

7.屏幕实时显示热成像画面算法,优化像素增大后渲染卡顿算法流畅丝滑

  //二维温度数组
  List<List<double>> temperatureScale;
  //每个像素点大小
  final static double pixel;
  //最低温度
  static double temperatureMin = 10;
  //最高温度
  static double temperatureMax = 38;
  //计算最大温度差
  double difference = temperatureMax - temperatureMin;

  @override
  void paint(Canvas canvas, Size size) {
    //创建画笔,默认颜色就是填充模式
    Paint paint = Paint();
    //画笔x轴位置,默认坐标为容器的左上角
    double top = 0;
    //画笔y轴位置
    double left = 0;
    //循环二维数组
    for (var i = 0; i < temperatureScale.length; i++) {
      for (var j = 0; j < temperatureScale[0].length; j++) {
        double value = temperatureScale[i][j];
        //计算温度系数
        double scale = (value - temperatureMin) / difference;
        //将温度转为rgb颜色值
        RGB rbg = grayToPseColor((255 * scale).round());
        //调整画笔的颜色
        paint.color = Color.fromARGB(255, rbg.R, rbg.G, rbg.B);
        //创建一个矩形
        Rect rrect = Rect.fromLTWH(left, top, pixel, pixel);
        //画一个矩形到屏幕
        canvas.drawRect(rrect, paint);
        //画笔向右移动一个像素
        left = left + pixel;
      }
      left = 0;
      //画笔向下移动一个像素
      top = top + pixel;
    }
  }  

9.移动端效果8×8图示例(优化前画面像素->优化中项画面像素->优化后画面像素)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
优化图像 调整图像以通过有效的方式与同事或客户沟通问题 用功能全面的图像优化工具调优您的图像,从而就问题进行清晰的沟通或提供已解决问题的证明 利用IR-Fusion®技术查看选项获取更有力的图像和有效报告: AutoBlend™ 模式 - 将半透明红外图像与可视图像融合为单一视图以轻松识别问题 画中画模式 - 提供红外图像周围的可视帧以轻松定位和参考特定区域 颜色警报 - 隔离问题区域以便清楚地识别问题区域和进行沟通 图像分析 插入标记量化问题的严重度,并通过 CNX™ 无线模块调节多功能工具连接和额外测量。这些 CNX 无线模块可帮您更快地找到故障并解决问题。利用图形分析工具进一步确定问题的严重度。 使用标记和 CNX 测量结果来量化操作特性的差异,从而确定检查中所发现的问题的严重度和优先级别 通过将 CNX 测量结果添加到热图中,您可以更快地解决问题并生成更全面的报告 使用 3D-IR™ 从不同角度查看图像、识别其他问题并消除误报,这是终极版热成像分析工具 沟通结果 通过电子邮件发送图像或报告分享检查结果: 计划下一步工作或获得完工的批准 如有需要,寻求帮助,分析问题 提供检查的完整细节 通过基本无需自定义的按钮向客户或经理发送报告以完成此工作 简化报告生成 快速生成专业的自定义报告 一键式生成报告,快速获取结果 功能选择包括前/后、红外加数字图像、注释、支持数据和图形 报告向导通过生成报告为用户提供指导 – 非常简单
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度物联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值