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

Schon wieder polyfit

 

R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2010, 11:25     Titel: Schon wieder polyfit
  Antworten mit Zitat      
Es geht immer noch um meine Kantendetektion.

Hab das auch das auch soweit ganz gut hinbekommen.
Kantenbild wird erstellt mit einer zero-cross_Methode.
Daraus erstelle ich mir ein Binärbild.
Nächster Schritt ist das Auslesen wo 1er (Kanten) sind
und lese die Umgebung ein.

testbereich =

0 0 0 1 1
1 1 1 1 1
1 1 1 0 0
0 0 0 0 0
0 0 0 0 0

Daraus lass ich mir dann mit polyfit die Orientierung berechnen.
Was meiner Meinung nach auch funktioniert.

Aber der Befehl hat Probleme damit, dass die zu den x-Werten(Spalten) mehrere y-Werte vorhanden sind.
Warning: Polynomial is badly conditioned. Add points with distinct X
values, reduce the degree of the polynomial, or try centering
and scaling as described in HELP POLYFIT.

Für Matrizen gitb es ja nach polyfit auch den Befehl polyvalm.
Gibt es so was auch für polyfit? Oder ist es ok, wenn ich es mit polyfit laufen lasse?

Danke


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2010, 08:40     Titel:
  Antworten mit Zitat      
Kann jemand dazu noch was sagen?

Vielen Dank
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.10.2010, 22:30     Titel: Re: Schon wieder polyfit
  Antworten mit Zitat      
Hallo R2D2,

Zitat:
Code:

testbereich =
     0     0     0     1     1
     1     1     1     1     1
     1     1     1     0     0
     0     0     0     0     0
     0     0     0     0     0
 

Daraus lass ich mir dann mit polyfit die Orientierung berechnen.
Was meiner Meinung nach auch funktioniert.

Aber der Befehl hat Probleme damit, dass die zu den x-Werten(Spalten) mehrere y-Werte vorhanden sind.

Es funktioniert Deiner Meinung nach gut, obwohl "der Befehl" Probleme damit hat? Das klingt eher, als würde es nicht gut funktionieren.

Aber welcher Befehl eigentlich? Wie verwendest Du die angegebene Matrix als Input für POLYFIT? Das ist ein wichtiges Detail, das wir nicht erraten können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2010, 07:43     Titel:
  Antworten mit Zitat      
Ich rede doch die ganze Zeit über polyfit. Was solls denn sonst sein?

Die 1er Einträge in der Matrix sind dann die Koordinaten:

Code:

 [x,y]=find(testbereich>0);
steigung=polyfit(x,y,1);
 


Was ich dabei rausbekomme schein richtig zu sein, ich weiss es aber nicht.
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 12.10.2010, 15:23     Titel:
  Antworten mit Zitat      
Das mag genau für diese Matrix passen.
Falsch ist es aber sicher für:
testbereich=
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0

da wird dann nur Index 1:15 betrachtet und liefert falsche Ergebnisse!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.10.2010, 21:50     Titel: Re: Schon wieder polyfit
  Antworten mit Zitat      
Hallo R2D2,

Aha, Du ermittelst die Indices mit FIND.
Wie wäre es, wenn Du die Mittelwerte über die Zeilen bildest?
Code:

testbereich =
     0     0     0     1     1
     1     1     1     1     1
     1     1     1     0     0
     0     0     0     0     0
     0     0     0     0     0
% ==>
testvector = [(3+4)/2, (3+4)/2, (3+4)/2, (4+5)/2, (4+5)/2];
 

Das wäre dann für POLYFIT verdaubar.
Allerdings bleibt das Problem der vertikalen Linien.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2010, 22:10     Titel:
  Antworten mit Zitat      
Hallo Jan,

bin auch darauf gekommen, dass es so nicht richtig ist.
Hab den testbereich auch in eine 1er Matrix kopiert,
um dem Problem mit den Vertikalen zu begenen.
Ich versteh diese Zeile mal gar nicht:
Code:
testvector = [(3+4)/2, (3+4)/2, (3+4)/2, (4+5)/2, (4+5)/2];
 

Und wie würdest du das Problem mit der Kantenorientierung angehen?
Hänge da wirklich dran und ist wohl der Knackpunkt in der Arbeit.

