用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)