This is the mail archive of the gsl-discuss@sources.redhat.com mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

revised version of wavelet transform


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

hi

(finally) here is the new version of the discrete wavelet transform.
i incorporated (most) of your comments. here are the details:

(1) i got rid of all gsl_vector and gsl_matrix stuff internally. the
    routines now use strided arrays.

(2) workspace is now allocated outside by separate calls and passed
    on to the dwt routines.
    gsl_wavelet_workspace_allocate()
    gsl_workspace_free()

(3) the api now now makes use of strided arrays.

(4) coefficients for the wavelet are now from the original
    publications. i give the same number of digits as in the
    constants defined in gsl_math.h. calculations have been performed
    in mathematica. (note: i have not yet found time to check
    beylkins and coiflets, i removed them for now).

(5) i changed the gsl_wavelet structure. now only pointer are
    assigned during initialization (is this the way you had in
    mind?).

additions / further changes

(1) i changed the gsl_wavelet structure in a way that biorthogonal
    wavelets can be implemented. these need two sets of filter
    coefficients (see bspline.c). for the orthogonal case (haar.c and
    daubechies.c) the second set just duplicates the first one.

(2) i clarified the problem i had with Th and Tv. according to an
    email exchange with paul addison it is due to a different
    convention of horizontal / vertical. this means that we both get
    identical results.

(3) test_1D and test_2D do some more extensive tests. still i do not
    know what errors / differences between original data and data
    that has been transformed forward and backward i should expect.
    the differences look ok to me.

(4) there are two different ways to perform the 2D transformation.
    naming conventions seem to differ. i found standart versus
    non-standart and rectangular versus square. in the standard case
    you do a complete 1D transformation on each row and then on each
    column. in the non-standart case you only do one step of the
    transform on both, rows and columns. you then continue on the
    submatrix that contains the "smoothing" in both directions (size
    N/2 by N/2). maybe you will have to look at the code to see what
    i mean. anyway i implemented both (_2D and _2Dns).


i did not change:

(1) i still include a api using gsl_vector for the 1D case. this is a
    duplication like in gsl_sort which provides both interfaces,
    array and vector.

(2) i kept the 2D case. i think it is essential because a major use
    of wavelets is denoising, especially images and the 2D transform
    is really simple.

(3) i also duplicated the api in the 2D case. it now includes both,
    strided arrays and gsl_matrix respectively. (i used size1, size2,
    tda in the 2D case to explicitly check for square matrices.


remaining question:
dwt.c line 238 ff (standart dwt)
you will realize that the if-then-else part strictly speaking is not
necessary. it is only here the do the "exact" backtransform, i.e.
columns and then rows. from a point of numerics, is there a rule / is
it known if this is better?

i hope this now betters suits gsl standarts. if you still feel unhappy about 
the vector and matrix api, do not hesit to remove them. the 2D case, however, 
looks essential to me (did you have something particular in mind, when you 
first rejected it?).
- -- 
Dr. Ivo Alxneit
Laboratory for Solar Technology   phone: +41 56 310 4092
CH-5232 Villigen                    fax: +41 56 310 2624
Paul Scherrer Institute          http://solar.web.psi.ch
Switzerland                        gnupg key: 0x515E30C7
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFAeZdOAd7CE1FeMMcRAmUlAJ4tKIBumPiQz1SAeMm6sVgzKLi2UgCfWSUO
OqSYF7+HoW0h8BPhK+P/1O8=
=hpvC
-----END PGP SIGNATURE-----

Attachment: gsl_wavelet.tar.gz
Description: application/tgz


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]