2020-11-01

本文介绍了如何使用多项式插值方法将MLX90640热成像芯片的32×24像素阵列扩展到512×384像素,以便于人脸识别。通过Python实现,包括PolynomialInterpolationArr和GetPolyData_U等关键函数,详细步骤为先沿行方向插值,再沿列方向插值。文中提供了插值处理后的温度数据及转换为灰度图的代码示例。
摘要由CSDN通过智能技术生成

MLX90640的阵列插值处理-多项式插值由32×24像素到512×384像素(附从温度阵列转化为热成像图代码)

由于大四final year project的需求,需要利用mlx90640热成像芯片处理,由于像素过于低,无法利用灰度图进行人脸识别,因此必须扩展像素。这里link 采用了博主的代码,将Pascal版本改编为python版本的代码。

下面是改编的函数的代码,命名为func.py,函数分为:
PolynomialInterpolationArr(SourceDatas,Dir, times) 。 SourceDatas为一个列表,里面是温度矩阵中的一行温度数据,最后返回值为插值结束后的温度数据。具体插值方法见上面链接。

GetPolyData_U(OriginData,times,coes) 会返回一个系数,该系数会被应用在PolynomialInterpolationArr函数当中。

chazhi(temp_matrix)是为了主函数直观清晰而写的一个函数。该函数将温度矩阵拆分为一维列表并根据PolynomialInterpolationArr函数进行插值。

整体思路是先将24×32的温度矩阵在行的方向上插值两次,变为24×512的温度矩阵。之后将24×512的矩阵在列上进行两次插值,变为384*512的温度矩阵.

这里用了MLX90640采集的一次人脸温度数据。txt文本放不上来,有需要的可以把project下载下来测试一下情况。

import numpy as np

def PolynomialInterpolationArr (SourceDatas,Dir, times):
    arrCount=len(SourceDatas)
    Result=[0]*arrCount*4
    if (Dir==0) :
        startIndex = 2
    else :
        startIndex = 1

    for i in range(arrCount):
        Result[startIndex+i*4]=SourceDatas[i]

    coes = [0] * 4 #这里初始化一下,之后应该就每次变化不用归0

    OriginDatas=np.zeros((2,times))

    for i in range(arrCount-times+1) :
        for j in  range(times) :  # 初始化拟合原始数据
            OriginDatas[0,j] = j * 4
            OriginDatas[1,j] = SourceDatas[i + j]
        coes=GetPolyData_U(OriginDatas, times, coes);

        for h in range(1,4) :
            if times >= 2  :
                tempDou = coes[0]+ (h) * coes[1];
            if times >= 3  :
                tempDou = tempDou+ (h) * (h) * coes[2];
            if times >= 4  :
                tempDou = tempDou+ (h) * (h) * (h) * coes[3];

            Result[startIndex + i * 4 + (h)] = tempDou

    # 两端插值,两端插值直接使用线性插值
    OriginDatas = np
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值