🐈
ある格子状のデータをリサイズしたい
例えば、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