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

Kreise im Bild finden, Geschwindigkeit erhöhen

 

skyforce
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2012, 12:18     Titel: Kreise im Bild finden, Geschwindigkeit erhöhen
  Antworten mit Zitat      
hallo zusammen,

ich möchte in einem Bild Kreis-Paare finden, die Folgende Eigenschaften haben:

- nur Runde Kreise
- Nur Kreise-Paare finden, bei den das Verhältnis= Radius / Abstand der beiden Kreise nahe bei 0.5 ist.

Hab soweit auch schon hinbekommen, möchte aber gern die Geschwindigkeit erhöhen:

Code:
ver=0.5                                                           % Ideal-Verhältnis

anfang=imread('kreise.png');

bild=rgb2gray(anfang);                                              % Grau-stufe
bild=imadjust(bild);                                                    % Kontrast erhöhen
bild=im2bw(bild,0.5);                                                 % Binarisieren
bild=bwareaopen(bild,30);                                         % Entferne objekte mit weniger als 30 pixel  
bild=imclearborder(bild,8);                                         % Alle zusammenhängende Punkte am Rand werden entfernt

daten=regionprops(bild,'Area','Centroid',...                % Fläche, Zentrum, Durchmesser, Umfang der Objekte auslesen
      'EquivDiameter','Perimeter');  

rund_obj=daten(4*pi.*[daten.Area]./[daten.Perimeter].^2 >=0.9); % Nur Kreise nehmen, die rund genug sind.

subplot(1,2,1);
imshow(anfang)

subplot(1,2,2);
imshow(bild);
hold on;

for i=1:length(rund_obj)-1
    for j=i+1:length(rund_obj)

        m1=rund_obj(i).Centroid;    

        radius1=rund_obj(i).EquivDiameter/2;

        m2=rund_obj(j).Centroid;    
 
        radius2=rund_obj(j).EquivDiameter/2;

        alpha=atand((m1(2)-m2(2))/(m2(1)-m1(1)));                 % Winkel um den Abstand auszurechnen

        abstand=abs((m2(2)-m1(2))/sind(alpha));

        ver1=radius1/diff;                                                          % Verhältnis des 1.Kreises zu Abstand

        ver2=radius2/diff;                                                          % Verhältnis des 2.Kreises zu Abstand

        if(abs(ver1-ver)<=0.03 && abs(ver2-ver)<=0.03)
             
            rectangle('Position',[m1(1)-radius1,  m1(2)-radius1, 2*radius1,2*radius1],  'EdgeColor','y','LineWidth',1.5);           % 1.Kreis wird markiert
            rectangle('Position',[m2(1)-radius2, m2(2)-radius2, 2*radius2, 2*radius2],'EdgeColor','y','LineWidth',1.5);           % 2.Kreis wird markiert

        end
    end
end

hold off;


Ich hab das über 2 For-Schleifen gelöst, wenn in einem Bild 10 Objekte sind, dann sind das 45 Vergleiche die ich machen muss!
Für den gesammte Berechnung braucht Matlab ca. 2.936s

Ich freue mich auf Eure Vorschläge
skyforce

kreise.png
 Beschreibung:

Download
 Dateiname:  kreise.png
 Dateigröße:  512.18 KB
 Heruntergeladen:  936 mal
Private Nachricht senden Benutzer-Profile anzeigen


skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2012, 14:43     Titel:
  Antworten mit Zitat      
warum braucht Matlab für folgende Zeilen so lang, es sind doch nur einfache Rechnungen:

Code:
m1=rund_obj(i).Centroid;    

        radius1=rund_obj(i).EquivDiameter/2;

        m2=rund_obj(j).Centroid;    
 
        radius2=rund_obj(j).EquivDiameter/2;

        alpha=atand((m1(2)-m2(2))/(m2(1)-m1(1)));                 % Winkel um den Abstand auszurechnen

        abstand=abs((m2(2)-m1(2))/sind(alpha));

        ver1=radius1/diff;                                                          % Verhältnis des 1.Kreises zu Abstand

        ver2=radius2/diff;                                                          % Verhältnis des 2.Kreises zu Abstand
 


Ich hab gerade gemessen, es sind 0.010134 s
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.