Verfasst am: 07.01.2012, 16:20
Titel: Filterung im Frequenzraum
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:
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
Das Problem dabei ist, dass ich den Filter einfach nicht so hinbekomme, dass er auch das Ergebnis liefert, was ich haben will.
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.
Vielen Dank im Voraus! Ich hoffe es kann mir jemand helfen.
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.
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
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.
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.
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.
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.
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-10;-15-1;0-10]; % 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)
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
(zur Info, ich versuche das ohne die Standardmatlab-Funktionen zu machen. Also ohne conv2 und sowas )
Habe jetzt meine Filterung nochmal mit einem Mittelwertfilter getestet und festgestellt, dass sie doch sehr wohl tut, was sie soll.
Werde mich jetzt nochmal dran setzen und die andere Variante (Ortsraum) überarbeiten
Eventuell muss ich dann aber doch nochmal was fragen, will aber erst schauen, wie weit ich's selbst korrigiert bekomme.
Nochmals danke!
Einstellungen und Berechtigungen
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
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.