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

Probleme mit Medianfilter

 

MatlabNeuling2017
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 26.06.2018, 16:58     Titel: Probleme mit Medianfilter
  Antworten mit Zitat      
Hallo Matlab-Freunde,

ich muss aktuell leider meinen Code komplett zerlegen, weil ich für meine Ergebnisse immer die gleichen Werte herausbekomme, was aber nicht sein kann.

Meine Frage nun diesmal zum Medianfilter:
Ich filtere die Z-Werte einer Punktwolke mit dem Medianfilter wie folgt:
Zitat:

Zfiltmedian1 = medfilt1(zqneuneu1,mf,[],md,'includenan','truncate');

mf ist dabei die Filterordnung. md die Dimension. Diese Parameter variiere ich.
Zqneuneu1 sind dabei die alten Z-Werte und Zfiltmedian1 die Neuen.

Wenn man nun beide vergleicht, kommen exakt die gleichen Zahlen heraus.
Warum? Warum verändern die sich nicht?

Ich habe außerdem die blocksize ausgeschaltet []. Liegt es evtl. daran?

Grüße,
MatlabNeuling
Private Nachricht senden Benutzer-Profile anzeigen


MatlabNeuling2017
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 26.06.2018, 17:57     Titel:
  Antworten mit Zitat      
Nachtrag:

Wenn ich die Blocksize mit z.b. 3 oder 5 oder ähnliches einschalte, kommen trotzdem genau die gleichen Werte wieder heraus, wie ich reinstecke.

Langsam verzweifle ich, weil ich nicht weiß, was ich bei diesem einfachen bBefehl falsch mache....
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2018, 19:05     Titel: Re: Probleme mit Medianfilter
  Antworten mit Zitat      
Hallo MatlabNeuling2017,

Bitte poste ein lauffähiges Beispiel, dass Deine Beobachtungen reproduziert.
Wie vergleichst Du die Werte denn?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabNeuling2017
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 26.06.2018, 19:41     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich öffne die Input-Daten und die Output-Daten und vergleiche eben die Zahlen. Und dabei sind die Zahlen komplett gleich, weshalb ich bezweifle, ob der Medianfilter Anwendung findet.

Ich habe jetzt zur Einfachheit die Matrix zqneuneu1 mit weniger Daten angegeben.
Code:

mf = 50
md = 3
property3 = 'includenan'; %Eigenschaft für NaN-Bedingung
property4 = 'truncate'; %Eigenschaft für Endpunktfilterung
zqneuneu1 = [1.3730,1.3729,1.3733,1.3729; 1.3729,1.3730,1.3724,1.3728; 1.3731,1.3722,1.3723,1.3730;1.3730,1.3729,1.3733,1.3729];

Zfiltmedian1 = medfilt1(zqneuneu1,mf,[],md,property3,property4);
 


Grüße,
MatlabNeuling2017
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2018, 21:41     Titel:
  Antworten mit Zitat      
Hallo MatlabNeuling2017,

Hast Du Dir mal die Dokumentation den Befehls medfilt1 durchgelesen?
Code:
help medfilt1

Dort ist beschrieben, dass das 4 Input Argument die Dimension ist, über die gefiltert wird. Du hast eine 2D-Matrix als Input und filterst über die Dimension 3:
Code:
md = 3;
Zfiltmedian1 = medfilt1(zqneuneu1,mf,[],md,property3,property4);

Die 3. Dimension hat die Länge 1 (wie alle angehängten Dimensionen in Matlab). Also ist der Media darüber genau der vorhandene Wert.

Während die Namen "Zfiltmedian1" und "zqneuneu1" viel zu umständlich sind und einem das Tippen nur schwer machen, ist "md" etwas knapp. Ich kann daraus nicht schließen, was der Zweck dieser Variablen ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabNeuling2017
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.06.2018, 12:14     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort.
Danke auch für den Hinweis, dass die Variablennamen zu lang oder zu kompliziert sind. Ich werde es mir beim nächsten Mal zu Herzen nehmen. Allerdings gibt es ja auch die Copy&Paste-Funktion Wink
Zunächst einmal:
md steht für Median Dimension, mf steht für Median Filterordnung.

