打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
几行代码转换图像为方程

经常可以看见有一些少年们拿着GrafEq和几何画板去不停地靠试错来用一个方程模拟想要的图像,像这样:


虽然我觉得试错没什么技术含量,但是我也没有想到什么好的方法来批量地制造这种方程。今天在我搜索“二元Lagrange插值”的时候,才发现StackExchange上早就有大神解决了这个问题。
故事的起源是这样的。有人发现Wolfram|Alpha中有一组“人形曲线”,神似而且有解析式:一组三角函数的加和。于是此人发到StackExchange上提问。

一例人形曲线(Dirac):

 

于是,一位大神就用Fourier变换完成了任务。
先把Mathematica代码贴出来:

param[x_, m_, t_] :=
Module[{f, n = Length[x], nf},
f = Chop[Fourier[x]][[;; Ceiling[Length[x]/2]]];
nf = Length[f];
Total[Rationalize[
2 Abs[f]/Sqrt[n] Sin[
Pi/2 - Arg[f] + 2. Pi Range[0, nf - 1] t], .01][[;;
Min[m, nf]]]]]
tocurve[Line[data_], m_, t_] := param[#, m, t] & /@ Transpose[data]
img = Import["file"];
img = Binarize[img~ColorConvert~"Grayscale"~ImageResize~320~Blur~3]~
Blur~3;
lines = Cases[
Normal@ ListContourPlot[Reverse@ ImageData[img],
Contours -> {0.5}], _Line, -1];
ParametricPlot[Evaluate[tocurve[#, 30, t] & /@ lines],{t,0,1}]

请自行将file换成待处理的文件地址;320是图片大小,3控制圆滑程度。效果是这样的:

具体的过程是先把图片转换成轮廓,打成一堆点,再进行Fourier变换。十分有趣。

注:exp618原创

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python如何优雅地可视化目标检测框
如何将深度学习研究论文实现为代码
泰勒展式!学长眼中的泰勒展式~
把双曲线问题和圆的问题结合起来,是一种什么体验,2022高考数学
php验证码函数代码
初中数学,用好反比例函数图像上点的坐标特征,轻松解答压轴题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服