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

Zahnradzähne zählen

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 15:17     Titel: Zahnradzähne zählen
  Antworten mit Zitat      
Hallo!

Ich möchte ein Programm schreiben, welches Zähne eines Zahnrades zählt. Allerdings habe ich bis jetzt keinen (vernünftigen) Ansatz dafür.

Meine Idee wäre gewesen, dass ich das Bild zuerst binarisiere und dann Label verteile, was aber nicht so gut klappt, da die Zähne ja mit dem Rad verbunden sind.

Ich habe ein Beispielbild angehängt, welches dieses Programm verarbeiten können soll.

Hat jemand einen Vorschlag dazu?

MfG,
Gast

Zahnrad01.jpg
 Beschreibung:
Zahnrad

Download
 Dateiname:  Zahnrad01.jpg
 Dateigröße:  39.42 KB
 Heruntergeladen:  708 mal


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 16:57     Titel:
  Antworten mit Zitat      
Hallo,

wenn es Dir nur ums Zählen geht, kannst Du sowas in der Art machen:
Code:

img = imread('Zahnrad01.jpg');

BW = im2bw(img,graythresh(img));   % convert to grayscale
BW = bwareaopen(BW,50);  % remove small objects
BW = imfill(BW,'holes'); % and fill holes

% remove center part
BWerode = imerode(BW,strel('square',25));
BWdilate = imdilate(BWerode,strel('square',30));
BWdiff = BW-BWdilate;

CC = bwconncomp(BWdiff);  % find connected components
disp(['Anzahl Zahnräder: ',num2str(CC.NumObjects)])
 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 17:40     Titel:
  Antworten mit Zitat      
Mh, eine gute Idee, allerdings frage ich mich, ob es nicht doch eine Möglichkeit gibt die Zacken zu labeln, den diese Methode funktioniert ja nur bei einem Bild leider. :/
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.12.2010, 18:54     Titel:
  Antworten mit Zitat      
Hallo,

@LittleX gute Idee

versuch es doch mal so (Labels sind jedoch nicht in der Reihenfolge):
Code:


img = imread('Zahnrad01.jpg');

BW = im2bw(img,graythresh(img));   % convert to grayscale
BW = bwareaopen(BW,50);  % remove small objects
BW = imfill(BW,'holes'); % and fill holes

% remove center part
BWerode = imerode(BW,strel('square',25));
BWdilate = imdilate(BWerode,strel('square',40));
BWdiff = BW-BWdilate;
BWdiff(BWdiff<0) = 0;
BWlab = bwlabel(BWdiff);
RP = regionprops(BWlab,'all');
imshow(img);
for k = 1:length(RP)
     text(RP(k,1).Centroid(1,1),RP(k,1).Centroid(1,2),num2str(k),'Color',[1 0 0],'Fontsize',16);
end
 

Jedoch fuehrt die hier vorgestellte Methode nur immer dann zum Erfolg wenn das Zahnrad etwa immer die gleiche Groesse auf dem Bild hat und aus der selben Perspektive fotografiert wurde. Ist dies der Fall gaebe es auch noch andere Moeglichkeiten die Zahnraeder zu "erkennen".

MFG

Sco

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 19:40     Titel:
  Antworten mit Zitat      
Sco hat Folgendes geschrieben:


Jedoch fuehrt die hier vorgestellte Methode nur immer dann zum Erfolg wenn das Zahnrad etwa immer die gleiche Groesse auf dem Bild hat und aus der selben Perspektive fotografiert wurde. Ist dies der Fall gaebe es auch noch andere Moeglichkeiten die Zahnraeder zu "erkennen".


Mh, in meinem Fall habe ich noch das Problem, dass ich auch von einer anderen Zahnradart die Zähne zählen können möchte.

Danke schon mal für die Hilfe bis jetzt, dass hat mir schon etwas weiter geholfen.
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 02:20     Titel:
  Antworten mit Zitat      
Sco hat Folgendes geschrieben:
Ist dies der Fall gaebe es auch noch andere Moeglichkeiten die Zahnraeder zu "erkennen".

