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

Anti-Alias-Filter, aber wie?

 

rschulte
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2011, 11:54     Titel: Anti-Alias-Filter, aber wie?
  Antworten mit Zitat      
Hallo zusammen!

ich habe folgendes Problem: Ich habe ein Bild, das ich in geringerer Auflösung neu abtasten möchte. Um das Abtasttheorem nicht zu verletzen, brauche ich einen Tiefpassfilter und die Frage ist, wie dieser aussehen muss und wie ich ihn in Matlab implementieren kann.

Mein erster Ansatz war, im Frequenzbereich durch die Multiplikation mit einem Rechteckfenster die hohen Frequenzen zu filtern. Das führt aber im Bildbereich zu starkem Überschwingen. In der Literatur habe ich zwar viel theoretisches gefunden, aber wie konkret eine Filterfunktion für einen Anti-Alias-Filter bei Bildern aussieht, konnte ich bisher nicht ermitteln.

Vielleicht kann mir jemand weiterhelfen, zumindest mit ein paar Literaturhinweisen oder Links, wo ich konkretes finden kann. Vielen Dank dafür schonmal.

Und um es vorweg zu nehmen: Ich weiß, dass ich mit imresize() direkt Bilder umskalieren kann inklusive Anti-Aliasing, aber ich möchte die beiden Vorgänge getrennt "von Hand" durchführen.
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: 02.02.2011, 16:27     Titel:
  Antworten mit Zitat      
Moin rschulte,

um Antialiasing zu vermeiden, benötigst Du einen Gaussian-Tiefpaßfilter oder Butterworthfilter. Beide kannst Du im Orst- oder Frequenzbereich umsetzen. Im Orstbreich wäre das z.B. ein Tiefpaß-Filterkern für die Funktion conv2. Im Frequenzbereich mußt du darauf achten, dass Du weiche Übergänge erzielst, sonst entstehen dort typische Artefakte, wie z.B. Ringing. Das Problem umgehst Du natürlich im Orstbereich.

Welche Funktion Du auswählst, hängt natürlich von den mir unbekannten Bildinhalten ab, ob z.B. harte Kanten das Problem verstärken oder andere Bildinhalte das Probelm weniger ausprägen.

Für den einfacheren Ortsbereich findest Du hier schon mal einen Einstieg.

http://www.gomatlab.de/funktion-conv2-t11779,highlight,conv2.html

Du mußt nur den Filterkern ändern. Wenn Dir das nicht weiter hilft, schildere Dein Problem noch etwas konkreter. Ist das Bild sehr klein, wirst Du größere Probleme haben, da die deutlich erkennbare Pixelstuktur das vorrangige Problem und weniger mit Antialiasing zu tun hat.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
rschulte
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2011, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

erstmal vielen Dank für die schnelle Antwort. Ich mache es mal etwas konkreter: Das Bild ist 1280x720 Pixel groß und soll auf die halbe Größe unterabgetastet werden. Die Grenzfrequenz für das Filter sollte also 0.5 * Maximalfrequenz sein. Wie komme ich dann konkret auf den Filterkern für einen Gaussfilter (oder Buterworthfilter), mit dem ich falte?

Gruß,
Ralf
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: 03.02.2011, 13:50     Titel:
  Antworten mit Zitat      
Moin rschulte,

bevor Du das Bild halbierst, sollten die hohen Orts-Frequenzen reduziert und dann durch Entfernen jedes 2. Pixel das Bild verkleinert werden. Informationen dazu findest Du hier:

http://books.google.de/books?id=YEY.....lder%20filter&f=false

und

http://www.qucosa.de/fileadmin/data.....beit_Soeren_Sproessig.pdf

ab Seite 95 die dazugehörige Matlab-Funktion. Ein typischer Gauss-Kernel ist:

1/16 * [ 1 2 1;2 4 2;1 2 1])

Ob das immer losgelöst vom eigentlichen Bildinhalt zutrifft ist mir schleierhaft, das es Bilder mit sehr hohen Ortsfrequenzen geben kann und Bilder mit kaum erkennbaren Ortsfrequenzen.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
rschulte
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 09:33     Titel:
  Antworten mit Zitat      
Danke schonmal für die Literaturhinweise.

Ich habe jetzt folgendermaßen gefiltert:

Code:

I_filtered = conv2(I, fspecial('gaussian', 2, 2), 'same');
 


Laut dem Link aus Googlebooks müsste also eine Filterkerngröße von 2x2 die richtige sein, wenn die Bildgröße halbiert wird (Ist das wirklich so?). Das Spektrum zeigt eindeutig irgendeine Tiefpassfilterung, trotzdem bleiben hohe Ortsfrequenzen bestehen.

Ich probiere mal weiter herum, evtl. kann ich später noch ein paar Bilder anhängen. Vielen Dank bis hierher, es bleibt aber weiter spannend Wink.
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 18:09     Titel:
  Antworten mit Zitat      
Mach doch folgendes.

mach doch von deinem Bild eine 2d fft und plotte den Realteil mit

Code:

spec2d = fft2(input);
mindata = min(min(spec2d));
maxdata = max(max(spec2d));
figure(1)
imagesc(real(spec2d),[mindata maxdata]);
 


und das selbe nochmal mit deinem gefilterten Daten

Code:

spec2d_filtered = fft2(filtered_input);
mindata = min(min(spec2d_filtered));
maxdata = max(max(spec2d_filtered));
figure(2)
imagesc(real(spec2d_filtered),[mindata maxdata]);
 


Dazwischen kannste immer schon deine Filter testen und sehen was du brauchst.
Private Nachricht senden Benutzer-Profile anzeigen
 
rschulte
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2011, 13:33     Titel:
  Antworten mit Zitat      
Ich habe ein paar Gaußfilter unterschiedlicher Größe ausprobiert und anschaulich kann man da schon einiges machen. Was mir aber noch nicht klar ist, wie groß muss ich den Filterkern wählen, damit bei der halben Maximalfrequenz eine Dämpfung von 3 dB vorliegt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2011, 17:54     Titel:
  Antworten mit Zitat      
rschulte hat Folgendes geschrieben:
Ich habe ein paar Gaußfilter unterschiedlicher Größe ausprobiert und anschaulich kann man da schon einiges machen. Was mir aber noch nicht klar ist, wie groß muss ich den Filterkern wählen, damit bei der halben Maximalfrequenz eine Dämpfung von 3 dB vorliegt?


Also die -3dB sind immer Grenzfrequenz angaben, welche für die jeweiligen Filter charakteristisch sind.

Die Übertragungsfunktion für einen TP erster Ordnung ist:

\frac{F_a(\omega)}{F_e(\omega)} = \frac{1}{1 + \frac{\omega}{\omega_g }

Demnach ist ein TP nur von \omega_g der Grenzfrequenz abhängig. Nun würde ich folgendes machen:


1. Für die zwei Bilderdimensionen die weiligen Grenzfrequenzen und somit die Übertragungsfunktionen bauen.

2. Als nächstes die Filtermatrix. Geht simpel mit
Code:

Zwischenergebnis = Uefunktion1'*Uefunktion2;
 

Anschließend die Zwischenergbnis Matrix 2d invers Fourier-transformieren.

3. fertig ist die Filtermatrix und los kanns gehen das lustige falten.

4. Anschließend würde ich mit interp2 die zuvielen Punkte rausnehmen. Weiß gar ne ob man mit Filtern über zwei Koeffizienten überhaupt die richtigen Werte bekommt. Zwei Koeffs scheinen mir ganz schön wenig.

Mfg Scriptor

PS. Is umständlich, müsste aber gehen.
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: 09.02.2011, 08:37     Titel:
  Antworten mit Zitat      
Moin rschulte,

Du hast das Problem eindeutig beschrieben:

"Das Spektrum zeigt eindeutig irgendeine Tiefpassfilterung, trotzdem bleiben hohe Ortsfrequenzen bestehen."

Eine Filterung orientiert sich immer an der visuellen Bildauswertung. Ich kenne kein Verfahren, das im Bildvergleich zwischen gefiltertem Bild und ungefiltertem Bild den Wert 3dB ausgibt. Das fängt schon damit an, dass keine vernüftigen Verfahren zur Messung in Bildern existieren. Alle diese Verfahren geben irgendeine Bewertung zurück, die nicht stichhaltig über unterschiedliche Bildaussagen sind.

Bildverarbeitung ohne die visuelle Prüfung, nur auf Algorithmen bezogen, funktioniert nicht. Dazu gehört auch Anti-Aliasing. Natürlich können TP-Filter so ausgelegt sein, dass sie zunächst nur das Rauschen dämpfen und die hohen Orstfrequenzen nicht berücksichtigen. Mit zunehmender Filterung werden dann auch die hohen Ortsfrequenzen beschnitten. Dieser Werdegang ist so variabel wie es TP-Filter gibt und läßt sich nicht so ohne weiteres "a priori" festlegen.

Somit liegen die viel genannten Grenzfrequenzen oder auch "Cutt-off"-Frequenzen bei jedem Bild woanders, zumindest wenn es sich nicht eindeutig um die oberen und unteren Grenzfrequenzen geht. Eine Nebellandschaft hat andere Ortsfrequenzen als ein Platkat mit Innschriften. Den Spagat von der Maßeinheit 3dB zur Dimension eines TP-Filters ist wohl schwer, wenn überhaupt hinzubekommen.

Die Bildverarbeitung hat irgendwie ihre eigenen Gesetze. Warum können z.B. Bildfehler nicht automatisiert bearbeitet werden? Das funktioniert irgendwo und irgendwie mal ganz gut und versagt komplett, wenn bestimmte Bereiche verlassen werden. Ich wage zu bezweifeln (ich hänge mich gerne weit aus dem Fenster), dass Du eine befriedigende Antwort erhalten wirst.

Es ist nach meiner Meinung praktikabler, die gefilterten Ergebnisse dahingehend zu bewerten, ob sie optimal gefiltert sind oder nachgebessert werden können/müssen als die 3dB in den Fordergrund zu stellen, ohne Rücksicht darauf, zu welchen Ergebnis dieses Vorhaben führt.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
rschulte
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2011, 11:15     Titel:
  Antworten mit Zitat      
@scriptor

Dein Vorgehen klingt logisch.

Zitat:

1. Für die zwei Bilderdimensionen die weiligen Grenzfrequenzen und somit die Übertragungsfunktionen bauen.


Aber wie genau baue ich die Übertragungfunktion? Ich habe bereits versucht, einfach bis zur Grenzfrequenz Einsen und danach Nullen zu setzen. Dann muss ich nach der ifft2 aber noch eine Fensterfunktion anwenden, sonst ist meine Filtermatrix so groß wie mein Bild, außerdem habe ich dann ein Rechteckfilter, das im Ortsbereich viel Überschwingen produziert.

@ Hubertus
Du magst nicht Unrecht haben, aber mir geht es nicht darum, eine Filterung vorzunehmen, um einen bestimmten optischen Eindruck zu erzeugen. Ich möchte mich zunächst auf die Signalverarbeitung konzentrieren, optische Eindrücke werden auch noch bewertet, aber erst in einem späteren Schritt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 00:57     Titel:
  Antworten mit Zitat      
Ich bin auch nicht der Experte in solchen Geschichten wie Bildverarbeitung. Dennoch würde ich den Ansatz probieren. Dass dein Spektrum trotz angeblicher Filterung noch hohe Beträge bei hohen Frequenzen aufweist, denke ich hat mit der schlechten Filterfunktion zu tun. Ob mehrdimensional oder nicht, die hohen Frequenzen müssten alle gedämpft sein.

Was heißt denn eigentlich hoch? Höher als Frequenzen < Grenzfrequenz? dann liegt dass meiner Meinung nach an der Filterfunktion. Für eine gute Filterung benötigst du gute Filterfunktionen und die sind nicht nur mit zwei Punkten gemacht.Vll verstehe ich den Zweck ja auch nicht von den Wichtungen im Zeitbereich. Im Frequenzbereich hat ein Gaussfenster sowieso ein anderes Spektrum. Wäre gut wenn mir einer Mal diese Wichtungsgeschichte erklären kann, sprich was bringt die Faltung einer Funktion mit einem Gaussfenster???

Nun zur anderen Frage:

Du nimmst ganz einfach ein Array mit deinen Frequenzen (x-Achse deines Spektrums). Pass aber auf, dass dein Spektrum mit der FFT periodisch ist.Es gibt mehrere Tutorials hierzu und wenn du die Suche anschmeißt findest du auch genug Material, wenn du Fragen zum Wertebereich des Spektrums hast. Dieses Array setzt du einfach in die TP Üf - ein.

Vergiss die ifft nicht. Durch die Faltung erhälst du unter Umständen ein größeres Bild als vorher. Das kannst du mit interp2 oder iterative interp1 lösen. Hierzu gibt es auch mehr als genug hier in der Suche bzw in der Matlabhilfe.

Schöne Grüße!!

Ich
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.