www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Bilderkennung mit DSP


Autor: Maik Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Maik Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hough-Raum... google mal danach

Kest

Autor: alpha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Maik Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mr.chip (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bild vergessen...

Autor: Sascha K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-/

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Detlef _a (detlef_a)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist der Link ganz interessant:

http://kurse.fh-regensburg.de/bio/  (ist eine Virtuelle Vorlesung zur
Bilderkennung)

MFG Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.