MFG

Sco


Tut mir Leid für den Doppelpost, ich kann meine Beiträge als Gast leider nicht editieren, aber komme nicht mit dieser Methode weiter. Was wären den die anderen Möglichkeiten?
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.12.2010, 02:31     Titel:
  Antworten mit Zitat      
Hallo,

Poste doch erstmal bittte erstmal die beiden Möglichkeiten der Zahnräder als Bild. Womit kommst du denn nicht weiter? Was ist das Problem? Ich möchte wirklich nicht meine Zeit verschwenden ehe ich icht weiss woran ich bin, ausserde ist es ja auch deine Aufgabe. Und du hasst nun schon Vorschläge bekommen...

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 03:37     Titel:
  Antworten mit Zitat      
Das Problem ist, dass diese Methode zwar gut bei 2-3 Bildern funktioniert, allerdings nicht bei einem Bild wo Streifen mit drauf sind.

Ich habe das Streifenbild eingefügt.

zahnrad2.jpg
 Beschreibung:
Zahnrad2

Download
 Dateiname:  zahnrad2.jpg
 Dateigröße:  11 KB
 Heruntergeladen:  689 mal
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.12.2010, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

allerdings nicht bei einem Bild wo Streifen mit drauf sind.

Das hat in deinem Beispielbild wenig mit den Streifen zu tun, eher daran, dass das Zahnrad dort dunkel und im ersten Bild hell war (ich sagte ja schon, das der Kontrast gleich bleiben müsste). Somit hat das "Zahnrad2" nach der Binarisierung den Wert 0 und das "Zahnrad1" den Wert 1. Dies ist für die weiteren Befehle fundamental, d.h ob da eine 1 oder 0 im Bild ist! Du kannst den Kontrast aber mit dem Befehl:
Code:

imcomplement
 

"tauschen". Ansonsten kann man den Code in etwas abgewandelter Form auch für dieses Zahnrad verwenden. Man muss eben nur an den Werten z.B. des Strukturelementes drehen; einen allgemeingültigen Code für alle deine Bilder gibt es nicht. Für dein 2. Zahnrad würde es z.B. so gehen:
Code:

img = imread('Zahnrad2.jpg');
BW = im2bw(img,graythresh(img));  
BW = imcomplement(BW);
BW = imclearborder(BW);
BW = bwareaopen(BW,50);  
BWerode = imerode(BW,strel('square',25));
BWdilate = imdilate(BWerode,strel('disk',15));
BWdiff = BW-BWdilate;
BWdiff(BWdiff<0) = 0;
BWdiff = imfill(BWdiff,'holes');
BWlab = bwlabel(BWdiff);
RP = regionprops(BWlab,'all');
imshow(img);
for k = 1:length(RP)
     text(RP(k,1).Centroid(1,1),RP(k,1).Centroid(1,2),num2str(k),'Color',[1 0 0],'Fontsize',14);
end
 

Falls du noch weitere Bilder hasst, so müsstest du mal selber die Hilfefiles der hier genannten Matlab-Befehle durcharbeiten und selber ein wenig mit den Parametern spielen.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2010, 17:25     Titel:
  Antworten mit Zitat      
Danke für die Hilfe, dass war das letzte größere Probleme, welches ich hatte.
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2010, 19:14     Titel:
  Antworten mit Zitat      
Sco hat Folgendes geschrieben:

Somit hat das "Zahnrad2" nach der Binarisierung den Wert 0 und das "Zahnrad1" den Wert 1. Dies ist für die weiteren Befehle fundamental, d.h ob da eine 1 oder 0 im Bild ist! Du kannst den Kontrast aber mit dem Befehl:


Falls es noch jemanden interessiert:

Ich habe dies so gelöst, dass ich nach die Binarisierung einen Teil des Hintergrundes überprüfe und wenn mehr Einsen als Nullen drinen stehen, dann frage ich das mit einer if ab und benutze dann imcomplement.

Klappt ganz gut.
 
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.