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

Inverse Faltung im Zeitbereich/Frequenzbereich

 

Pheeenix
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2010, 17:56     Titel: Inverse Faltung im Zeitbereich/Frequenzbereich
  Antworten mit Zitat      
Hallo Allerseits!

Ich hätte gerne gewusst wie eine Inverse Faltung im Zeitbereich aussieht. Wie eine normale Faltung im Zeitbereich(auf ein Bild beispielsweise) funktioniert weiss ich, allerdings hab ich versucht das ganze in Mathlab nachzurechnen und komm auf keinen grünen Zweig.

Faltung = Bild * Kernel
Code:

blurredpic = conv2(Pic,Kernel, 'same');
 


ich hab nun versucht das Faltungsergebnis mit einen um 180 ° gedrehten Kernel zu falten, jedoch ohne erfolg. Das selbe ists wenn ich den Kernel Invertiere.
ich habe auch versucht das ganze im Frequenzraum zu lösen:

Code:

Pic = ifft2(fft2(gestoertesBild) / fft2(Kernel))
 


Dies geht aber auch nicht einfach so, da das Bild und der Kernel nicht die gleichen "Abmessungen" haben (Kernel ist 5x5 Matrix, Bild ist eine mxn Matrix). Hier kommt auch nur "Müll" raus.

Kann mir jemand weiterhelfen?
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: 01.07.2010, 18:05     Titel:
  Antworten mit Zitat      
Deine Kernelmatrix muß die gleiche Größe haben wie Deine Bildmatrix:

Code:
Kernelmatrix=zeros(size(Bild));


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: 06.07.2010, 08:08     Titel:
  Antworten mit Zitat      
ok, das ist logisch, aber wie brige ich die Werte des Kernels in die Matrix, bzw. wo in die Matrix muss ich die geben? wenn ich das Falte werden ansonsten ja nur die mittleren 5x5 pixel gefaltet?
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: 06.07.2010, 08:36     Titel:
  Antworten mit Zitat      
Moin,
hier ein Beispiel:

Code:
I=double(imread('Test.tif'));
Kernel=[0 -1 0;-1 5 -1;0 -1 0];
Im2=conv2(I2,Kernel);
K=zeros(size(I2));
K(1:3,1:3)=Kernel;
Im3=fft2(I2);
KERNEL=fft2(K);
Im4=Im3.*KERNEL;
Im5=abs(ifft2(Im4));
figure; imshow(Im5,[]);


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: 13.07.2010, 12:29     Titel:
  Antworten mit Zitat      
Danke für die Hilfe.

ich hab das jetzt gemacht wie du (hab was gefunden wie das etwas "einfacher" aussieht).

Code:

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);
 


hier bekomme ich die richtige Ausgabe bzw. wird das richtige Bild angezeigt. Hier brauche ich den abs() Befehl nicht?!
Dein Code macht ähnliches, bei dir wird das gefaltete noch mal gefaltet (durch die Punktweise Multiplikation)


Ich wollte nun das Ganze umdrehen um eine Inverse Filterung zu machen,
also lese ich das verschwommene Bild ein und führe statt der punktweisen Multiplikation eine Division durch.
Code:

fftpic = G ./ H;                    
 


Und genau hier habe ich wieder ein Problem.
Ich kann das Bild nicht darstellen (weder bei deinem Code noch bei meinem, weder mit dem abs() befehl noch ohne). Ich bekomme lediglich ein schwarzes Bild!?

Weiß vielleicht irgendwer eine Lösung? Ich bin schon am Verzweifeln Sad


Danke!
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: 13.07.2010, 13:39     Titel:
  Antworten mit Zitat      
Ich denke ich habe das Problem gefunden, suche aber noch nach einer Lösung Sad

Nach der fft2 Operation sind die beiden Werte des Bildes sowie des Faltungskernes complex. Bei der punktweisen Division enstehen so Werte die in Matlab als -Inf angezeigt werden. Bei der ifft2 Operation werden dann alle Elemente als NAN angezeigt.

Wie kann das passieren? Die reellen Werte sind alle Positiv - wie kommt man dann auf "-Inf" Werte und wie kann man das vermeiden um bei der Rücktransformation "normale" Werte zu haben die auch als Bild ausgegeben werden können?
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: 21.07.2010, 06:41     Titel:
  Antworten mit Zitat      
Hab mein Problem gelöst.
Ich setzte alle durch die Transformation entstandenen Nullen auf einen Wert nahe null, oder verwende nach der Rücktransformation den floor und ceil befehl um alle +- Inf Werte zu ändern, dann kann Matlab auch diese Bilder Anzeigen.
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.