Strukturerkennung Kreisdetektion

moetox

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich arbeite zur Zeit an einer Strukturerkennung mittels Abstandsmessung und muss nun einen Kreisradius/-durchmesser detektieren:
Skizze.JPG

Ich habe zu jedem Xwert in einem Array einen Abstandswert Y und muss dies nun irgendwie weiterverarbeiten. Sodass ich hinterher den Radius meines Kreises bestimmen kann ... Alle Messwerte rauschen natürlich daher kann ich leider nicht über drei Punkte meinen Kreis zusammenbauen.
Habt ihr Ideen? Ich bin für jeden Ansatz oder Kommentar dankbar.
 
Zuletzt bearbeitet:
Hallo,
eine Idee hätte ich - einen Ansatz aktuell nicht ...
Wenn dein vorrangiges Problem das Rauschen ist dann solltest du die Messwerte zunächst glätten und schauen, wie weit du dich so einer Ideal-Linie annähern kannst.
Als nächstes käme dann die Bestimmung, wie groß der Kreisbogen oben ist. Daraus liesse sich dann der Durchmesser / Radius ermitteln ...

Gruß
Larry
 
Hab mir das angeschaut und glaube das löst mein erstes Teilproblem (Danke dafür!) allerdings werde ich auch so keinen perfekten Kreis erhalten den ich mit rudimentären Geometriefunktionen berechnen kann.
Da muss entweder eine Erkennung vom Übergang von Gerade zu Kreis her wobei das nicht immer unter gleichem Winkel sein muss
oder
alternativ ein Kreisfindealgorithmus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,


