Python 中二维图像的非均匀采样

Nonuniform sampling for 2D image in Python

我有一个 2D 图像,可以在 Python 中表示为 Numpy 数组。我需要对这张图片进行下采样,使下采样更多地发生在侧面,而更少发生在中心。更具体地说,假设在中心以 2 的速率进行下采样,在边界以 4 的速率进行下采样,在其他点上以介于两者之间的速率(相对于到中心的距离)进行下采样。换句话说,我在下面的代码中寻找 nonUniformDownsample 函数:

img = cv2.imread("flower.jpg") 
img_focused = nonUniformDownsample(image=img, centerVal=2, borderVal=4)

我不确定我是否理解您的 question/goal,但正如评论所说 scipy.interpolate.griddata 应该有效。你可以使用这样的东西:

X,Y = np.meshgrid(np.linspace(-1,1,100), np.linspace(-1,1,100))
A = np.sin(9.5*pi*X) + np.sin(9.5*np.pi*Y)

此处 A 看起来像这样:

n = 50
X_, Y_ = np.meshgrid(np.linspace(-1,1,n), np.linspace(-1,1,n))
X_ = (3*X_**3 + X_) / 4
Y_ = (3*Y_**3 + Y_) / 4

x = np.dstack((X,Y)).reshape((100*100, 2))
xi = np.dstack((X_,Y_)).reshape((n*n, 2))
A_ = griddata(x, A.flat, xi, method='cubic')

A_ 看起来像这样: