Mittlerer Filter oder mittlerer Filter. Kategorie Digitale Signal - und Bildverarbeitung DSP - und DIP-Software-Entwicklung. Abstrakt Der Artikel ist ein praktischer Leitfaden für Mittelfilter oder durchschnittliches Filterverständnis und - implementierung Artikel enthält Theorie, C-Quellcode, Programmieranleitung und Beispielanwendung. 1 Einleitung zum Mittelfilter oder Mittelwertfilter. Meanfilter oder mittlerer Filter ist Fensterfilter der Linearklasse, der das Signalbild glättet. Der Filter arbeitet als Tiefpass. Die Grundidee hinter dem Filter ist für jedes Element des Signalbildes im Durchschnitt Über seine Nachbarschaft Um zu verstehen, wie das in der Praxis gemacht wird, lasst uns mit der Fensteridee beginnen.2 Filterfenster oder Maske. Lass uns vorstellen, du solltest einen Brief lesen und was du im Text sehe, der durch Loch in einer speziellen Schablone wie dieses eingeschränkt ist 1 Erstes Schablone. So, das Ergebnis des Lesens ist Ton t Ok, lasst uns den Brief wieder lesen, aber mit der Hilfe einer anderen Schablone. Fig 2 Zweite Schablone. Jetzt das Ergebnis des Lesens t ist Sound Lassen Sie uns den dritten Versuch machen. Abb. 3 Dritter Schablone. Jetzt liest du den Buchstaben t als Klang. Was passiert hier, um in der mathematischen Sprache zu sagen, machst du eine Operation, die über das Elementbuchstabe t liest. Und das Ergebnisgeräusch hängt von den Elementnachbarschaftsbriefen neben t ab Schablone, die hilft, Element Nachbarschaft zu holen, ist Fenster Ja, Fenster ist nur eine Schablone oder ein Muster, mit dem du die Elementumgebung auswählst, ein Satz von Elementen um die gegebene, um dir zu helfen, eine Entscheidung zu treffen Ein anderer Name für Filterfenster Ist Maske 3 in 2D. In drei Dimensionen Denken über Gebäude Und jetzt über Raum in diesem Gebäude Das Zimmer ist wie 3D-Fenster, das schneidet einige Unterraum aus dem gesamten Raum des Gebäudes finden Sie 3D-Fenster in Volumen Voxel Bildverarbeitung. Fig 6 Fenster oder Maske der Größe 3 3 3 in 3D.3 Verständnis der mittleren Filter. Jetzt lassen Sie uns sehen, wie man einen Durchschnitt über Element s Nachbarschaft Die Formel ist einfach Summe Elemente und teilen die Summe durch die Anzahl der Elemente Zum Beispiel, Lassen Sie uns einen Durchschnitt für den Fall berechnen, der in Abb. 7 dargestellt ist. 7. Rennen Sie einen Durchschnitt. Und das ist alles Ja, wir haben nur 1D-Signal durch Mittelfilter gefiltert. Lassen Sie uns den Lebenslauf machen und schrittweise Anweisungen für die Verarbeitung aufschreiben Durch Mittelfilter. Mean-Filter oder durchschnittliche Filter-Algorithmus. Stellen Sie ein Fenster über Element. Take eine durchschnittliche Summe Elemente und teilen Sie die Summe durch die Anzahl der Elemente. Jetzt, wenn wir den Algorithmus haben, ist es Zeit, einige Code zu schreiben Wir kommen auf Programmierung.4 1D bedeuten Filterprogrammierung. In diesem Abschnitt entwickeln wir 1D Mittelfilter mit Fenster der Größe 5 Lassen Sie uns 1D Signal der Länge N als Eingang haben Der erste Schritt ist Fenster Platzierung wir tun, dass durch Änderung der Index der führenden Element. Pay Aufmerksamkeit, dass wir mit dem dritten Element beginnen und mit den letzten, aber zwei Das Problem ist, können wir nicht mit dem ersten Element beginnen, denn in diesem Fall ist der linke Teil des Filterfensters leer. Wir werden unten diskutieren, wie Um dieses Problem zu lösen. Der zweite Schritt ist, den Durchschnitt zu nehmen, ok. Jetzt, lassen Sie uns notieren Sie den Algorithmus als Funktion. Type Element könnte definiert werden als.5 Behandeln von Kanten. Für alle Fenster-Filter gibt es ein Problem Das ist Kantenbearbeitung Wenn Sie platzieren Fenster über das erste letzte Element, der linke rechte Teil des Fensters ist leer Um die Lücke zu füllen, sollte das Signal verlängert werden Für den mittleren Filter gibt es gute Idee, Signal oder Bild symmetrisch zu erweitern, wie dies. So, bevor das Signal an Unsere mittlere Filterfunktion das Signal sollte verlängert werden Lassen Sie uns notieren Sie den Wrapper, der alle Vorbereitungen macht. Wie Sie sehen können, berücksichtigt unser Code einige praktische Fragen Zuerst prüfen wir unsere Eingangsparameter Signal sollte nicht NULL sein und signalisieren Länge sollte positiv sein. Zweiter Schritt wir überprüfen Fall N 1 Dieser Fall ist ein besonderer, weil zum Aufbau Erweiterung benötigen wir mindestens zwei Elemente Für das Signal von 1 Element Länge das Ergebnis ist das Signal selbst Wie auch Aufmerksamkeit, unsere mittlere Filter funktioniert In-place, wenn Ausgabeparameter Ergebnis NULL ist. Jetzt lassen Sie uns Speicher für Signalverlängerung zuordnen und überprüfen Speicherzuordnung. Implementierung der FIR-Filterung in C Teil 3.Part 2 zeigte ein Beispiel eines FIR-Filters in C mit Fixpunkt Dieses Tutorial Auf FIR-Filter zeigt, wie man verschiedene FIR-Filter auf die gleichen Eingabedaten anwendet. Die Beispiele für diesen Teil sind auch im Fixpunkt Das Beispiel ist eine einzelne C-Datei mit dem FIR-Filtercode oben und ein kleines Testprogramm unten In einer tatsächlichen Implementierung würden Sie wahrscheinlich möchten, dass der Code in mehrere Dateien aufgeteilt werden. Klicken Sie auf den folgenden Link für eine PDF-Version des Codebeispiels. Das Codebeispiel wird unten gezeigt. Es gibt ein paar Unterschiede zum Codebeispiel von Teil 2 Zuerst Ich habe eine Funktion zum Speichern der Eingangsabtastwerte an das Eingabe-Sample-Array erstellt. FirStoreNewSamples Diese Funktion wird einmal für jeden Block von eingegebenen Samples aufgerufen, die verarbeitet werden. Die aufrufende Funktion übergibt einen Zeiger auf die neuen Eingabe-Samples und die Anzahl der neuen Samples Zu kopieren Die Funktion gibt die Adresse zurück, an der das FIR-Filter angewendet werden soll. Zweitens habe ich eine Funktion hinzugefügt, um die Samples nach der Bearbeitung eines Blocks von Samples zu verschieben. FirMoveProcSamples Wiederum wird diese Funktion einmal pro Block von Samples aufgerufen, nicht einmal pro FIR-Filter Angewendet. Die FIR-Filterfunktion firFixed hat die gleiche Argumentliste wie im Beispiel des Teils 2, aber das Eingabeargument ist in diesem Fall etwas anders. Der eingegebene Eingabezeiger sollte die Adresse sein, die von der Funktion firStoreNewSamples zurückgegeben wird, anstatt einen Zeiger auf Der Eingabeprobenpuffer. Das Testprogramm zeigt ein Beispiel, bei dem zwei verschiedene FIR-Filter auf dieselben Ausgabedaten angewendet werden. Eine erste Eingabedatei wird für Eingabeproben geöffnet und zwei Ausgabedateien werden für jeden Filter geöffnet. In der Beispielverarbeitungsschleife wird ein Block gesetzt Von bis zu 80 Samples wird gelesen und in das Arbeitsfeld für die Filter gespeichert. Weiterhin wird das 63 Tap-Bandpass-Filter angewendet, indem es firFixed aufgerufen wird und der Block der Ausgabe-Samples in die Datei geschrieben wird. Danach wird der 8-Tap-Gleit-Durchschnitt-Filter angewendet und Die Ausgabe-Samples werden in eine andere Datei geschrieben. Schließlich wird der Sample-Puffer verschoben, um den nächsten Block von Eingabe-Samples vorzubereiten. Der Code, den ich gezeigt habe, funktioniert für viele Filter, die Sie implementieren möchten. Remember, um den maximalen Filter-Tap zu verfolgen Länge und Eingabe Sample Block Größe, und ändern Sie die Definitionsanweisungen angemessen Das schließt mein Tutorial auf grundlegende FIR-Filter. Leave eine Antwort Abbrechen Antwort. Thank Sie so viel für die Buchung sehr schöne Tutorial Ich möchte Ihr Beispiel in AVR Atmega16 Controller I implementieren Habe die ADC-Funktion ReadADC 0x00, die den 10bits-Wert aus den ADC-Registern liest, wo sollte ich den ADC-Wert in das obige Beispiel eingeben Ich bin neu im Controller-Programm, ich danke für deine Guides und Anregungen Bitte leite mich wo ich es nötig mache Änderungen in obigem Beispiel. Abdul, danke für das Kompliment Du solltest deine ADC-Samples in ein Array lesen und dann die Adresse dieses Arrays an die firFixed-Funktion als zweites Argument weitergeben. Im Hauptprogramm lese ich Samples aus einer Datei in das Array In Ihrem Code sollten Sie ADC-Samples in ein ähnliches Array lesen. Im Beispiel habe ich 80 Samples zu einem Zeitpunkt verarbeitet, aber Sie sollten diesen Wert auf das ändern, was für Sie geeignet ist. Die Verarbeitung eines Samples zu einem Zeitpunkt würde die Verzögerung durch die Filter, aber wäre die teuersten in Bezug auf Zyklen. Dear Shawn, danke für Ihre Antwort Ich habe ADC-Wert gelesen als Eingabe SAMPLES ADCRead 0x00, und übergeben die Adresse der Eingabe SAMPLES an die Funktion firStoreNewSamples als Inp firStoreNewSamples Eingabe SAMPLES, Größe Ich bin verwirrt über die Größe Integer als Größe ist die Länge, würden Sie mir bitte vorschlagen, was sollte der Wert der Größe sein, da FirFixed Funktion hat fünf Argumente als firFixed Koeffizienten, Inp, Ausgabe, Größe, FILTERLEN und Inp wird von firStoreNewSamples My gelesen Programm ist unten aufgeführt kindly chek es würde ich Ihnen voll gefallen, danke. Einschließen einschließen. Definieren ADCVREFTYPE 0x20 definieren PWM1DCReg OCR1A. Maximale Anzahl von Eingängen, die in einem Funktionsaufruf abgewickelt werden können, definieren MAXINPUTLEN 25 maximale Filterlänge als gehandhabt werden können MAXFLTLEN 16 Puffer zum Halten aller Eingangsmuster definieren BUFFERLEN MAXFLTLEN 1 MAXINPUTLEN. Array, um Eingangsbeispiele int16t insamp BUFFERLEN zu halten. Definieren SAMPLES 25. FIR init void firFixedInit void memset insamp, 0, sizeof insamp. Speichern Sie neue Eingabeproben int16t firStoreNewSamples int16t inp, int length setzen Sie die neuen Samples an das High-End des Puffer Memcpy Insamp MAXFLTLEN 1, Inp, Länge sizeof int16t geben Sie den Ort, an dem die Filterung Rückkehr Insamp MAXFLTLEN 1. verschieben bearbeitete Samples ungültig FirMoveProcSamples int Längenverschiebung Eingabe Samples zurück in der Zeit für das nächste Mal memmove Insamp 0, Insamp Länge, MAXFLTLEN 1 sizeof int16t. Die FIR-Filterfunktion void firFixed int16t coeffs, int16t input, int16t output, int length, int filterLength int32t acc accumulator für MACs int16t coeffp Zeiger auf Koeffizienten int16t inputp Zeiger auf Eingangsmuster int n int k. Den Filter auf jede Eingangsabtastung anwenden für n 0 n Länge n berechnen Ausgang n Koeffekkoeffizienten Eingangspotential n Last Rundungskonstante acc 1 14 Durchführen der Multiplikation - kumulieren für k 0 k 0x3fffffff acc 0x3ffffff else if acc 15. Tiefpass-Cutoff-Frequenz 1000Hz, Abtastfrequenz 8915Hz definieren FILTERLEN 16 int16t coeffs FILTERLEN 0xFF45, 0xFE83, 0xFDB2, 0xFFC9, 0x088E, 0x18A4, 0x2B29, 0x37AF, 0x37AF, 0x2B29, 0x18A4, 0x088E, 0xFFC9, 0xFDB2, 0xFE83, 0xFF45.PORTA 0x00 DDRA 0x00 PORTB 0x00 DDRB 0xff PORTC 0x00 DDRC 0xff PORTD 0x00 DDRD 0x20 PIND 5 Filterausgang. void InitADC void ADMUX ADCVREFTYPE 0xff Kanal auswählen 0 ADCSRA 0xC4 ADC-Start aktivieren 1-stufige Umwandlung. int16t ReadADC unsigned char channel int16t ADCValue. ADMUX Kanal ADCVREFTYPE 0xff Select channel. delayus 10 Verzögerung benötigt Für die Stabilisierung der ADC-Eingangsspannung. ADCSRA 0x40 Start-Konvertierung. while ADCSRA 0x10 Prüfen Sie, ob die Konvertierung fertig ist. ADCSRA 0x10 Clear Conversion bereit Flag durch Setzen der Bit. ADCValue ADCL Lesen 8 niedrige Bits erste wichtige ADCValue int ADCH 8 Lesen Sie 2 hohe Bits Und multiplizieren mit 256.void Timer1 void Timer Zähler 1 Initialisierung Taktquelle System Uhr Uhrzeit 8000 000 kHz Modus 8 Bit Pulsbreite Modulation OC1A Ausgang Nicht-Inv OC1B Ausgang Discon PWM Ausgangsfrequenz ist verdoppelt Noise Cancer Off91,09 Eingang Capture auf fallende Flanke. TCCR1A 0x91 TCCR1B 0x09 TCNT1H 0x00 TCNT1L 0x00 ICR1H 0x00 ICR1L 0x00 OCR1AH 0x00 OCR1AL 0x00 OCR1BH 0x00 OCR1BL 0x00. Initialisierung aller Geräte cli Alle löschen Interrupts InitPort InitADC timer1.int Größe int16t input SAMPLES int16t output SAMPLES int16t inp. Initialisierung des Filters firFixedInit. Verarbeiten alle Samples lesen Samples aus Dateigröße fread input, sizeof int16t, SAMPLES, infid input SAMPLES ReadADC 0x00 speichert neue Samples im Arbeitsfeld inp firStoreNewSamples input SAMPLES, size. Wenden Sie jeden Filter firFixed coeffs, inp, output, size, FILTERLEN. Verschieben bearbeitete Samples firMoveProcSamples Größe bei Größe 0. Externer Interrupt s Initialisierung INT0 Aus INT1 Aus MCUCR 0x00 MCUCSR 0x00. Timer s Zähler s Interrupt s Initialisierung TIMSK 0x83. Analoge Komparator-Initialisierung Analoger Komparator Aus Analog-Komparator Eingang Aufzeichnung durch Timer Zähler 1 Aus ACSR 0x80 SFIOR 0x00.sei Globale Interrupt aktivieren. PWM1DCReg Ausgang Ausgang für filter. PORTB Toggle Ausgang Port zur Messung der ISR Sampling Rate PORTC ADCH Überprüfen Sie das ADCH Status Ergebnis. Es gibt eine Reihe von Dingen falsch mit Ihrem Code Es scheint, Sie lesen nur ein Beispiel zu einem Zeitpunkt, so wäre es sinnvoll, die definieren SAMPLES auf 1 oder verwenden Sie einfach eine Variable anstelle eines Arrays Die Größe war ursprünglich die Anzahl der Samples lesen aus Datei in meinem Beispiel Du solltest einfach 1 stattfinden, wenn du 1 Probe zu einer Zeit machst. Die Do-Loop sollte vollständig eliminiert werden, da du nicht mehr aus einer Datei liest. Du solltest entweder den Timer-Interrupt abbrechen oder einen ISR schreiben So dass man aus dem ADC regelmäßig 8000 oder 8915 mal pro Sekunde lesen kann, beurteilt durch Kommentare in deinem Code Und du musst wahrscheinlich deinem Ausgaberegister schreiben, jedesmal wenn du eine neue Ausgabe hast. Ich würde auch empfehlen, mit einem einfacheren Programm zu beginnen Sie lesen einfach den ADC und geben dann das aus, was du gelesen hast. Sobald du das gearbeitet hast, geh in den Filtercode ein. Ich hoffe das hilft. Shawn, Danke für deinen Führer und Vorschlag Ich bin neu bei der Programmierung der Programmierung Ich muss zuerst sehr einfacher anfangen Beispiel Ich bin sehr interessiert zu lernen Programmierung der Controller, wenn möglich bitte vorschlagen, wie soll ich anfangen Ich habe Anfang Kenntnisse der AVR-Architektur ATmega-Serie 8-Bit-Mikrocontroller und ich benutze AVR Studio für die Programmierung der Controller Bitte führen Sie mir, wie sollte ich beginnen Arbeiten an controller. Abdul Mein Rat wäre, mit einigen Beispielprogrammen zu beginnen, die mit Ihrem Entwicklungsinstallationssatz oder - werkzeugen kommen, oder anderswo und stellen Sie sicher, dass Sie sie richtig arbeiten können Dann versuchen Sie, durch das Ändern dieser Programme zu experimentieren , Versuchen Sie, Ihr eigenes Programm zu starten Beginnen Sie mit etwas einfachem wie das Einrichten des ADC und das Lesen von ihm Dann fügen Sie mehr Funktionalität ein Schritt zu einer Zeit Hinzufügen irgendein Code, um den Timer einzurichten und zu überprüfen, dass es funktioniert Add Code, um den Timer-Interrupt abzurufen Dann versuchen Sie es Codierung einer Interrupt-Service-Routine ISR Dann fügen Sie Code an die ISR, um den ADC zu lesen Der Trick ist, eine kleine Menge an Code zu einem Zeitpunkt zu schreiben und zu überprüfen, dass es jeden Schritt des Weges funktioniert Das ist in der Regel einfacher als das Schreiben einer ganzen Reihe von Code Zu einer Zeit, und dann versuchen, alles auf einmal zu debuggen, vor allem, wenn Sie etwas tun, was neu für Sie ist. Darf Shawn, Vielen Dank für Ihre geschätzten Vorschlag Und ich freue mich auf Ihre Hilfe, wenn ich ein Problem in der Programmierung gefunden In der Zukunft Vielen Dank wieder. Shawn, ich versuche, einen grafischen Equalizer mit FIR-Filtern zu machen und das war schon sehr hilfreich, aber ich habe mich gefragt, ob Sie irgendwelche Informationen darüber haben, wie man den Gewinn an die Ausgabe jedes Bandes anwendet. Hi Joseph Für einen grafischen Equalizer möchten Sie eine Verstärkung an jedes Band anwenden, indem Sie das Endergebnis der Filterung um eine Zahl zwischen 0 und 1 multiplizieren. Jeder Filter sollte also eine maximale Verstärkung von 1 bei der Mittenfrequenz haben und dann sollte man einen Satz haben Der Gewinne für jedes Band Es ist am besten, die Gewinne in dB deciBels auszudrücken, wenn man eine grafische Darstellung oder Steuerung wie ein Schieberegler ausführt. Die Verstärkung in dB ist 20 log10 g, wobei g der Multiplikationswert zwischen knapp über 0 und 1 ist. Dann entspricht -6 dB Zu einer Verstärkung von etwa 0 5 Das ist 20 log10 0 5 ist ungefähr -6 Die umgekehrte Formel ist g pow10 G 20 wobei G die Verstärkung in dB ist. Wenn also die Verstärkung -24 dB beträgt, ist der Multiplikatorwert g pow10 -24 20 0 063 Der Grund für die Verwendung von Decibels ist, weil die Wahrnehmung der Lautheit folgt einer logarithmischen Skala. Ich hoffe, dass hilft Ihnen. Hi Shawn, Great Tutorial Ihr Blog hat viel mehr praktische Sachen als die meisten Signalverarbeitung Bücher Ich habe ein paar Follow-up-Fragen auf Ihr Tutorial und es wäre toll, wenn Sie mich in die richtige Richtung zeigen könnten. Ich versuche, in Hardware-Verilog ein 32-Bit-Mac mit 2 16-Bit-Eingängen zu implementieren Wenn ich das 32-Bit-Ergebnis in einem 16-Bit-Register speichern möchte, Verstehen, dass für Fixpunkt signiert signierte Multiplikation müssen wir nur ohne Rundung Extrakt Bit 30 bis 15 und nicht 31 wegen der Doppel-Zeichen.1 Bin ein wenig verwirrt, wenn ich brauche andere Hardware für signierte fraktionale Multiplikation und reine Integer multiplizieren Say ich verwenden Zwei getrennte 16-Bit-Register zum Speichern des 32-Bit-Ergebnisses der Multiplikation Denken Sie, dass Sie nur einen bedingten Shifter zwischen dem 32-Bit-Multiplikator-Ergebnis unmittelbar nach der Multplier-Hardware verwenden und kurz vor dem Speichern in 2 separaten Registern ausreichen würde. Der bedingte Shifter, der von 1 nach links verschoben wird Für fraktionale Multiplikation und Verschiebung von 0 für Integer Multiplikation. Thanks für den Kommentar Ihre zweite Frage scheint verloren zu sein Um Ihre erste Frage zu beantworten, sollten Sie in der Lage sein, den gleichen Multiplikator für beide Integer und Fixpunkt Multiplikation verwenden, so wie Sie haben Beschrieben Für den Fixpunkt-Multiplikator gibt es einen speziellen Fall, den Sie sich bewusst sein müssen, der multipliziert -1 um -1, wobei -1 0x8000 in Bruchteil Q 15 ist. Wenn Sie 0x8000 um 0x8000 multiplizieren, wird das Ergebnis 0x4000 sein, 0000 Wenn du das verlässt, dann gehst du am Ende mit 0x80000000, so dass das Endergebnis ist, dass -1 mal -1 gleich -1 ist. Einige Möglichkeiten, dies zu behandeln sind.1 Niemals multiplizieren -1 um -1 2 Sättigen Sie das Ergebnis an 0x7FFF, FFFF 3 Heben Sie ein Überlauf-Flag an und behandeln Sie den Fehler irgendwie. Ich hoffe, dass hilft. Mean Filtermon Namen Bedeutende Filterung, Glättung, Mittelung, Box Filtering. Brief Beschreibung. Mean Filterung ist eine einfache, intuitive und einfach zu implementieren Methode der Glättung von Bildern , Dh Verringerung der Menge der Intensität Variation zwischen einem Pixel und dem nächsten Es wird oft verwendet, um Rauschen in Bildern zu reduzieren. How It Works. Die Idee der mittleren Filterung ist einfach, jeden Pixel-Wert in einem Bild mit dem mittleren Mittelwert seiner zu ersetzen Nachbarn, einschließlich sich selbst Dies hat die Wirkung der Beseitigung von Pixelwerten, die nicht repräsentativ für ihre Umgebung sind. Die mittlere Filterung wird gewöhnlich als Faltungsfilter betrachtet. Wie andere Windungen basiert sie auf einem Kernel, der die Form und Größe der zu entnehmenden Nachbarschaft darstellt Berechnen des Mittels Oft wird ein 3 3-Quadrat-Kernel verwendet, wie in Abbildung 1 gezeigt, obwohl größere Kernel zB 5 5 Quadrate für eine stärkere Glättung verwendet werden können. Beachten Sie, dass ein kleiner Kern mehrfach angewendet werden kann, um ein ähnliches zu erzeugen Nicht identische Wirkung wie ein einziger Durchlauf mit einem großen Kernel. Figur 1 3 3 Mittelwertbildung Kernel oft in mittleren Filteringputing die einfache Faltung eines Bildes mit diesem Kernel führt die mittlere Filterung Prozess. Guidelines für Use. Mean Filterung wird am häufigsten als verwendet Eine einfache Methode zur Reduzierung von Rauschen in einem Bild. Wir veranschaulichen den Filter mit. Sie das Original von Gaußschen Rauschen mit einem Mittelwert von Null und eine Standardabweichung von 8. verkürzt die Wirkung der Anwendung eines 3 3 Mittelwertes Hinweis, dass das Rauschen ist Weniger scheinbar, aber das Bild wurde erweicht Wenn wir die Größe des mittleren Filters auf 5 5 erhöhen, erhalten wir ein Bild mit weniger Rauschen und weniger hochfrequenten Details, wie in gezeigt. Das gleiche Bild, das durch das Gaußsche Rauschen stärker beschädigt wurde Mittelwert von null und a von 13 ist gezeigt in ist das Ergebnis der mittleren Filterung mit einem 3 3 Kernel. Eine noch anspruchsvollere Aufgabe wird bereitgestellt durch. Zeigt die Wirkung der Glättung der lärmenden Bild mit einem 3 3 mittleren Filter Da das Schuss Rauschen Pixel-Werte sind oft sehr unterschiedlich von den Umgebungswerten, sie neigen dazu, den durch den mittleren Filter berechneten Pixel-Durchschnitt signifikant zu verzerren. Es wird stattdessen ein 5-5-Filter verwendet. Dieses Ergebnis ist keine signifikante Verbesserung der Rauschunterdrückung und darüber hinaus ist das Bild Jetzt sehr verschwommen. Diese Beispiele veranschaulichen die beiden Hauptprobleme mit der mittleren Filterung, die sind. Ein einzelnes Pixel mit einem sehr nicht repräsentativen Wert kann den Mittelwert aller Pixel in seiner Nachbarschaft erheblich beeinflussen. Wenn die Filterumgebung eine Kante überspannt, wird der Filter Wird neue Werte für Pixel auf der Kante interpolieren und so wird diese Kante verschwimmen Dies kann ein Problem sein, wenn scharfe Kanten in der Ausgabe erforderlich sind. Beide dieser Probleme werden durch den Median-Filter angepackt, die oft ein besserer Filter für die Reduzierung von Lärm als die Mittlerer Filter, aber es dauert länger, um zu berechnen. Im allgemeinen wirkt der mittlere Filter als Tiefpassfrequenzfilter und reduziert daher die im Bild vorhandenen räumlichen Intensitätsderivate. Wir haben diesen Effekt bereits als Erweichung der Gesichtsmerkmale gesehen Beispiel Nun betrachten wir das Bild, das eine Szene mit einem breiteren Spektrum unterschiedlicher Raumfrequenzen darstellt. Nach dem Glätten einmal mit einem 3 3 mittleren Filter erhalten wir. Notice, dass die geringe räumliche Frequenzinformation im Hintergrund nicht wesentlich durch Filterung beeinflusst wurde, sondern die Sobald die scharfen Kanten des Vordergrundgegenstandes spürbar geglättet worden sind Nach dem Filtern mit einem 7 7-Filter erhalten wir eine noch dramatischere Darstellung dieses Phänomens dieses Ergebnis, das durch die Übergabe eines 3 3 Filters über das Originalbild dreimal inmon. Varianten erhalten wird. Variationen des hier diskutierten Mittelglättungsfilters umfassen die Schwellenwertbildung, wobei die Glättung unter der Bedingung angewendet wird, dass der mittlere Pixelwert nur geändert wird, wenn die Differenz zwischen ihrem ursprünglichen Wert und dem Durchschnittswert größer als eine voreingestellte Schwelle ist. Dies hat den Effekt, dass Rauschen Ist mit einem weniger dramatischen Verlust in Bilddetails geglättet. Andere Faltungsfilter, die nicht den Mittelwert einer Nachbarschaft berechnen, werden auch oft zum Glätten verwendet. Eines der häufigsten ist das Gaußsche Glättungsfilter. Interaktives Experimentieren. Sie können interaktiv experimentieren Dieser Operator, indem du hier klickst. Der mittlere Filter wird mit einer Faltung berechnet Kannst du an irgendwelche Art und Weise denken, in der die besonderen Eigenschaften des mittleren Filterkerns zur Beschleunigung der Faltung verwendet werden können Was ist die rechnerische Komplexität dieser schnelleren Faltung Rand-Detektor auf dem Bild. und beachten Sie die Stärke des Ausgangs Dann legen Sie eine 3 3 mittlere Filter auf das Originalbild und führen Sie den Flankendetektor wieder Kommentar auf die Differenz Was passiert, wenn ein 5 5 oder ein 7 7 Filter verwendet wird 3 3 Mittelfilter zweimal nicht ganz das gleiche Ergebnis wie die Anwendung eines 5 5-Mittel-Filters einmal Allerdings kann ein 5 5 Faltungskern konstruiert werden, was äquivalent ist. Wie sieht dieser Kernel aus. Erfassen Sie einen 7 7 Faltungskern, der ein Äquivalent hat Effekt auf drei Pässe mit einem 3 3 Mittelfilter. Wie denkst du, der mittlere Filter würde mit Gaußschen Rauschen fertig werden, die nicht symmetrisch um null waren. Versuchen Sie einige Beispiele. Roche und R Thomas Computer Vision Ein erster Kurs Blackwell Scientific Publications, 1988, pp 32 - 34.E Davies Machine Vision Theorie, Algorithmen und Praktiken Academic Press, 1990, Chap 3.D Vernon Machine Vision Prentice-Hall, 1991, Chap 4.Lokale Informationen. Spezifische Informationen über diesen Operator finden Sie hier. Mehr allgemeine Beratung Über die lokale HIPR-Installation ist im Einführungsbereich der lokalen Informationen verfügbar.
Comments
Post a Comment