wenn man das Rauschen effektiv minimieren kann (Filter) wäre es auch denkbar über die 1. und 2. Ableitung jeweils Krümmungskreise (http://de.wikipedia.org/wiki/Krümmungskreis) zu berechnen.
Aus den verschiedenen Kreisen (je Kurvenpunkt), kann man dann den Krümmungskreis zum Maximum der Kurve (gewichtet) mittel.
Natürlich wäre es auch möglich nur einen Krümmungskreis zum Maximum der Kurve zu berechnen, aber das sollte etwas ungenau sein (durch Messfehler).


Da müsste man ein wenig probieren...
 
Ausgehend von folgender Gleichung:

Halbkreis.jpg

kann man das Ganze nach r umstellen.

Wenn man den richtigen Koordinatenursprung wählt, was evtl. am kompliziertesten oder ungenau wird (kleinster gemessener Abstand minus Abstand Messausgangspunkt zum Kreis), kann man für alle Wertepaare x,y einen Radius errechnen. Ein Teil dieser Werte wird völlig daneben liegen, da nicht mehr auf dem Kreis liegen. Diese Werte eleminiert man, aus dem Rest könnte man den Mittelwert bilden, was dann einer Glättung entspricht.
 
Grade erst angemeldet und ich mag diese Forum jetzt schon! Ihr seid Klasse! :ROFLMAO:

@ebt'ler: Ich habe die Funktionen bei Wiki überflogen und festgestellt, dass die 2. Ableitung eine Rolle spielt, da ich aber diskrete Messwerte habe ist meine Funktion immer in Abschnitten linear d.h. für mich es würde ein Radius von unendlicher Länge berechnet. Oder bin ich gerade auf dem ganz falschen Dampfer?

@Ralle Da ich den Radius des Kreises nicht kenne kenne ich auch nur die X-Koordinate meines Ursprungs wie kann ich von da auf den y-Wert schließen?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Grade erst angemeldet und ich mag diese Forum jetzt schon! Ihr seid Klasse! :ROFLMAO:

@ebt'ler: Ich habe mir die Funktionen bei Wiki gerade überflogen und festgestellt, dass die 2. Ableitung eine Rolle spielt, da ich aber diskrete Messwerte habe ist meine Funktion immer in Abschnitten linear d.h. für mich es würde ein Radius von unendlicher Länge berechnet. Oder bin ich gerade auf dem ganz falschen Dampfer?

Die zweite Ableitung ist ja im diskreten wie im kontinuierlichen die Ableitung der ersten Ableitung. Nur das diese (durch die diskreten Anstände) für die Graden- Abschnitte nicht Null wird, sondern nur gegen Null geht.
Aber du hast recht. Für die Graden- Anteile geht der Radius gegen Unendlich (bzw. gegen einen recht großen Wert), denn ein Kreis mit "unendlich großen" Radius ist mathematisch eine Grade. Aber im Bereich des Kreises müsste sich der Wert deinen gesuchten Radius annähern.

Die unwahrscheinlich großen Werte für die Krümmungsradien müsste man dann raussortieren oder rausrechnen, da geben sich mehrere Möglichkeiten.
 
Dann verstehe ich aber nun nicht wie ich die Ableitung bilden sollte. Mit meiner vielleicht etwas naiven Herangehensweise wäre mein
f'(X) = (y(i+1)-y(i)) / (xi+1 - xi)

dabei komme ich durch die diskrete Form auf eine Grade bzw. Konstante.
 
Man hat x(t) und y(t) als parametrierte Funktionen, beide kann man zweimal nach der Zeit ableiten (in weiten Grenzen variabel).
Daraus kann kann dann den Krümmungsradius bestimmen.

Ich habe das mal recht rustikal in einer Excel- Tabelle getippt (durch meiner etwas rustikalen Datengenerierung muss der Radius >0,9 sein, anderenfalls werden die Rampen nicht mehr hinreichend angepasst, das könnte man aber auch beheben, sollte für den Test keine Rolle spielen)

Allgemein kann man die Prozedur auch noch anderweitig verfeinern.
 

Anhänge

  • Radius.ods.zip
    24,3 KB · Aufrufe: 9
Zuviel Werbung?
-> Hier kostenlos registrieren
Die 2. analog zur 1. Ableitung zu bilden war mir gestern nicht in den Sinn gekommen, Danke für die Tabelle.
Das System funktioniert solange wie die Punkte wirklich von einer Kreisbahn kommen sobald sie aber einer Störung unterliegen
(bei mir sind es +-0,025mm) und ich diese dann zB geometrisch Mittel kommt noch viel Falsches hinten heraus.
Ich versuch das mal weiter zu entwickeln.
 
Das Problem besteht darin, dass das Ableiten sehr stark auf schnelle Änderungen (Störungen) reagiert. Ich würde versuchen, die Messwerte vorher zu filtern (PT1?) und danach nochmal die Radien die man erhält zu mittel.

Wie gut das dann funktioniert kann ich kaum vorher sagen, vielleicht gibt es auch noch einen besseren Weg...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also: Ich habe meine Werte soweit verarbeitet, dass im Rahmen der Toleranz alles Rauschen "verschwunden" ist. Allerdings kann ich nun keinen neuen Datensatz aufnehmen, da meine Maschine schon beim Kunden steht wenn ich demnächst neue Werte habe werd ich sie hochladen.

In welche Richtung geht denn deine Idee?
 
Ich hätte mal versucht die Geradenabschnitte zu dedektieren, diese dann aus der Betrachtung heraus zu nehmen. Und mit den Verbleibenden Werten (des Kreisbogens) eine Regressionsrechnung durchgeführt (eventuell auch mehrmals mit Aussortieren).


Wie erfolgreich das ist kann ich im Voraus nicht sagen, hängt ein bisschen damit zusammen wie die Werte so proportioniert sind. Daher würde ich erstmal probieren wollen.
 
Wie gesagt wenn ich Werte habe stelle ich sie dir gerne zur Verfügung.

Ich habe auch schon über ein numerisches Verfahren nachgedacht, d.h. man nimmt den Punkt in der Spitze und legt dort Kreise mit wachsendem Radius an und schaut wo die Abstände zwischen Messpunkten und Kreis am geringsten sind, das wäre dann der gesuchte Kreis.
Allerdings habe ich keinen Schimmer wie man so etwas implementiert.

Alternativ, das wäre allerdings mit Kanonen auf Katzen schießen, eine Hough-Transformation.
 
Zurück
Oben