计算沿圆形路径的图像像素总和
Compute sum of image pixels along a circular path
我有一张图像,我试图计算沿圆形路径的线积分(总和)。我的想法是:
- 计算循环路径求和
- 根据路径遮罩图像,除了与路径重合的像素之外的所有内容都被清零。
- 对所有图像像素求和
我目前卡在第一步和第二步之间,不知道如何在与图像相同的网格上生成一个圆。
在代码中:
from scipy.stats import multivariate_normal
radius = 2
# Draw arbitrary image
x, y = np.mgrid[-5:5:.1, -5:5:.1]
img = multivariate_normal.pdf(np.dstack((x, y)), cov=[[1, 0.7], [0.7, 1]])
# generate circle with desired radius
circle = radius*np.exp(1j*np.linspace(-np.pi, np.pi, 100))
pyplot.pcolormesh(x, y, img)
pyplot.plot(np.real(circle), np.imag(circle), '-w')
pyplot.show()
给出:
问题:
如何用圆圈遮盖与该圆圈重合的图像像素?
这是计算积分的另一种方法:它使用插值法,使图像成为在矩形上定义的函数,然后使用标准积分求解器计算路径积分。
from scipy.integrate import quad
from scipy.interpolate import RectBivariateSpline
from scipy.stats import multivariate_normal
import numpy as np
x, y = np.ogrid[-5:5:.1, -5:5:.1]
img = multivariate_normal.pdf(np.dstack(np.broadcast_arrays(x, y)),
cov=[[1, 0.7], [0.7, 1]])
f = RectBivariateSpline(x.ravel(), y.ravel(), img)
radius, centerx, centery = 3.0, 1.0, -1.5
def integrand(rad):
return f(centerx+radius*np.cos(rad), centery+radius*np.sin(rad))
def true_integrand(rad):
return multivariate_normal(cov=[[1, 0.7], [0.7, 1]]).pdf(
(centerx+radius*np.cos(rad), centery+radius*np.sin(rad)))
print(quad(integrand, -np.pi, np.pi))
print(quad(true_integrand, -np.pi, np.pi))
输出:
(0.07985467350026378, 1.3411796499850778e-08)
(0.07985453947958436, 4.006916325573184e-11)
我有一张图像,我试图计算沿圆形路径的线积分(总和)。我的想法是:
- 计算循环路径求和
- 根据路径遮罩图像,除了与路径重合的像素之外的所有内容都被清零。
- 对所有图像像素求和
我目前卡在第一步和第二步之间,不知道如何在与图像相同的网格上生成一个圆。
在代码中:
from scipy.stats import multivariate_normal
radius = 2
# Draw arbitrary image
x, y = np.mgrid[-5:5:.1, -5:5:.1]
img = multivariate_normal.pdf(np.dstack((x, y)), cov=[[1, 0.7], [0.7, 1]])
# generate circle with desired radius
circle = radius*np.exp(1j*np.linspace(-np.pi, np.pi, 100))
pyplot.pcolormesh(x, y, img)
pyplot.plot(np.real(circle), np.imag(circle), '-w')
pyplot.show()
给出:
问题:
如何用圆圈遮盖与该圆圈重合的图像像素?
这是计算积分的另一种方法:它使用插值法,使图像成为在矩形上定义的函数,然后使用标准积分求解器计算路径积分。
from scipy.integrate import quad
from scipy.interpolate import RectBivariateSpline
from scipy.stats import multivariate_normal
import numpy as np
x, y = np.ogrid[-5:5:.1, -5:5:.1]
img = multivariate_normal.pdf(np.dstack(np.broadcast_arrays(x, y)),
cov=[[1, 0.7], [0.7, 1]])
f = RectBivariateSpline(x.ravel(), y.ravel(), img)
radius, centerx, centery = 3.0, 1.0, -1.5
def integrand(rad):
return f(centerx+radius*np.cos(rad), centery+radius*np.sin(rad))
def true_integrand(rad):
return multivariate_normal(cov=[[1, 0.7], [0.7, 1]]).pdf(
(centerx+radius*np.cos(rad), centery+radius*np.sin(rad)))
print(quad(integrand, -np.pi, np.pi))
print(quad(true_integrand, -np.pi, np.pi))
输出:
(0.07985467350026378, 1.3411796499850778e-08)
(0.07985453947958436, 4.006916325573184e-11)