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

RANSAC- Linienerkennung

 

Hilbert86
Forum-Century

Forum-Century


Beiträge: 113
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2010, 22:41     Titel: RANSAC- Linienerkennung
  Antworten mit Zitat      
Hallo Leute

ich bin gerade dabei einen einfachen RANSAC-Alg zu implementieren. Dabei sollen in einem Binärbild Linen erkannt werden. Die Funktionsweise meines Alg. sollte folgender masen sein:
1.finde alle pixel mit dem wert 1 (also alle weißen pixel)
2.wähle 2 zufallspunkte aus und berechne diese gerade.
3.berechne die distanz aller pixel zu dieser geraden
4.zähle wieviele punkte eine bestimmte distanz R (consensus set) zur geraden haben und speichere diesen wert und die beiden punkte der geraden
5. wiederhole schritt 2-4 ca.1000 mal
6. aus der Ergebnis tabelle, wähle die gerade die die meisten punkte mit einer bestimmten distanz hat als gesuchte linie.


Jetzt habe ich diese Funktion implementiert aber bekomm nicht so die gewünschten ergebnisse. Kann mir vlt jemand helfen? oder sieht ihr den fehler ?


Code:
Farbbild = imread('testbild.bmp');

%In ein Binärbild umwandeln
Pic= im2bw(Farbbild);

%Alle Pixel mit Wert =1
[row,col]=find(Pic);
% Spalten und Zeilen
Ones=[row,col];

%Zufallspunkte wählen
a=1: size(col);
Erg=[];
for  k=1:100;
Zufallszahl1=a(ceil(rand(1,1)*length(a)));
Zufallszahl2=a(ceil(rand(1,1)*length(a)));


            x1=Ones(Zufallszahl1,2);
            y1=Ones(Zufallszahl1,1);
            x2=Ones(Zufallszahl2,2);
            y2=Ones(Zufallszahl2,1);
           
            A= (y2-y1);
            B= -(x2-x1);
            C= -A*x1 -B*y1;
           
            %alle weißen Punkte aus dem Bild
            xp=Ones(:,2);
            yp=Ones(:,1);
            %Distanz aller punkte zur geraden
            d= (A*xp+B*yp+C)/abs((sqrt(A^2+B^2))) ;
           
            %zähle wieviele punkte eine bestimmte distanz haben
            Schwellwert = 1 ;
%habe ich gerade geändert aber das zusammen zählen funktioniert nicht so wie es sein sollte dieser Teil ist wohl falsch???
            T=sum(-Schwellwert <= d <= Schwellwert);
           
            Werte=[x1 y1 x2 y2 T];
            Erg = cat(1,Erg,Werte);
end;      
%finde das maximum an T, und diese gerade ist die gesuchte gerade
            Maxi= max(Erg);
            index = (Erg(:,5) == Maxi(:,5));
            x1=Erg(index,1);
            y1=Erg(index,2);
            x2=Erg(index,3);
            y2=Erg(index,4);
            Result=[x1 y1 x2 y2 Erg(index,5)];

_________________

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