Besten Dank!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.10.2010, 22:29     Titel:
  Antworten mit Zitat      
Hallo R2D2,

Du hattest eine Matrix mit Nullen und Einsen angegeben. Ich habe nun für jede Spalte den Mittelpunkt der Einsen berechnet:
Code:
testvector = [(3+4)/2, (3+4)/2, (3+4)/2, (4+5)/2, (4+5)/2];
% bzw.:
testvector = [3.5, 3.5, 3.5, 4.5, 4.5];
 

Wenn Du dies als Y-Input für POLYFIT verwendest und 1:5 als X-Input, gibt es keine Warnungen für ein schlecht-konditiniertes Problem.

Nun bleibt der Ansatz aber für solche Bereiche wackelig:
1 1 0 0 0
1 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

In welcher Form benötigst Du denn die Kanten-Information?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2010, 22:35     Titel:
  Antworten mit Zitat      
Ein Winkel reicht.
Wie oben erwähnt das:
t=
1 1 0 0 0
1 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
kopiere ich um zu:
a=zeros(7)
a(2:6,2:6)=t.
Darin sollte es doch "stabiler" werden?
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2010, 07:22     Titel:
  Antworten mit Zitat      
[quote="Jan S"]Hallo R2D2,

Du hattest eine Matrix mit Nullen und Einsen angegeben. Ich habe nun für jede Spalte den Mittelpunkt der Einsen berechnet:
[code]testvector = [(3+4)/2, (3+4)/2, (3+4)/2, (4+5)/2, (4+5)/2];


[quote/]

Ok hab das nicht kapiert, weil die Indizierung eigentlich anders herum ist Confused

Eigtnlich dürfte ich auch keine solche Matritzen erhalten:
testbereich=
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
Weil vorher ein Kantendetektionsalgo drüberläuft und solche Matritzen nicht entstehen dürften!

Gruß
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2010, 15:16     Titel:
  Antworten mit Zitat      
Wollte das noch mal aufgreifen.

WIe gesagt solche Matrizen wie oben:

testbereich=
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0

sondern:

testbereich =
1 1 1 1 1 1 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 1 0 0 0 1
1 1 1 1 1 1 1
winkel =
359.2203
testbereich =
1 1 1 1 1 1 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 1 0 0 0 1
1 0 1 0 0 0 1
1 1 1 1 1 1 1
winkel =
358.8377

Den Winkel will ich mir dann so berechnen lassen:

Code:

[x,y]=find(testbereich>0);
       steigung=polyfit(y,x,1);

        winkel=atand(steigung);
        winkel=mod(winkel(1),360)


ABer wie man sieht wenn man sich den Testbereich ansieht, kann der Winkel nicht stimmen. Hat jemand einen Vorschlag?
Vielen Dank
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2010, 16:02     Titel:
  Antworten mit Zitat      
Hallo R2D2,

Zitat:

WIe gesagt solche Matrizen wie oben:
testbereich=
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
sondern:

???

Zitat:

testbereich =
1 1 1 1 1 1 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 1 0 0 0 1
1 1 1 1 1 1 1
winkel =
359.2203

Welchen Winkel würdest Du denn hier erwarten? Ich sehe in dem Bild 5 Geraden. Wozwischen möchtest Du den Winkel denn bestimmen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2010, 17:49     Titel:
  Antworten mit Zitat      
Den 1er "Kranz" hab ich gemacht um die ganze Matrix einzubeziehen.
Was sich ja wieder rauskürzt.
Is kein Ding das wieder rückgängig zu machen.
Wie würdest denn du die Info:


0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 1 0 0 0
nutzen um daraus einen einen Winkel abzuleiten?

Danke
P.S. Es geht um Ablenkung an Grenzflächen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2010, 20:27     Titel:
  Antworten mit Zitat      
Hallo R2D2,

ich frage nochmal: Welchen Winkel würdest Du für dieses Bild denn erwarten?

Da Du mehrer Y-Werte zum gleichen X-Wert hast, ist ein Orthogonaler Fit vielleicht hilfreich:
http://www.mathworks.com/matlabcentral/fileexchange/16800

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
R2D2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2010, 07:38     Titel:
  Antworten mit Zitat      
grob 85 Grad. Wieso?
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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