Zweidimensionale DFT < Fourier-Transformati < Transformationen < Analysis < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 19:13 So 17.06.2012 | Autor: | kaju35 |
Hallo,
ich bin nicht sicher, ob mein Anliegen hier hin gehört.
Es betrifft nämlich neben der Mathematik auch die Informatik.
Ausgangssituation : Ich möchte Effekte in C++ entwerfen,
die ich dann auf Bilder anwenden kann. Ich weiss, dass
die zweidimensionale DFT dazu geeignet ist.
Ansatz : Mein (naiver) C++ - Algorithmus implementiert nun
die zweidimensionale Fourier-Transformierte.
void DFT()
{
int i, j, k, l;
Complex exi, exj, sumi, sumj;
for (k = 0; k < N; k++)
for (l = 0; l < N; l++)
{
sumi = COMPLEX_NULL;
for (i = 0; i < N; i++)
{
exi = exp(Complex(0.0, -2.0 * PI * (double)i * (double) k / (double)N));
sumj = COMPLEX_NULL;
for (j = 0; j < N; j++)
{
exj = exp(Complex(0.0, -2.0 * PI * (double) j * (double) l / (double)N));
sumj = sumj + exj * z[i][j];
}
sumi = sumi + exi * sumj;
}
z2[k][l] = sumi / Complex((double)sqr(N), 0.0);
}
}
Problem : Ich habe das Bild eines Dreieckes transformiert, um den Algorithmus
zu testen und statt eines sechsstrahligen Sternes (wie in Wikipedia zu sehen)
habe ich ein Rautenmuster erhalten. Jetzt sollte man meinen, dass so ein
kurzer Quellcode an sich richtig ist. Ich finde jedenfalls keine mathematische
Fehlerursache. In der Klasse der komplexen Zahlen finde ich ebenfalls
keine Unstimmigkeit.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Vielen Dank im Voraus für die Bearbeitung.
Okay, ich habe die Lösung.
Nach stundenlangem Ausschließen möglicher Fehlerquellen bin ich schließlich
zu dem Ergebnis gekommen, dass es heissen muss :
struct color
{
unsigned char red, green, blue;
} col;
und nicht etwa :
struct color
{
char red, green, blue;
} col;
Ich hatte nicht bedacht, dass das "char"- Datenformat per definitionem
vorzeichenbehaftet ist
Na, da soll mal einer drauf kommen...
Also an Alle, die selbst eine Fourier-Transformation zum Zweck der
Bildbearbeitung programmieren wollen. Manchmal steckt der Teufel
im Details. Und das "Byte" entspricht dem "unsigned char".
Grüße
Kai
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:55 Mi 20.06.2012 | Autor: | kaju35 |
Okay, ich habe die Lösung.
Nach stundenlangem Ausschließen möglicher Fehlerquellen bin ich schließlich zu dem Ergebnis gekommen, dass es heissen muss :
struct color
{
unsigned char red, green, blue;
} col;
und nicht etwa :
struct color
{
char red, green, blue;
} col;
Ich hatte nicht bedacht, dass das "char"- Datenformat per definitionem
vorzeichenbehaftet ist
Na, da soll mal einer drauf kommen...
Also an Alle, die selbst eine Fourier-Transformation zum Zweck der
Bildbearbeitung programmieren wollen. Manchmal steckt der Teufel
im Details. Und das "Byte" entspricht dem "unsigned char".
Grüße
Kai
|
|
|
|