角度によってリングの強さがどのように変化するかを調べています。画像の例を次に示します。
私がやりたいのは、そのドーナツの中心から値の円を取り、それらを角度に対してプロットすることです。私が現在行っているのは、scipy.ndimage.interpolation.rotateを使用して、リングを放射状にスライスし、2つのピークの最大値を抽出して、それらと角度をプロットすることです。
crop = np.ones((width,width)) #this is my image
slices = np.arange(0,width,1)
stack = np.zeros((2*width,len(slices)))
angles = np.linspace(0,2*np.pi,len(crop2))
for j in range(len(slices2)): # take slices
stack[:,j] = rotate(crop,slices[j],reshape=False)[:,width]
しかし、これは私が実際に探していることをしているとは思いません。私は主に、必要なデータを抽出する方法に苦労しています。私もこのようなマスクを適用してみました。
画像に追加しますが、そのマスク内の値を正しい順序で(つまり、角度0〜2piの昇順で)取得する方法がわかりません。
他のアイデアは大いに役立ちます!
正確さを検証するために、別の入力画像を作成しました。
import numpy as np
import scipy as sp
import scipy.interpolate
import matplotlib.pyplot as plt
# Mock up an image.
W = 100
x = np.arange(W)
y = np.arange(W)
xx,yy = np.meshgrid(x,y)
image = xx//5*5 + yy//5*5
image = image / np.max(image) # scale into [0,1]
plt.imshow(image, interpolation='nearest', cmap='gray')
plt.show()
画像内の円形パスから値をサンプリングするには、任意の場所にアクセスするため、最初に補間器を作成します。また、より高速になるようにベクトル化します。
次に、N
円のパラメトリック定義を使用して、円の円周上の点の座標を生成しx(t) = sin(t), y(t) = cos(t)
ます。
N
円周の少なくとも2倍である必要があります(ナイキスト-シャノンサンプリング定理)。
interp = sp.interpolate.interp2d(x, y, image)
vinterp = np.vectorize(interp)
for r in (15, 30, 45): # radii for circles around image's center
xcenter = len(x)/2
ycenter = len(y)/2
arclen = 2*np.pi*r
angle = np.linspace(0, 2*np.pi, arclen*2, endpoint=False)
value = vinterp(xcenter + r*np.sin(angle),
ycenter + r*np.cos(angle))
plt.plot(angle, value, label='r={}'.format(r))
plt.legend()
plt.show()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加