当サイトには広告・プロモーションが含まれています。

動径方向の平均プロファイル

この記事で分かること
  • pythonで「動径方向の平均プロファイル」を実装したい人に向けた記事です。
  • 平均を計算して滑らかなプロファイルを計算します。
  • コードだけ載せます。
目次

コード

import numpy as np
import matplotlib.pyplot as plt

# 関数定義
def mean_radial_profile(arr, center, r_max):
    y, x = np.indices((arr.shape))
    r = np.sqrt((x -center[0])**2+ (y -center[1])**2)

    mean_1D = []
    for i in range (r_max):
        w = 1 -np.abs(r -i)
        ww, dd= w[0<=w], arr[0<=w]
        mean_1D.append(np.sum(dd*ww)/np.sum(ww))

    mean_2D = np. zeros_like(r)
    for i in range(r_max):
        w = 1 -np.abs(r -i)
        mean_2D += np.where(0<=w, mean_1D[i] *w, 0)

    return mean_1D,mean_2D

# デモデータ
s0,s1 = 30,30
arr = np.random.rand(s0,s1)
mean_1D,mean_2D = mean_radial_profile(arr, (s0/2,s1/2), 150)

# 表示
fig = plt.figure( tight_layout=True)
ax1 = plt.subplot(212)
ax1.margins(0.05) 
ax1.plot(mean_1D)
ax1.set_title('mean profile')

ax2 = plt.subplot(221)
ax2.margins(2, 2)
ax2.imshow(arr)
ax2.set_title('original img')

ax3 = plt.subplot(222)
ax3.margins(x=0, y=-0.25)
ax3.imshow(mean_2D)
ax3.set_title('mean img')

plt.show()

使い方

距離の少数点以下を平均で計算することで、滑らかな動径方向のプロファイルを求めます。

mean_1D,mean_2D = mean_radial_profile(arr, (s0/2,s1/2), 150)

引数1・・・平均プロファイルを求める2D array

引数2・・・中心点の座標をリストで渡します。特に無ければ2D arrayのサイズの半分に。

引数3・・・どの大きさまで計算するか決めます。2D arrayのサイズより適当に大きい値を指定してもよいです。

返り値は、1Dと2Dの平均を返します。
下記画像のとおりmean_1Dは平均動径プロファイルで、mean_2Dはmean_1Dをぐるっと一周広げたものです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次