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.
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. :/
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',[100],'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
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.12.2010, 19:40
Titel:
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: ---
Verfasst am: 11.12.2010, 02:20
Titel:
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?
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
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.12.2010, 03:37
Titel:
Das Problem ist, dass diese Methode zwar gut bei 2-3 Bildern funktioniert, allerdings nicht bei einem Bild wo Streifen mit drauf sind.
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:
"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:
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
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.12.2010, 17:25
Titel:
Danke für die Hilfe, dass war das letzte größere Probleme, welches ich hatte.
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.12.2010, 19:14
Titel:
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.
Einstellungen und Berechtigungen
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
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.