Giter Site home page Giter Site logo

Comments (3)

timmmGZ avatar timmmGZ commented on September 24, 2024

您好,我是一名深度学习爱好者,看了您的代码,对傅里叶画图非常有兴趣,这里有个问题希望能相您请教:
您所展示的,以及网上的例子,我看都是一笔画图,就是一笔把全部轮廓都画出来,这样会在画图过程中留下不必要的跳跃的线条。假设我要画一个人的轮廓,眼睛和鼻子,以及人的外部轮廓是不相连的,如果一笔画的话,那么两个眼睛之间、眼睛和鼻子之间,眼睛鼻子和外部轮廓之间就会留下连接的线条,这样画出来的图就不够美观了。
所以我想请教您,怎么可以自定义画笔的数量,比如我用四支笔,分别画两只眼睛、一个鼻子、一个外部轮廓,这样应该就没有多余的线条了,这个怎么实现?如果这样做的话,怎么从原始轮廓里面分割出眼睛和鼻子的路径?
我不清楚这个咋做,希望能得到您的回复

你好啊,我现在才看到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.

timmmGZ avatar timmmGZ commented on September 24, 2024

对了 关于同步画画的话,给多一个方案的思路:假如眼睛笔画的信号是6个采样点[w,f,x,k,e,t],眼珠笔画是[u,l],把眼珠信号scale到和眼睛一样的长度就行了,[u,u,u,l,l,l],这样也就方便了。那整幅画以信号最长的“一支笔”为基础,其它“笔”对应的信号都scale到和它一样的长度。

from fourier-drawing.

zcdliuwei avatar zcdliuwei commented on September 24, 2024

对了 关于同步画画的话,给多一个方案的思路:假如眼睛笔画的信号是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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.