Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ----------------------------------------------------------------------------------------------------------
- // Aufgabe 5:
- // Beginnend mit dem Mittelwert die Frequenzen schrittweise in ein Ausgabebild kopieren
- // und in den Originalraum transformieren.
- // Die Bilder im Originalraum werden dann zu einem AVI-Film zusammengestellt.
- // ----------------------------------------------------------------------------------------------------------
- try {
- AviWrite avi((Bildname+"_frequenzanalyse.avi").c_str(),width,height,5); // AVI-Objekt oeffnen
- Img<complex<double> > fft_img_inc(width,height); // FFT-transformiertes Bild, dem schrittweise die Frequenzkoeffizienten zugewiesen werden
- Img<complex<double> > src_img_i; // Rücktransformiertes complex-Originalbild
- Img<RGB_Pixel> rgb_src_img_i(width,height); // Rücktransformiertes rgb-Originalbild
- fft_img_inc = complex<double>(0,0); // Alle Pixel zu 0 setzen
- rgb_src_img_i = RGB_Pixel(255,255,255); // Alle Pixel zu weiss setzen
- fft_img.Margin_Cyclic(); // Randbehandlung einstellen
- fft_img_inc.Margin_Cyclic(); // Randbehandlung einstellen
- rgb_src_img_i.Margin_Cyclic(); // Randbehandlung einstellen
- // Mittelwert rücktransformieren
- fft_img_inc[0][0] = fft_img[0][0]; // Koefizient 0,0 (Mittelwert) kopieren
- src_img_i = iFFT_2D(fft_img_inc); // Bild vom FFT-Raum in den Originalraum zuruecktransformieren
- // complex-Bild in Grauwertbild in RGB-Darstellung konvertieren
- for (unsigned int y = 0; y < height; y++) {
- for (unsigned int x = 0; x < width; x++) {
- unsigned char val = 256 * src_img_i[y][x].real();
- if (val < 0) {
- val = 0;
- }
- if (val > 255) {
- val = 255;
- }
- rgb_src_img_i[y][x] = RGB_Pixel(val, val, val);
- }
- }
- // Bild in AVI-Datei einschreiben
- avi << rgb_src_img_i;
- // Frequenzkoeffizienten schrittweise umkopieren und Teil-FFT-Bild ruecktransformieren
- for (int f = 1; f <= width >> 1; f++) {
- cout << "i" << flush;
- // Quadratische Schicht um 0,0 mit Abstand f aus fft_img in fft_img_inc umkopieren,
- // dann inverse Fouriertransformation vornehmen.
- // -------------------------------------------------------------------------------
- // Parameter: fft_img - Fouriertransformiertes Bild in Zeilen und Spalten
- // Hilfsbild: fft_img_inc - Fouriertransformiertes Bild mit einem Teil der Koeffizienten
- // Ergebnis: src_img_i - Rücktransformiertes Bild eines Teils der Koeffizienten
- // ==== Ihr Code ==== //
- for (int y = -f; y <= f; y++){
- for (int x = -f; x <= f; x++){
- fft_img_inc[y][x] = fft_img[y][x];
- }
- }
- src_img_i = iFFT_2D(fft_img_inc);
- // ===============================================================================
- // complex-Bild src_img_i im Originalraum in Grauwertbild in RGB-Darstellung konvertieren
- for (unsigned int y=0; y<height; y++) {
- for (unsigned int x=0; x<width; x++) {
- int val = 256.0*src_img_i[y][x].real();
- if (val<0) { val = 0; }
- if (val>255) { val = 255; }
- rgb_src_img_i[y][x] = RGB_Pixel(val,val,val);
- }
- }
- // Bild in AVI-Datei einschreiben
- avi << rgb_src_img_i;
- }
- }
- catch (char const* message) {
- cerr << message << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement