Comments (3)
您好,我是一名深度学习爱好者,看了您的代码,对傅里叶画图非常有兴趣,这里有个问题希望能相您请教:
您所展示的,以及网上的例子,我看都是一笔画图,就是一笔把全部轮廓都画出来,这样会在画图过程中留下不必要的跳跃的线条。假设我要画一个人的轮廓,眼睛和鼻子,以及人的外部轮廓是不相连的,如果一笔画的话,那么两个眼睛之间、眼睛和鼻子之间,眼睛鼻子和外部轮廓之间就会留下连接的线条,这样画出来的图就不够美观了。
所以我想请教您,怎么可以自定义画笔的数量,比如我用四支笔,分别画两只眼睛、一个鼻子、一个外部轮廓,这样应该就没有多余的线条了,这个怎么实现?如果这样做的话,怎么从原始轮廓里面分割出眼睛和鼻子的路径?
我不清楚这个咋做,希望能得到您的回复
你好啊,我现在才看到issue不好意思~
我也是考虑到这个美观原因,所以我的代码以“点”的形式来画图,不连接线条,因此画图采样点要多才显得顺滑 像线条。
如果你说画笔数量的话,假设你已经清楚傅里叶大致运作原理,思路是这样的:一个实数信号对应一个傅里叶转换的结果(模值和相位),常见的频谱图只为了观察各频率分量的幅值(模值除以采样频率,即圆圈的半径)所以忽略相位(相位即每个圆圈的初始角度)。而且一个信号是连续的一个整体,不管是以x轴(实数信号)为自变量还是xy轴(复数信号)同时为自变量都应该连续一笔画图,就好比y=x^2这个实数连续函数在x轴没有一段是断开的。因此,你想分开画n个东西的话,就分别将n个东西独立画出来(每个画出来的像素就是一个采样点)。而眼睛和眼珠也是是两个独立的信号,注意区分什么信号属于一个连续的整体。
最后,你想n幅画异步还是同步画出来都行。同步的话,每幅画都是同样的采样点数量的话 每个周期的time step数量就一样了,代码会好写点。不过眼珠和眼睛的采样数明显很难一致,所以要保持美观度的话 多数不能用同样采样数,那实现的思路就变成:眼睛每秒画10个点,眼珠每秒1.5个点之类的。
题外话:其实傅里叶转换一直都是间接接收复数信号,只不过实数[1,2,5,-31]是以[1+0i,2+0i,5+0i,-31+0i]的形式存在而已,所以实数信号对应的傅里叶画图其实就是笔尖一直在x轴来回移动。同时注意[1+1i,2+2i,3+3i,4+4i]和[4+4i,3+3i,2+2i,1+1i] 虽然都是一样的“两幅画”,但是却是两个不同的信号,因此画画时注意画笔顺序。
from fourier-drawing.
对了 关于同步画画的话,给多一个方案的思路:假如眼睛笔画的信号是6个采样点[w,f,x,k,e,t],眼珠笔画是[u,l],把眼珠信号scale到和眼睛一样的长度就行了,[u,u,u,l,l,l],这样也就方便了。那整幅画以信号最长的“一支笔”为基础,其它“笔”对应的信号都scale到和它一样的长度。
from fourier-drawing.
对了 关于同步画画的话,给多一个方案的思路:假如眼睛笔画的信号是6个采样点[w,f,x,k,e,t],眼珠笔画是[u,l],把眼珠信号scale到和眼睛一样的长度就行了,[u,u,u,l,l,l],这样也就方便了。那整幅画以信号最长的“一支笔”为基础,其它“笔”对应的信号都scale到和它一样的长度。
您好,非常感谢您的回复,非常有帮助。我解决多笔画问题的方法是:首先通过OpenCV的边缘检测等算法拿到原始PNG的若干个路径,然后对每个路径都单独计算傅里叶系数,然后挨个画出。
但现在我遇到了另一个更棘手的问题:我通过减少每一个路径的圆圈个数来简化路径,希望得到跟原图不一样、但仍然美观的结果。比如有一辆汽车,最外面的车身是一个大轮廓,然后里面车窗是一个相对较小的轮廓,我对两个路径分别计算傅里叶级数,假设大轮廓的圆圈个数n1 = 100,小轮廓的圆圈个数n2 = 50,在画图时,我将大路径和小路径的圆圈个数分别减少至50和30,希望得到的结果图像跟原始图像不同,但仍然是一辆汽车。原始图像的大路径和小路径,也就是车身大轮廓和车窗小轮廓,在原图上是不相交的,将圆圈个数减少至50和30时,两个路径可能变的相交了,这样就不美观了。
请问这个问题有办法解决吗,我一直没有找到思路,请指教,感谢!
from fourier-drawing.
Related Issues (1)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fourier-drawing.