如何判断曲线的光滑程度
(2009-02-02 01:30:43)
标签:
杂谈 |
分类: 技术文章 |
判断曲线的光滑程度(smoothness of curve),
可以对曲线进行频谱分析,如果高频成分非零,则不光滑,
如果只有低频成分,则比较光滑。
频谱分析可以采用FFT,DCT等变换。
AW: [Insight-users] How to measure the smoothness of one curve?
Luis Ibanez
luis.ibanez at kitware.com
Wed Jun 16 01:09:20 EDT 2004
- Previous message: AW: [Insight-users] How to measure the smoothness of one curve?
- Next message: AW: AW: [Insight-users] How to measure the smoothness of one curve?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Jiang, 1) The concept of the Spectrum of a curve goes back to Ptolomey (150 C.E.) when he attempted to explain the retrograde movement of the planets with the hypotesis that they follow circular orbits whose center is, in its turn, following another circular movement. http://www.phys.unt.edu/Astronomy/online_course_files/sample_pages/04_1.html The main orbit was called a "Deferent" and the traveling orbit was called an "Epicycle". Unfortunately this approach couldn't completely account for the observer motion of planets like mars. If was then suggested that an additional small epicycle should be added to the existing one in order to account for the apparent perturbations. At the time Greek philosophers believed strongly in pure geometrical forms, along with the human centered notion of the perfection of celestial objects. As a consequence the notion of an elliptical motion was out of question as a posibility for describing the orbit of a planet. Ellipses were introduced by Kepler for describing planetary motion in 1609. For Ptolomey, of course this didn't took yet the form of the Spectrum of a curve, maybe just because Fourier was not to be born until 1768 :-) However, in theory, the notion of decomposing a complex movement into a series of simple circular periodical movements is equivalent to the decomposition of the parametric coordinates of a curve into a Fourier series. When you take a curve and parameterize it with a parameter "t" (e.g. the curvelength), then you can express the coordinates of a point in the curve in terms of three funcitons X(t), Y(t) and Z(t). In that way, for every "t" you get coordinates (x,y,z). If now you take the three functions and expand them in Fourier series you get something like X(t) = Sum( Fx(v) * exp( -i * v * t ) ) where exp( i * k ) = cos(k) + i * sin(k) The values of Fx(v) are the "Fourier spectrum" of the curve X(t). If the curve is "smooth" that means that it lacks rapid variations which are typically associated with high frequencies. In other words the function Fx(v) will have high values for low values of v (the frequency) and it will have low values for high values of v ( high frequencies). You may want to consult any book on signal processing in order to get familiar with spectral analysis. 2) If your curve is represented as "1" pixels in an image it should be straight forward to generate a ChainCode path for it. You simply select a starting pixels, and from it you visit the immediate neighbors. The direction in which you encounter a neighbor at "1", gets entered in to the chain. This is a classical representation of contours in image processing, you will find details on introductory books such as Rozenfeld, or even in Graphics Gems. 3) What you want from the FourierSeriesPath is not the results of the Evaluate() function but the internal coefficients of the Series. In other words, what you want is the Fourier Decomposition of the signal, not using the Fourier series as an interpolator, which is what the Evaluate() method does. Note that for computing the decomposition you could use the FFT classes in VNL. For evaluating the Bias of the Fourier spectrum you can use any measure that differentiates between a high content of low frequencies and a low content of low frequencies. You probably want to get more familiar with spectral analysis. Here are some links you may find useful: http://mathworld.wolfram.com/FourierSeries.html Here are sites with interactive Java applets http://www.jhu.edu/~signals/fourier2/ http://www.digital-school.com/English/Mathematics/Fourier_Series/Fourier_Series.htm That will give you a feeling on how the frequency content relates to smoothness in the curve. Regards, Luis --------------- Jiang wrote: > Hi Luis, > Thank you very much for your answer. I have checked the documentation > about FourierSeriesPath and related classes in Doxygen html document, > and some test codes in InsightToolkit-1.4.0/Testing/Code/Common > itkFourierSeriesPathTest.cxx > InsightToolkit-1.4.0/Testing/Code/BasicFilters > itkChainCodeToFourierSeriesPathFilterTest.cxx > > Now I have some questions. I hope you can help me and give me some > hints. > > 1. I have no idea about curve's spectrum in the Fourier domain. Could > you introduce me some literatures about it? Why can it reveal the > smoothness of the curve? > > 2. I checked the code of itkChainCodeToFourierSeriesPathFilterTest.cxx > and found that this example gets the FourierSeriesPath by inputting > vertices to itk::PolyLineParametricPath, then using > itk::PathToChainCodePathFilter and ChainCodeToFourierSeries > convert the chain of vertices to FourierSeriesPath. In my case, the > curve is presented by one image. This image is binary value image. For > example, pixel with "1" means that it is one point of the curve. Pixel > with "0" means that it is not the point of the curve. How can I convert > this curve to FourierSeriesPath? I think the example of > itkChainCodeToFourierSerPathFilter to iesPathFilterTest.cxx is not so convenient to my > case. > > 3. In the example of itkFourierSeriesPathTest.cxx, it computes:" > Evaluating at 0, 0.5, and 1.0:" path->Evaluate();" Evaluating to an > index at 0, 0.5, and 1.0:" path->EvaluateToIndex(); and" Evaluating the > derivative at 0, 0.5, and 1.0:" path->EvaluateDerivative(). I want to > know which one is used for computing the bias of Fourier Spectrum as you > said? > > Many thanks to you again! > > > Jiang > -----Ursprüngliche Nachricht----- > Von: Luis Ibanez [mailto:luis.ibanez at kitware.com] > Gesendet: Mittwoch, 2. Juni 2004 02:34 > An: Jiang > Cc: ITK > Betreff: Re: [Insight-users] How to measure the smoothness of one curve? > > > Hi Jiang, > > > An elegant way of characterizing the smoothness of a > curve is to analyze its spectrum in the Fourier domain. > > > To that end you could use the class: > > itkFourierSeriesPath > http://www.itk.org/Insight/Doxygen/html/classitk_1_1FourierSeriesPath.ht > ml > > > and in order to convert your current curve into an > itkFourierSeriesPath, you can use the class > ChainCodeToFourierSeriesPathFilter > http://www.itk.org/Insight/Doxygen/html/classitk_1_1ChainCodeToFourierSe > riesPathFilter.html > > > A smoothed curve will have High values for the Fourier > coefficients corresponding to low frequencies and Low > values for the high frequency coefficients. > > > You probably want to compute some generic index such > as the bias of the Fourier spectrum in order to indicate > whether the curve contains a majority of high frequencies > or low frequencies. > > > This class is designed for working with curves in > N-Dimensional space. > > > Regards, > > > > Luis > > > > _______________________________________________ > Insight-users mailing list > Insight-users at itk.org > http://www.itk.org/mailman/listinfo/insight-users >
前一篇:家里的古锁
后一篇:LPC分析阶数的要求