gpt4 book ai didi

python - Mathematica 到 Python/C 代码

转载 作者:行者123 更新时间:2023-11-30 15:52:26 26 4
gpt4 key购买 nike

我试图理解 Mathematica 中的一些代码,但不熟悉它的语法。我似乎无法理解这里的逻辑。

anamorph3[img_, angle_: 270 Degree, imgWidth_: 512] :=
Module[{data, f, matrix, dim, rOuter, rInner = 1.},
dim = ImageDimensions[img];
rOuter = rInner (1 + angle #2/#1 & @@ dim);
data = Table[
ListInterpolation[#[[All, All, i]],
{{rOuter, rInner}, {-angle/2, angle/2}}], {i, 3}] &@ImageData[img];
f[i_, j_] := If[Abs[j] <= angle/2 && rInner <= i <= rOuter,
Through[data[i, j]], {1., 1., 1.}];
Image@Table[f[Sqrt[i^2 + j^2], ArcTan[i, -j]],
{i, -rOuter, rOuter, 2 rOuter/(imgWidth - 1)},
{j, -rOuter, rOuter, 2 rOuter/(imgWidth - 1)}]]

有关此代码的更多详细信息可以在此处找到

How to make ImageTransformation produce an anamorphic version of image .

如果有人可以为此编写伪代码/Python 代码,那就太好了。

最佳答案

我想最终会是这样的:

def anamorph3(img, angle = math.radians(270), imgWidth = 512):
rInner = 1.
dim = ImageDimensions(img)
rOuter = rInner * (1 + angle * dim[2]/dim[1])
data = list()
for i in range(3):
channelData = [[x[i] for x in v] for v in ImageData(img)]
data.append(ListInterpolate(channelData, [[rOuter, rInner],[-angle/2,angle/2]]))
def f(i, j):
if abs(j) <= angle/2 && rInner <= i <= rOuter:
l = list()
for fun in data:
l.append(fun(i, j))
return l
else:
return [1, 1, 1]
newImageData = list()
for i in range(-rOuter, rOuter, 2*rOuter/(imgWidth-1)):
l = list()
for j in range(-rOuter, rOuter, 2*rOuter/(imgWidth-1)):
l.append(f(math.sqrt(i**2 + j**2), math.atan(i, -j)))
newImageData.append(l)
return Image(newImageData)

这里 ImageDimensions 返回图像的尺寸,ImageData 返回一个 3D 矩阵,其中每个像素的每个颜色 channel 的颜色数据标准化为 0-1 范围, ListInterpolate 创建一个在指定 x 和 y 坐标范围内的一组数字之间进行插值的函数。 Image 采用 3D 矩阵并将其转换为 RGB 图像。

关于python - Mathematica 到 Python/C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429984/

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