用Python实现根据角4点进行矩阵二维插值并画出伪彩色图

  哈哈,题目取得这么绕,其实就是自己写了一个很渣的类似图像放大的算法。已知矩阵四周的4点,扩展成更大的矩阵,中间的元素值均匀插入,例如:

  矩阵:

1 2

3 4

  扩展成3x3的:

1 1.5 2

2 2.5 3

3 3.5 4

  不说废话,直接上代码:

# -*- coding: utf-8 -*-  

"""  

异想家二维插值算法。  

"""  

import matplotlib  

import matplotlib.pyplot as plt  

import numpy as np  

from numpy import *  

  

  

# 一维插值  

def yiweichazhi(inputmat):  

    i = 0  

    for _ in inputmat:  

        inputmat[i] = inputmat[0] + (inputmat[-1] - inputmat[0]) * i / (len(inputmat) - 1)  

        i = i + 1  

    return inputmat  

  

  

# 画伪彩色图  

def 伪彩色图(zz):  

    Row = zz.shape[0]  

    Col = zz.shape[1]  

    xx, yy = np.meshgrid(np.linspace(0, 10, Col), np.linspace(0, 10, Row))  # 图像xy范围和插值  

    cmap = matplotlib.cm.jet  # 指定colormap  

    plt.imshow(zz, origin='lower', extent=[xx.min(), xx.max(), yy.min(), yy.max()], cmap=cmap)  # 伪彩色图  

    plt.show()  

  

  

# 由角4点扩展为插值大矩阵  

def 异想家插值(a):  

    # 扩张矩阵 10x10  

    pointRow = 100  # 插值点数-行  

    pointCol = 100  # 插值点数-行  

    aa = np.zeros([pointRow, pointCol], dtype=float)  

    # 四周点直接赋值  

    aa[0][0] = a[0][0]  

    aa[0][-1] = a[0][1]  

    aa[-1][0] = a[1][0]  

    aa[-1][-1] = a[1][1]  

    # 四周先插值  

    aa[0] = yiweichazhi(aa[0])  

    aa[-1] = yiweichazhi(aa[-1])  

    aa[:, 0] = yiweichazhi(aa[:, 0])  

    aa[:, -1] = yiweichazhi(aa[:, -1])  

    # 全部插值  

    for i in range(len(aa)):  

        aa[i] = yiweichazhi(aa[i])  

        i = i + 1  

    return aa  

  

  

# 未插值前4点矩阵  

a = np.array([  

    [1, 2],  

    [3, 4]  

], dtype=float)  

  

aa = 异想家插值(a)  

  

# 打印aa  

print(aa, "\n")  

# 画图  

伪彩色图(aa)