You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SVG图像转换为Luxor/Javis路径并实现傅里叶变换绘图

把光栅图转矢量路径并通过傅里叶变换绘制的步骤

你提供的是PNG光栅图像,需要先转成矢量路径,再处理成pathtopoly()可用的数据,最后做傅里叶变换绘制,具体步骤如下:

1. 光栅图转SVG矢量路径

  • 用Inkscape处理:导入PNG文件,点击「路径>从位图跟踪」,调整阈值、平滑度等参数生成矢量路径,导出为SVG后,提取文件中<path>标签的d属性值(这就是路径数据)。
  • 在线工具处理:用基于Potrace的在线转换器,上传PNG生成SVG路径,直接复制路径的d属性内容。

2. 转成pathtopoly()兼容的顶点数据

pathtopoly()需要连续的(x,y)顶点序列,可通过代码解析SVG路径:

from svgpathtools import parse_path

# 替换为你拿到的SVG路径d属性内容
svg_path_data = "Mxxx,xxx Lxxx,xxx ..."
path = parse_path(svg_path_data)

# 采样路径生成顶点(num_points控制精度,值越高越精细)
num_sample_points = 1000
vertex_list = []
for idx in range(num_sample_points):
    t = idx / (num_sample_points - 1)
    point = path.point(t)
    vertex_list.append((point.real, point.imag))

# vertex_list就是pathtopoly()可用的多边形顶点数据

3. 傅里叶变换绘制图像

基于顶点数据做傅里叶变换重构曲线:

import numpy as np

# 将顶点转为复数数组(x为实部,y为虚部)
complex_curve = np.array([x + y * 1j for x, y in vertex_list])
# 计算离散傅里叶变换
fft_coefficients = np.fft.fft(complex_curve)

# 截断系数控制绘制精度(保留前N个和后N个系数)
keep_num = 50
truncated_coeffs = np.zeros_like(fft_coefficients)
truncated_coeffs[:keep_num] = fft_coefficients[:keep_num]
truncated_coeffs[-keep_num+1:] = fft_coefficients[-keep_num+1:]

# 逆变换重构曲线
reconstructed_curve = np.fft.ifft(truncated_coeffs)
# 提取坐标用于绘制
x_recon = reconstructed_curve.real
y_recon = reconstructed_curve.imag

内容的提问来源于stack exchange,提问作者BuddhiLW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:53:19