🐈

ある格子状のデータをリサイズしたい

2021/06/08に公開

例えば、1ピクセルあたり0.038mmの格子状に記述された高さデータがあるとします。
これを0.1mmの格子状にしたいときにどうすればいいのか、ググっても便利なライブラリが見つからなかったので、書きました。

まずは、ベースデータの総点数から、リサイズ後の総点数へ変換し、加重平均を取るイメージです。2Dの場合は、縦横順番に実施すればOK。

たまたま、i*scaleが整数になってしまった場合は、動かない場合があります。
その場合は、最終点のみ例外処理を入れればいいですが、ほとんど想定されないので、一旦このままです。

import numpy as np

base = np.linspace(0,100,101)
base_px = 0.038 # mm 
after_px = 0.1 # mm
scale = after_px / base_px

after_array_len = int(len(base) // scale)
after_array = []

for i in range(after_array_len):
    int_i = int(i*scale) # 整数部
    dec_i = i*scale - int_i # 小数部
    after_array.append(base[int_i]*dec_i + base[int_i + 1]*(1 - dec_i)) # 加重平均

x_base = np.arange(len(base)) # 図示用
x_after = np.arange(len(after_array)) # 図示用

plt.scatter(x_base, base, label="base")
plt.scatter(x_after, after_array, label="after")
plt.legend()

Discussion