Ich verstehe auch trotz Studium der Hilfe nicht so ganz was die Filterordnung bewirkt.
Die Dimension, soweit ich weiß, ist die Größe des Filterkernels der drüberläuft.
Aber was passiert mit der Ordnung?

Was meinst du mit
Zitat:
Die 3. Dimension hat die Länge 1
?

Mein Ziel ist es einfach die Z-Werte einer Fläche, die ich als Matrix habe bzw. auch in einen Vektor wandeln kann, zu glätten.
Aber die Frage ist natürlich wie stark muss/kann ich glätten ohne die eigentliche Struktur darunter nicht zu verwischen.
Auch fehlen mir dazu die Erfahrungswerte wie die einzelnen Parameter Dimension oder Ordnung zahlenmäßig am Besten zusammen verwendet werden sollten.

Hast du darin Erfahrung oder kannst du mich ein wenig aufklären?

Grüße,
MatlabNeuling2017
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2018, 13:37     Titel:
  Antworten mit Zitat      
Hallo MatlabNeuling2017,

Die Dimension ist die Dimension des Input-Arrays, entlang der gefiltert wird.
Code:
A = rand(2,3)
size(A, 1)
size(A, 2)
size(A, 3)

Wenn Du z.B. sum anwendest, kannst Du entlang der Zeilen oder Spalten summieren. Das gleiche gilt für das Filtern: Du has eine 2D-Matrix als input und filterst entlang der 3. Dimension.
Nun gilt in Matlab die Konvention, dass abschließende Dimensionen der Länge 1 immer ignoriert werden. Deswegen hat z.B. eine 2D Matrix eine 7. Dimension der Länge 1:
Code:
A = rand(2, 3)
size(A, 7)


Zitat:
Die Dimension, soweit ich weiß, ist die Größe des Filterkernels der drüberläuft.

Nein, siehe oben.

Probiere es mal mit dem einfacheren Befehl sum aus:
Code:
A = rand(2, 3)
sum(A, 1)
sum(A, 2)

Jetzt klar? Du möchtest eine Matrix glätten. Dann ist die Dimension entweder 1 (entlang der Spalten) order 2 (entlang der Zeilen).

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabNeuling2017
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.06.2018, 14:05     Titel:
  Antworten mit Zitat      
Servus Jan,

achso, jetzt verstehe ich was mit Dimension gemeint ist.
Dimension 1: spaltenweise
Dimension 2: zeilenweise

D.h. also ich kann mit medfilt1 entweder nur in Richtung der Zeilen oder nur in Richtung der Spalten glätten, aber beides gleichzeitg nicht, oder?
Je nachdem was ich für eine Dimension verwende, kann auch ein anderes Ergebnis entstehen.
Wenn ich medfilt2 verwende, kann ich zeilen- und spaltenweise gleichzeitg filtern, oder?

Noch einmal zur Klarstellung:
Ich habe aus einer mehrfach gekrümmten 3D-Ebene drei Vektoren mit x-,y-, und z-Werten.
Ich möchte nun das Rauschen der Ebene entfernen, also NUR die z-Werte glätten.

Wende ich jetzt den medfilt1 an oder ist es eher ratsam medfilt2 oder medfilt3 zu verwenden?

Grüße,
MatlabNeuling2017
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 29.06.2018, 14:00     Titel:
  Antworten mit Zitat      
Hallo MatlabNeuling2017,

falls du die z-Werte sowohl in x- als auch in y-Richtung glätten willst sollte das am besten mit medfilt2 funktionieren. Musst dir dann halt noch die Größe des Filters anpassen.
Für medfilt2 brauchst du allerdings die "Image Processing Toolbox". Musst mal schauen ob du die auch zur Verfügung hast.

Beim Filtern musst du nur aufpassen, dass du dir nichts "kaputt" filterst. Filter eignen sich nämlich auch ganz gut um Ergebnisse "etwas anzupassen" Very Happy

Grüße
Newbie Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabNeuling2017
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 28.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 29.06.2018, 16:57     Titel:
  Antworten mit Zitat      
Hallo matlab_newbie2015,

danke dir.

Grüße,
MalabNeuling2017
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.