gpt4 book ai didi

python - 如何(快速)从二维图像的特定点提取双线性插值补丁?

转载 作者:行者123 更新时间:2023-12-01 08:24:02 25 4
gpt4 key购买 nike

Update: The original question formulation was a bit unclear. I am not just cropping the image but applying bilinear interpolation during the patches extraction process. (See the paper reference below). That's why the algorithm is a bit more involved than just taking slices.

<小时/>

我正在尝试训练深度学习模型来预测 this paper 之后的面部标志。我需要将包含面部的图像部分裁剪成面部标志周围的较小块。例如,如果我们有如下所示的图像:

enter image description here

该函数应生成 N=15 个“补丁”,每个地标一个补丁:

enter image description here

我在 torch 张量之上构建了以下简单的实现:

def generate_patch(x, y, w, h, image):
c = image.size(0)
patch = torch.zeros((c, h, w), dtype=image.dtype)
for q in range(h):
for p in range(w):
yq = y + q - (h - 1)/2
xp = x + p - (w - 1)/2
xd = 1 - (xp - math.floor(xp))
xu = 1 - (math.ceil(xp) - xp)
yd = 1 - (yq - math.floor(yq))
yu = 1 - (math.ceil(yq) - yq)
for idx in range(c):
patch[idx, q, p] = (
image[idx, math.floor(yq), math.floor(xp)]*yd*xd +
image[idx, math.floor(yq), math.ceil(xp)]*yd*xu +
image[idx, math.ceil(yq), math.floor(xp)]*yu*xd +
image[idx, math.ceil(yq), math.ceil(xp)]*yu*xu
).item()
return patch


def generate_patches(image, points, n=None, sz=31):
if n is None:
n = len(points)//2
patches = []
for i in range(n):
x_val, y_val = points[i], points[i + n]
patch = generate_patch(x_val, y_val, sz, sz, image)
patches.append(patch)
return patches

该代码可以完成其工作,但速度太慢。我想是因为所有这些 for 循环和单独的像素索引。我想向量化这段代码,或者也许找到一些基于 C 的实现可以更快地完成它。

我知道有extract_patches_2d sklearn 包中的函数有助于从图像中选择随机补丁。但是,我想从特定点中挑选补丁,而不是随机进行。我想我可以以某种方式调整上述函数,或者将上面显示的实现转换为 Cython/C 代码,但可能有人以前已经做过类似的事情。

您能否建议上面显示的代码的一些替代方案,或者关于如何使其更快的建议? (除了使用多个并行工作人员)。

最佳答案

1)使用numpy

2) 通过索引提取选择补丁。示例:

Patch=img[0:100,0:100]

3) 创建 3 维主体,其中 3 维是补丁。 [15x15x补丁数量]

4) 做你的双线性 int。使用 numpy 同时处理所有补丁(用一个像素计算第三维中的所有像素)。

这将提高你的处理能力超出你的想象

如果您不想等待工作完成而变老,请忘记数学模块。它在数据科学中没有地位。

关于python - 如何(快速)从二维图像的特定点提取双线性插值补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com