MATLAB提取和筛选热成像图上的温度数据

红外热成像仪是把物体表面的红外辐射转换成可见图像的装置,其最终表达形式是红外热图[1]。因为一张热成像图片上只能直观显现温度的相对分布,无法具体获得温度的数据,因此要利用MATLAB进行后续的操作。一张热成像图为彩色图片,不同像素点的颜色代表着不同的温度,白色到黑色为高温到低温,即颜色越亮代表温度越高。热成像仪导出的图像格式为*.BMP,是一种位图,但在MATLAB将其转换为像素图易产生噪点,十分影响后续的温度提取,因此要先将BMP格式转换为JPG格式。

  • 转换图片格式

以福禄克的Ti400型号得到的JPG图像为例,其分辨率为480×640,即在软件中得到的矩阵大小为480行,640列,矩阵数据格式为uint8,矩阵的元素值区间为[0,255]。处理后的图像为RGB格式,具有三个颜色通道。

  • 提取图片像素信息转换为灰度图

一般认为,像素点的灰度值与一定范围的温度存在线性关系。因此,首先将彩色图像转成灰度图,转换的方法是将彩色图像中三个颜色通道的数值通过加权来计算。如下式所示

Y=\omega_rM_r+\omega_gM_g+\omega_bM_b

式中,ωi为不同颜色通道的权重,Mi为所提取的不同颜色通道的矩阵,r,g,b分别代表红、绿、蓝三个颜色通道。本文使用的权重大小为较经典的值:ωr=0.299,ωg=0.587,ωb=0.114。

(图片注释有误,实为伪彩色图片)

为了得到实际温度值和图像灰度值之间对应的线性关系,通过待定系数法确定参数值。先在热成像仪软件中读取温度值范围,取最大值Tmax和最小值Tmin,与灰度图像中的最大值Ymax和最小值Ymin分别对应,按照公式(2~3)计算可以确定T=kY+b的系数。

k=\frac{T_{max}-T_{min}}{Y_{max}-Y_{min}}

b=T_{max}-kY_{max}

将得到的线性关系再用来计算灰度图上每一点的温度,即可完整提取出图片上的温度数据。

  • 绘制3D温度云图

左图为3-D温度云图,能较好地显现出分析对象的温度分布。右图为MATLAB绘制的温度分布图,与热成像图对比,发现十分相似,证明了操作的准确性。

  • 筛选温度(将环境与分析对象的温度区分开)

为了计算分析对象的均温,需要将对象上的温度筛选出来。虽然本文采用的分析对象是个比较规则的物体,可以通过截取图片的方法只保留需要的部分,但是该方法在面对数量较多的图片时就比较繁琐。采用温度判断法,判断的温度界限T1作为区分分析对象和环境的温度,可以显著地将分析对象从整张图片中分离,如图所示。将保留的温度部分数据进一步处理,就可以计算得到分析对象的均温。

当然,不同的温度界限筛选的效果不一,可以自己进行合理选择。将筛选后图片上所有温度相加除以次数即为平均温度。

  • 附录相关MATLAB代码一份

    clear;clc;close all;
    %读取一张图片,并显示
    original_picture=imread('D:\Desktop\2.jpg');
    figure(1);
    imshow(original_picture);
    impixelinfo;
    title('原始图像')
    r = original_picture(:,:,1);
    g = original_picture(:,:,2);
    b = original_picture(:,:,3);
    I = .299*r + .587*g + .114*b;   % 转灰度图r
    figure(2)
    imshow(I)
    I_1=im2double(I);
    max_temp=max(max(I_1));
    [x y]=find(I_1==max(max(I_1)));
    I_1(x,y);
    min_temp=im2double(min(min(I)));
    k = (24.1 - 13.5)/(max_temp - min_temp);% k = (28.9 - 28.73)/(t1 - t2);
    b = 24.1 - k*max_temp;% b = 28.9 - k*t1;    % 得到灰度与温度的线性关系
    k=im2double(k);
    b=im2double(b);
    temp=k*I_1+b;
    temp(x,y);
    figure(3)
    surf(temp)
    shading interp
    colorbar
    title('surf三维图');
    
    
    figure(4)          % surf3维图利用view调整视图
    surf(temp)
    shading interp
    colorbar
    view([90, 90]);     % 调整试图位置
    title('surf + view');
    
    i=0;j=0;k=0;
    temp_fil=zeros(480,640);
    for i=1:1:480
        for j=1:1:640
            if temp(i,j)<=18%18是给定的筛选用的界限温度,可以自己选择大小
                temp_fil(i,j)=0;
            else
                temp_fil(i,j)=temp(i,j);
                k=k+1;
            end
        end
    end
    figure(5)
    surf(temp_fil)
    shading interp
    colorbar
    view([90, 90]);  
    title('surf三维图');
    
    
    %温度平均值
    temp_averge=sum(temp_fil(:))/k;
    
    
    
    
    
    
    

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值