Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2014
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. // ----------------------------------------------------------------------------------------------------------
  2. // Aufgabe 5:
  3. // Beginnend mit dem Mittelwert die Frequenzen schrittweise in ein Ausgabebild kopieren
  4. // und in den Originalraum transformieren.
  5. // Die Bilder im Originalraum werden dann zu einem AVI-Film zusammengestellt.
  6. // ----------------------------------------------------------------------------------------------------------
  7.  
  8. try {
  9. AviWrite avi((Bildname+"_frequenzanalyse.avi").c_str(),width,height,5); // AVI-Objekt oeffnen
  10. Img<complex<double> > fft_img_inc(width,height); // FFT-transformiertes Bild, dem schrittweise die Frequenzkoeffizienten zugewiesen werden
  11. Img<complex<double> > src_img_i; // Rücktransformiertes complex-Originalbild
  12. Img<RGB_Pixel> rgb_src_img_i(width,height); // Rücktransformiertes rgb-Originalbild
  13. fft_img_inc = complex<double>(0,0); // Alle Pixel zu 0 setzen
  14. rgb_src_img_i = RGB_Pixel(255,255,255); // Alle Pixel zu weiss setzen
  15. fft_img.Margin_Cyclic(); // Randbehandlung einstellen
  16. fft_img_inc.Margin_Cyclic(); // Randbehandlung einstellen
  17. rgb_src_img_i.Margin_Cyclic(); // Randbehandlung einstellen
  18.  
  19. // Mittelwert rücktransformieren
  20. fft_img_inc[0][0] = fft_img[0][0]; // Koefizient 0,0 (Mittelwert) kopieren
  21. src_img_i = iFFT_2D(fft_img_inc); // Bild vom FFT-Raum in den Originalraum zuruecktransformieren
  22. // complex-Bild in Grauwertbild in RGB-Darstellung konvertieren
  23. for (unsigned int y = 0; y < height; y++) {
  24. for (unsigned int x = 0; x < width; x++) {
  25. unsigned char val = 256 * src_img_i[y][x].real();
  26. if (val < 0) {
  27. val = 0;
  28. }
  29. if (val > 255) {
  30. val = 255;
  31. }
  32. rgb_src_img_i[y][x] = RGB_Pixel(val, val, val);
  33. }
  34. }
  35. // Bild in AVI-Datei einschreiben
  36. avi << rgb_src_img_i;
  37.  
  38. // Frequenzkoeffizienten schrittweise umkopieren und Teil-FFT-Bild ruecktransformieren
  39. for (int f = 1; f <= width >> 1; f++) {
  40. cout << "i" << flush;
  41. // Quadratische Schicht um 0,0 mit Abstand f aus fft_img in fft_img_inc umkopieren,
  42. // dann inverse Fouriertransformation vornehmen.
  43. // -------------------------------------------------------------------------------
  44. // Parameter: fft_img - Fouriertransformiertes Bild in Zeilen und Spalten
  45. // Hilfsbild: fft_img_inc - Fouriertransformiertes Bild mit einem Teil der Koeffizienten
  46. // Ergebnis: src_img_i - Rücktransformiertes Bild eines Teils der Koeffizienten
  47. // ==== Ihr Code ==== //
  48.  
  49. for (int y = -f; y <= f; y++){
  50. for (int x = -f; x <= f; x++){
  51. fft_img_inc[y][x] = fft_img[y][x];
  52. }
  53. }
  54. src_img_i = iFFT_2D(fft_img_inc);
  55.  
  56. // ===============================================================================
  57.  
  58. // complex-Bild src_img_i im Originalraum in Grauwertbild in RGB-Darstellung konvertieren
  59. for (unsigned int y=0; y<height; y++) {
  60. for (unsigned int x=0; x<width; x++) {
  61. int val = 256.0*src_img_i[y][x].real();
  62. if (val<0) { val = 0; }
  63. if (val>255) { val = 255; }
  64. rgb_src_img_i[y][x] = RGB_Pixel(val,val,val);
  65. }
  66. }
  67. // Bild in AVI-Datei einschreiben
  68. avi << rgb_src_img_i;
  69. }
  70. }
  71. catch (char const* message) {
  72. cerr << message << endl;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement