WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FFT und inverse Faltung

 

Pheeenix
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2011, 12:00     Titel: FFT und inverse Faltung
  Antworten mit Zitat      
Hallo,
ich habe wiedermal eine Frage zur FFT bzw. inversen Faltung.

Ich habe folgenden Versuch gestartet:
Ein Graustufenbild(386x559) wird mit einer 5x5 Matrix gefaltet. Nun wandle ich das gefaltete Bild in den Frequenzbereich (mittels fft2). Im Frequenzraum führe ich eine inverse Faltung durch (mit der selben 5x5 Matrix).

Lasse ich mir die Bilder im Zeitbereich darstellen sieht es zwar wieder fast so aus wie das Original, allerdings lassen bei einer Vergrößerung des Bildes jedoch Artefakte erkennen --> das Bild wirkt pixeliger.
Ich hätte gerne gewusst wodurch ob jemand weiß wodurch diese Artefakte entstehen?

Ein weiters Problem ist mir aufgefallen. Sofern ich die Faltung des Bildes mit der 5x5 Martix mit dem Befehl conv2(Pic, PSF, 'same') durchführe und eine inverse Faltung des Ergebnisbildes im Frequenzbereich versuche wird das Bild unbrauchbar!?

Vielleicht kann mir hier jemand weiterhelfen.
(wer den Code Testen will --> das Bild befindet sich im Anhang)

Code:

Pic = double(imread('Spider_Grayscale.bmp', 'bmp'));  
figure; imshow(Pic); title('Pic');   %fig1
image(Pic);


%volle PSF normalisiert 5x5
PSF = [ 1.0/256.0  4.0/256.0  6.0/256.0  4.0/256.0 1.0/256.0;
        4.0/256.0 16.0/256.0 24.0/256.0 16.0/256.0 4.0/256.0;
        6.0/256.0 24.0/256.0 36.0/256.0 24.0/256.0 6.0/256.0;
        4.0/256.0 16.0/256.0 24.0/256.0 16.0/256.0 4.0/256.0;
        1.0/256.0  4.0/256.0  6.0/256.0  4.0/256.0 1.0/256.0 ];

% Faltung im Zeitbereich --> inverse Faltung im Frequenzbereich
% funktioniert dann nicht mehr?!?!
% BlurredPic = conv2(Pic, PSF, 'same');


%Faltung im Frequenzraum:
G = fft2(Pic);                          %Fourier Pic
[m,n] = size(G);
H = fft2(PSF,m,n);                   %Fourier PSF
fftpic = G .* H;                        %"Falte" das Bild

BlurredPic = ifft2(fftpic);             %bringe das ganze in den Zeitbereich
figure; imshow(BlurredPic); title('BlurredPic'); image(BlurredPic);


%%
%inverse filterung im fourierraum:
Gfft  = fft2(BlurredPic);                %bringe gestörtes Bild in f-Bereich
[a,s] = size(Gfft);
Hfft  = fft2(PSF,a,s);             %bringe PSF in den f-Bereich  
 
HnoNull = Hfft;
zero_elements1 = find(HnoNull == 0);
[a,s] = size (zero_elements1);
 
%ersetzte alle nullwerte mit werten nahe null um ifft2 ohne NAN Werte zu bekommen
for t=1:a
     HnoNull(zero_elements1(t,1))=0.00001;
     t=t+1;
end

InvFilt = Gfft ./ HnoNull;      
     
InvFilteredPic = ifft2(InvFilt);     %bringe das ganze in den Zeitbereich
figure; imshow(InvFilteredPic);image(InvFilteredPic);

 


Spider_Grayscale.zip
 Beschreibung:

Download
 Dateiname:  Spider_Grayscale.zip
 Dateigröße:  89.61 KB
 Heruntergeladen:  591 mal
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 25.01.2011, 17:23     Titel:
  Antworten mit Zitat      
Moin Pheeenix,

ich habe Deinen Vorgang einmal nachvollzogen und festgestellt, dass die Artefakte mit einem weicheren Filterkern verschwinden - also liegt die Ursache im Filterkern, den ich auch etwas umständlich und daher auch unübersichtlich finde. Das betrifft aber nur die Schreibweise, nicht den Inhalt.
Der Kern ist ja eine reine Gauss-Funktion. Es könnte noch was bringen, Deinen Kern zu vergrößern und für weichere Übergänge zu sorgen oder einen anderen TP-Filter anzuwenden.

Weiterhin habe ich bessere Ergebnisse mit der Faltung, die Du aus Deinen früheren Anfragen her kennst.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Pheeenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2011, 19:14     Titel:
  Antworten mit Zitat      
Danke für Infos!

Ich weiß, dass andere Faltungen bessere Ergebnisse haben mich hat nur interressiert warum die Artefakte auftreten, da diese bei den anderen Algorithmen nicht auftreten.

Meine ersten Ideen waren folgende: (allerdings bin ich mir da nicht ganz sicher in weit das stimmen kann)

-) weil im Frequenzbereich die Werte durch komplexe Zahlen dargestellt werden und diese in Matlab nicht exakt repräsentiert werden können, kommt es bei der FFT (ifft) zu Ungenauigkeiten welche sich besonders bei Faltungskernen mit kleinen Werten auswirken.

-) Konvolutionsoperation im Frequenzbereich setzt voraus, dass diese völlig zyklisch durchgeführt werden können, was aufgrund der Bildgrenzen nicht der Fall ist. --> Artefakte an Bildkanten?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 26.01.2011, 10:30     Titel:
  Antworten mit Zitat      
Moin Pheeenix,

ich habe mir Dein Beispiel noch einmal angesehen. Ich fand Deine Anmerkungen zu meiner Antwort sehr interessant. Noch ein Hinweis - Dein Bild ist kein reines S/W-Bild sondern ein indiziertes Bild ([x,map]=...-).

Wenn Du ein Bild mit der FFT transformierst und dann den Prozeß umkehrst, kommst Du exakt auf die gleichen Ausgangswerte. Die Werte bleiben auch erhalten, wenn Du dieses Verfahren mehrmals wiederholst. Man kann also davon ausgehen, dass Matlab bei Transformationen ohne Faltung keine Rundungsfehler verusacht. Die komplexen Zahlen interpretieren die Pixelwerte.

Nun gibts es aber eine ganz interessante Erscheinung. Deine Artefakte treten nur mit dem Zentrumswert 36 auf. Nicht mit 35 und auch nicht mit 37. Auch andere Werte in Beziehung zu 36 zeigen dieses Phänomen nicht. Was nicht heißen soll, dass es doch noch irgendeinen merkwürdigen Wert gibt, der das verursacht. Selbst wenn ich den Kernn linear erhöhe, treten diese Artefakte nicht auf. Als Ergebnis für Rundungsfehler kann ich das nicht nachvollziehen, da andere Kerne auch zu Rundungsfehler führen.

Deine Frage müßt also lauten, warum nur bei diesem Kern, mit diesem einen Zentrumswert. Darauf habe ich leider auch keine Antwort, da ich diese Erscheinung noch nie gesehen habe und sie auch nicht zwangsweise mit anderen Kernen herbeiführen kann. Sollte Dir irgendjemand den Kern vorgegeben haben, wird er sich schelmischerweise etwas dabei gedacht haben.

Das Problem mit den Rändern sehe ich ebenso fragwürdig. Ich kann dem Bild auch einen breiten Rahmen mit Nullwerten verpassen. Am Ergebnis ändert sich nichts.

Wenn Du des Rätsels Lösung kennst, laß uns daran teilhaben. Sehr interessantes Thema!!!

Viele Grüße und viel Glück

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 26.01.2011, 12:28     Titel:
  Antworten mit Zitat      
Noch ein kleiner Nachtrag, auch wenn ich mich damit auf "dünnem Eis" bewege. Im Zusammenhang mit inversen Filterungen gibt es den Effekt der "schlecht gestellten Probleme". Z.B. hier:

http://wwwmath.uni-muenster.de/num/.....beiten/Diplom_LFranek.pdf

Vielleicht könnte das der Grund sein - wenn nicht, wäre ich dankbar, wenn ein Mathematiker das hier im Forum gleich ausräumt.

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 26.01.2011, 14:08     Titel:
  Antworten mit Zitat      
Ändere die Zeile:

Gfft = fft2(BlurredPic); in: Gfft = fftpic;

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Pheeenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2011, 20:34     Titel:
  Antworten mit Zitat      
Seltsames Phänomen.Danke für die Infos.
Du hast mir sehr geholfen.

Beste Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.