Hallo. Ich habe schon eine weile gegoogelt und bin aber bis jetzt nicht wirklich weitergekommen. Ich möchte in einem digitalisierten Bild (schwarz-weiß), anhand der Farbwerte, Kreise in dem Bild zählen. Die Kreise sind dabei nicht regelmäßig, haben aber einen anderen Farbwert gegenüber der Umgebung. Für ein paar Anregungen, Denkanstöße oder links zu skripten wäre ich sehr dankbar. Maik
poste doch mach ein Beispielbild. Wir haben damals an der UNI ein Programm (in Matlab) schreiben müssen, was den Gesamtwert der Münzen auf nem Foto ausgibt, villeicht lässt sich das ähnlich lösen.
Ich habe leider noch kein Beispielbild, aber die Kreise auf dem Bild sind Zellen. Das ganze soll in einem biomedizinischen Institut eingesetzt werden um den Wachstumsprozess der Zellen in einer Probe zu registrieren, d.h. es sollen die Zellen auf dem Bild gezählt werden. Aber das was du da in der Uni gemacht hast geht ja eigentlich genau in die Richtung, jedenfalls von den notwendigen Überlegungen her denke ich. Könntest du mir da eventuell ein paar Infos über Algorithmus oder die Vorgehensweise geben? Da würde ich dann zumindest schon mal ein Paar Anhaltspunkte haben mit denen ich dann weiter machen kann. Vielen Dank!!
Also Du willst das in Matlab schreiben und zwar unter Zuhilfenahme der Image Processing Toolbox. Dafür gibt es auch Demos unter www.mathworks.com wie es geht. Wenn Du Glück hast gibt es sogar ein fertiges Skript oder es gibt was auf www.matlabcentral.com Alpha
hallo. nein ich werde es mit der VisualDSP++ software von Analog Devices schreiben, aber mir gehts um allgemeine Herangehensweisen für das Problem welches ja dann von Matlab auf die entsprechende Programmiersprache umgesetzt werden kann. ich schau mir das mal in Matlab an, dankeschön...obwohl natürlich Matlab auch eine Variante wäre das zu machen. muß ich also mal schauen, danke für die Hilfe/Idee!
Denke ich auch, die Zellen werden wohl kaum so schnell wachsen, dass es der Echtzeitfähigkeiten eines DSPs bedarf. Da ist es schon legitim, die Algorithmen erst einmal für den PC zu entwickeln.
Betr. Münzerkennung leider finde ich die M-files jetzt nicht mehr, aber das Verfahren basierte auf jeden Fall auf Kantenerkennung mittels Hochpassfilter. Anschließend wurden die resultierenden Ringe noch schwarz gefüllt und mit einer Funktion (hab den Namen vergessen) aus der Image Prozessing Toolbox gezählt und der Flächeninhalt bestimmt. Ich glaube aber nicht, dass sich dieses Verfahren auf dein Problem anwenden lässt, da es auf harte Übergänge der zu erkennenden Objekte angewiesen ist. Gruß, Thomas
Ich habe doch schon geschrieben: Hough-Raum oder Hough-Transformation hier ist der Link: http://de.wikipedia.org/wiki/Hough-Transformation ist extra dafür gedacht, simpel genug und erfüllt alle Bedingungen, was will man mehr? Kest
Hallo Kest, die Null-Reaktion auf Deinen Hough-post zeigt, daß die Houghtransformation sträflich unterschätzt wird. Das ist nicht gerechtfertigt, da kann man sehr schnell parametrisierbare Objekte erkennen, das ist nen mächtiger Hebel für schnelle Bildverarbeitung. Sehr schön auch anzusehen, die Hough-Räume. Maik, poste doch mal nen jpg von Deinen Zellen, die schieb ich dann mal durch meine Hough Matlab Scripts. Cheers Detlef
Hallo Ich habe die Hough-Transformation mal zur Erkennung eines Balles ausprobiert, das Bild stammt von einer Gameboy-Kamera und wurde noch durch einen einfachen Kantenerkennung-Algorithmus geschickt. Rot = 'Bildpixel' Blau = Häufungspunkte für einen vermuteten Kreismittelpunkt, je heller desto wahrscheinlicher (Für jeden roten (=gesetzten) Pixel wird auf allen Punkten, die sein Kreismittelpunkt für einen Kreis mit Radius 20-30 sein könnten, die Farbe etwas aufgehellt.) Der Ball wird zwar schön erkannt, aber leider gibt es auch überall dort Häufungspunkte wo einfach zufällig viele Pixel sind. Hat irgend jemand einen Vorschlag, wie man das eliminieren könnte? Dann nochwas - ist ja irre, was da für Rechenleistung gebraucht wird! Mein AVR kommt da nicht mehr mit, das macht praktisch alles der PC. Was steckt denn da so für Hardware drin z.B. bei den Fussballrobotern? Gruss Michael
Hab letztens die RoboWM gesehen im ZDF - da waren Notebooks in den Robotern. Die Daten wurden über 802.11b ausgetauscht. Macht ja auch sinn da nen Laptop rein zu hauen - so'n Popelchip kann halt keine schnelle Grafikberechnungen machen! Leider :-/
Bei den Fussballrobotern wird dieses Verfahren meines Wissens nach nicht verwendet. Die erkennen Ball und Spieler anhand der Farbe, dafür gibt es auch strenge Auflagen, was die Farben und Beleuchtung betrifft. Bei der Small-Size Leage kommen die Roboter mit kleinen 8Bittern aus, die sich nur um die Steuerung kümmern müssen. Die Position von Spielern und Ball wird von einer Kamera über dem Spielfeld erfasst und an die beiden Kontrollrechner der Mannschaften übertragen. Diese kümmern sich dann um Bilderkennung und Strategie. Die Kommunikation zu den Bots geht über Bluetooth. Die Roboter der Mid-Size Leage schleppen meines Wissens nach alle ne moderne PC Hardware mit sich rum. Um das Ergebnis zu verbessern würde mir jetzt spontan einfallen den blauen Punkten eine immer größere Gewichtung zu geben, wenn ein bereits gesetzter Punkt nochmal von einer Position die auf dem gleichem Kreisbogen liegen könnte gesetzt wird. Das sollte den Mittelpunkt eines Kreises deutlicher von anderen Punkten absetzen. Gruß, Thomas
Grrr, ein bereits gesetzter Punkt kann natürlich nur von einer Position die auf dem gleichem Kreisbogen liegt nochmal gesetzt werden! Was ich dabei eigentlich im Kopf hatte war sowas wie: Für jeden Punkt ein Array anlegen und darin alle Winkel speichern, von denen aus er gesetzt wird. Je breiter die Winkel dann am Ende gestreut sind, desto mehr Gewichtung erhält der Punkt pro abgespeicherten Wert. Was vielleicht auch was bringen könnte währe nicht immer zu inkrementieren, sondern ab dem zweiten Treffer immer mit einem Faktor zu multiplieren, so setzten sich Punkte mit mehreren Treffern deutlicher ab.
Hi mr. chip, Hough erkennt den Ball sicher, selbst bei der schlechten Qualität. Im angehängten Bild sind die Bildpixel und das Ergebnis der Transformation überlagert. Die Spitze im Ballzentrum ist doppelt so hoch wie die nächsthöchste, Hough würde auch noch schlechtere Kreise erkennen. Du muß die Houghtransformation für jeden Radius getrennt berechnen. Ich habe als Kreisradius geschätzte 55 Pixel angenommen. Hough ist schnell: Das Ball-Bild hat bei mir 2840 gesetzte Pixel, mein Kreis hat 429 Peripheriepunkte, macht gut eine Million ADDITIONEN, nix Multiplikation! Matlab-script für Interessierte hängt hinten dran! Cheers Detlef clear a=imread('c:\MATLAB6p1\myfiles\ballerkennung.jpg'); a=double(a); i=size(a);i=i(1:2); dd=sqrt((292*ones(i)-a(:,:,1)).^2+(0*ones(i)-a(:,:,2)).^2+(39*ones(i)-a( :,:,2)).^2); dd=dd<100; plot(a(:,25,3)) [zp,sp]=find(dd); imagesc(dd); axis('square'); w=linspace(0,2*pi,fix(6.5*66)); r=55; zk=fix(r*sin(w)); sk=fix(r*cos(w)); hr=zeros(i); for(k=1:length(w)) zz=zp+zk(k); ss=sp+sk(k); ind=find(zz >0 );zz=zz(ind);ss=ss(ind); ind=find(zz<=i(1));zz=zz(ind);ss=ss(ind); ind=find(ss >0 );zz=zz(ind);ss=ss(ind); ind=find(ss<=i(2));zz=zz(ind);ss=ss(ind); hr((ss-1)*i(1)+zz)=hr((ss-1)*i(1)+zz)+1; end; hr((sp-1)*i(1)+zp)=max(max(hr)); colormap('default') imagesc(hr) axis('square'); return
@Detlef: Habe soeben die ersten Erfolge gehabt! Das mit dem Radius war mein Fehler. Hoffentlich bringe ich das ganze dann irgendwie auf nem AVR zum laufen - der Speicher dürfte aber kritisch werden.
Vielleicht ist der Link ganz interessant: http://kurse.fh-regensburg.de/bio/ (ist eine Virtuelle Vorlesung zur Bilderkennung) MFG Andi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.