Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从圆中获取数据_Python_Arrays_Slice_Analysis_Radial - Fatal编程技术网

在python中从圆中获取数据

在python中从圆中获取数据,python,arrays,slice,analysis,radial,Python,Arrays,Slice,Analysis,Radial,我正在研究圆环的强度如何随角度而变化。下面是一个图像示例: 我想做的是从甜甜圈的中心取一圈值,画出它们与角度的关系。我目前正在做的是使用scipy.ndimage.interpolation.rotate并通过环径向拍摄切片,提取两个峰值的最大值并绘制它们与角度的关系 crop = np.ones((width,width)) #this is my image slices = np.arange(0,width,1) stack = np.zeros((2*widt

我正在研究圆环的强度如何随角度而变化。下面是一个图像示例:

我想做的是从甜甜圈的中心取一圈值,画出它们与角度的关系。我目前正在做的是使用scipy.ndimage.interpolation.rotate并通过环径向拍摄切片,提取两个峰值的最大值并绘制它们与角度的关系

    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
应至少为周长的两倍(Nyquist–Shannon采样定理)


嗨,非常感谢您的回答。代码看起来很好,但是当我取出这行代码时,我得到了你这里的代码。image=image/np.amax(image)然后它看起来像往常一样工作!如果不是,我最终得到的原始图像是完全黑色的,除了右下角的一个白色正方形。我对scipy interp2d的工作原理有点困惑-我使用scipy.misc的imread函数导入了一个图像,所以我不知道如何将其分解为interp2d所需的x、y和z输入?啊,我编写了Python3代码,而您已经有了Python2.7,对吗?尝试
image=image*1.0/np.max(image)
。同时更改为
xcenter=0.5*len(x)
,等等。这是因为。来自
imread()
的图像是一个数组。尝试
h,w=image.shape;sp.interpolate.interp2d(np.arange(w),np.arange(h),image)
由于整数除法再次更正:
sp.interpolate.interp2d(np.arange(w*1.0),np.arange(h*1.0),image)
。也许不是。我不知道interp2d()是否能正确处理int数组。你的意思是“x和y必须输入1D数组”。
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()