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

Filterung im Frequenzraum

 

kotori
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2012, 17:20     Titel: Filterung im Frequenzraum
  Antworten mit Zitat      
Moin,

Ich hab jetzt seit geraumer Zeit folgendes Problem:
Ich will eine Faltung im Frequenzraum vornehmen und zwar mit einem beliebigen Filter.
Das ganze habe ich jetzt zunächst einmal so gelöst:

Code:

[x,y] = size(image);

BigFilt = zeros(x,y);
a = (size(BigFilt,1)/2);
b = (size(BigFilt,2)/2);

for i=1:size(filtermaske,1)
    for j=1:size(filtermaske,2)
      BigFilt(fix(a+i-(size(filtermaske,1)-1)/2),fix(b+j-(size(filtermaske,2)-1)/2)) = filtermaske(i,j);
    end
end

filterFreq = fft2(fftshift(BigFilt));

imFreq = fft2(fftshift(image));

% Ruecktransformation in Ortsraum nach Multiplikation:
filterImF = fftshift(ifft2(imFreq.*filterFreq));

imshow(filterImF);
 


Das Problem dabei ist, dass ich den Filter einfach nicht so hinbekomme, dass er auch das Ergebnis liefert, was ich haben will. Sad
Ich bekomme zwar ein Ergebnis, aber für meinen Testfilter (Tiefpass 3x3) ist es doch sehr stark hell.
Ich habe den gleichen Filter auch mal mit einer Faltung im Ortsraum ausprobiert und dort ganz andere Ergebnisse bekommen.

Meine Frage wäre also: Wo genau könnte der Fehler liegen, der diese "Überbelichtung" verursacht?
Ich sehe es im Moment selber einfach nicht mehr. ._.;

Ich lade mal die Bilder hoch, die ich als Ergebnisse habe, plus das Originalbild. Smile

Vielen Dank im Voraus! Ich hoffe es kann mir jemand helfen.

Faltung.zip
 Beschreibung:

Download
 Dateiname:  Faltung.zip
 Dateigröße:  382.36 KB
 Heruntergeladen:  467 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.01.2012, 17:53     Titel:
  Antworten mit Zitat      
Hallo,

die Bsp. in diesem Skript sollten dir weiterhelfen...

http://besessener.com/software/matlab/konvolution.html
Private Nachricht senden Benutzer-Profile anzeigen
 
kotori
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2012, 20:30     Titel:
  Antworten mit Zitat      
Hey,

danke für die Antwort. Kenne den Link schon und hab auch gerade mal mein Programm dahin gehend geändert, aber leider ohne nennenswerten Effekt. Sad
Es ist immer noch alles viel zu hell.
Ich verzweifle allmählich.

Muss ich doch noch irgendetwas anderes bedenken?
Ich habe auch schon vorher probiert, mir den Filter einfach per
Code:
fft2(filtermaske, x,y)
auf die Größe des Originalbilds zu bringen, aber auch das hat nicht funktioniert wie es sollte. Sad

Bin relativ sicher, dass meine Ortsraumfaltung stimmt. Sollte denn nicht beim Weg über den Frequenzraum das gleiche Bild rauskommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.01.2012, 22:57     Titel:
  Antworten mit Zitat      
Dort wird allerdings nur bei dem Filter ein fftshift verwendet...siehe Funktion myFilter. Ansonsten ist die Faltung im Freq.-raum und die anschließende Rücktransformation lediglich eine Zeile.

Code:
Pf2 = real(ifft2(fft2(Boot) .* Pf));


Am Ende muss natürlich das gleiche rauskommen, wie bei einer Faltung im Ortsraum.
Private Nachricht senden Benutzer-Profile anzeigen
 
kotori
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2012, 23:45     Titel:
  Antworten mit Zitat      
Okay, habe jetzt die Shifts rausgenommen, die zuviel waren.
Leider tut das nun aber auch nichts zur Sache.
Habe jetzt auch gerade einfach mal die ganze Funktion myfilter rauskopiert und an meinen Daten genauso getestet, wie in dem Script, aber der Fehler bleibt.
Das Bild bleibt überbelichtet.
Allmählich frage ich mich, ob es so sein soll. Confused
Aber rein von der Logik des Tiefpassfilters, kann so eine starke Filterung bei einem 3x3 Filter doch gar nicht sein, oder?
Es muss also doch irgendwo ein Fehler in meiner Frequenzraumfilterung stecken. Rolling Eyes

Ich hab hier im Forum schon alles abgesucht und ein paar andere Ansätze ausprobiert, aber lustigerweise funktioniert bei mir nichts, was bei anderen scheinbar tadellos klappt. Crying or Very sad
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: 08.01.2012, 08:02     Titel:
  Antworten mit Zitat      
Moin,

das Problem liegt in deinem Kernel. Über den Kernel wird die Energie bestimmt. Das Beispiel von DSP habe ich auch schon verlinkt. Es ist eine gute Abhandlung, die aber nicht auf dein Problem eingeht. Ich finde den Algorithums auch recht umständlich. Versuche mal folgendes:

Code:
I=imread('cameraman.tif');
figure; imshow(I)
I2=1/255*double(I);
kernel=[0 -1 0;-1 5 -1;0 -1 0];      % Das Zentralpixel ( hier: 5)bestimmt die Helligkeit
img2a=conv2(I2,kernel);         % direkte Faltung ( im Ortsbereich)
figure; imshow(img2a)
K=zeros(size(I2));            % indirekte Faltung im Frequenzraum / Kernel-Matrix vorbereiten
K(1:3,1:3)=kernel;
IMG=fft2(I2);               % Originalbild und Kernel transformieren
KERNEL=fft2(K);
IMG2=IMG.*KERNEL;            % Elementweises Multiplizieren
img2b=abs(ifft2(IMG2));         % Endbild zurück transformieren
figure; imshow(img2b)


Verändere mal das Zentralpixel.

Einen schönen Sonntag!

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
kotori
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 17:15     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort, habe jetzt endlich gemerkt, wo das eigentliche Problem liegt.
Es ist nämlich gar nicht meine Frequenzraumfilterung, die falsch ist, sondern meine Ortsraumvariante Shocked
(zur Info, ich versuche das ohne die Standardmatlab-Funktionen zu machen. Also ohne conv2 und sowas Wink)

Habe jetzt meine Filterung nochmal mit einem Mittelwertfilter getestet und festgestellt, dass sie doch sehr wohl tut, was sie soll. Embarassed

Werde mich jetzt nochmal dran setzen und die andere Variante (Ortsraum) überarbeiten Smile
Eventuell muss ich dann aber doch nochmal was fragen, will aber erst schauen, wie weit ich's selbst korrigiert bekomme.

Nochmals danke!
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.