Visualisierung von Ameisenpfaden

Hier können allgemeine Fragen zum Thema Ameisen, sowie zu europäischen Ameisenarten gestellt werden.

Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Freitag 30. Mai 2014, 23:15

Seit einiger Zeit geistert mir schon eine Idee im Kopf, die ich wohl mal beim Einschlafen hatte: Und zwar lässt sich mit einer Kamera und etwas Bildverarbeitung recht einfach der Bewegungspfad einer bzw. mehrerer Ameisen erkennen. Das Ganze kann man nun wie eine, mit der Zeit verschwindende, Pheromonspur visualisieren um häufig abgelaufene Pfade zu erkennen. Eine kurze Testaufnahme und ein paar Zeilen Code brachte schon ganz nette Ergebnisse:



(links das aufgenommene Bild, rechts die "Pheromonspur")

Mal schauen, wie es bei der nächsten Proteinfütterung aussieht und ob bzw. wie sich da Haupt- und Nebenpfade herausbilden :)
  • 10

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Merkur » Samstag 31. Mai 2014, 08:21

Sieht beeindruckend aus! Wie sind denn die Größenverhältnisse? Also z. B. Abstand zwischen dem Nest (? links) und dem Ziel (? Futternapf? Wand des Formikars?)
Wie groß sind die Ameisen (welche Art?)?
Das Verfahren könnte sich sogar professionell in der Forschung einsetzen lassen!
Vielen Dank,
Merkur
  • 0

Suum cuique
Benutzeravatar
Merkur
Beirat
 
Beiträge: 1782
Registriert: Sonntag 6. April 2014, 07:52
Wohnort: Reinheim
Bewertung: 4872

Re: Visualisierung von Ameisenpfaden

Beitragvon hormigas » Samstag 31. Mai 2014, 09:42

Hallo fehlfarbe,
Das sieht ja wirklich spannend aus!
Wenn du Zeit findest wäre es sehr schön uns die technische Umsetzung näher zu bringen.
Dazu braucht man wahrscheinlich ein Programm dass die Ameisen erkennt :?: ??? :crazy:
Ich fände einen Maßstab auch eine gute Ergänzung.
Tolle Sache!
LG
  • 0

hormigas
 

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Samstag 31. Mai 2014, 12:30

Schön, dass die Idee Anklang findet :)

Das Formicarium hat eine Grundfläche von 60x30cm. Die Kamera habe ich einfach für den schnellen Test mit dem Objektiv nach unten auf den Glasdeckel gelegt. Ganz in die Mitte konnte ich sie leider nicht schieben, weil dort der Gazestreifen ist. Bei den Ameisen handelt es sich um meine Camponotus ligniperdus Kolonie. Da die meiste Brut derzeit aus Eiern und Puppen besteht, ist der Proteinbedarf gerade nicht ganz so hoch, daher sitzen die Ameisen größtenteils nur herum. Ich musste etwas ins Formicarium pusten, damit sich überhaupt was tut :D

Das Prinzip ist eigentlich sehr simpel und das Programm umfasst gerade mal um die 70 Zeilen Code (wobei die Bildverarbeitung vielleicht 30 Zeilen umfasst). Ich benutze hauptsächlich Funktionen der freien OpenCV Bibliothek. Dabei lese ich das Video frame für frame ein und erstelle mir zuerst einen gemittelten Hintergrund (wie z.B. hier beschrieben). Vom dem Hintergrund bilde ich die Differenz zum aktuellen Frame. Was dabei heraus kommt, ist ein Bild, in dem man nur die Ameisen bzw. nicht zum Hintergrund gehörende Objekte sieht. Darauf setze ich noch einen Schwellenwert an, damit ich einen schönen Grauverlauf bekomme und das Ganze wird dann frame für frame gewichtet aufaddiert sodass Spuren entstehen.

Da sämtliche Bewegungen bzw. Veränderungen gegenüber dem Hintergrund erkannt werden, muss die Kamera natürlich fest stehen und die Lichtverhältnisse sollten ungefähr gleich bleiben.

Anbei noch mal mit dem Differenzbild und dem aktuellen Pfad als "Heatmap" auf das Originalmaterial geblendet:

  • 13

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Fruchtiger » Sonntag 1. Juni 2014, 17:42

Ja, super cool. Damit kann man bestimmt einiges anstellen wie z.B. Außenaktivität messen (zählen wie viele Ameisen das Nest verlassen und wie viele hineingehen). Leider ist die große Annahme dabei, dass alles sich bewegende auch eine Ameise ist. Deshalb müsste man für Feldversuche die Methode um einiges erweitern, um die Ameisen tatsächlich zu erkennen, eventuell sogar zu identifizieren und zu verfolgen.

Ähnliches wurde bei einer Camponotus fellah Kolonie mit Hilfe von Barcodes gemacht (Originalarbeit verlinkt):
Tracking whole colonies shows ants make career moves

Im Anhang mal mein Versuch an einer Formica fusca Kolonie. Nach 3-4min ist im Prinzip das komplette Formicarium einmal abgelaufen.
  • 4

Dateianhänge
Binary_screenshot_01.06.2014_40s.png
nach ca. 30s
Binary_screenshot_01.06.2014_120s.png
nach ca. 1-2min
Binary_screenshot_01.06.2014.png
nach 3-4min
Benutzeravatar
Fruchtiger
Mitglied
 
Beiträge: 10
Registriert: Mittwoch 9. April 2014, 15:21
Bewertung: 14

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Sonntag 1. Juni 2014, 19:12

Das Video in dem Artikel ist cool! Schade, dass ich schon ein Thema für meine Masterarbeit habe :D

Was für einen Algorithmus hast du für deinen Versuch mit der Formica fusca Kolonie genommen? Ich schau mal, ob ich mein Programm auch für Windows kompiliert bekomme, da ich hauptsächlich unter Linux arbeite. Dann wird es auch für alle geteilt ;)
  • 0

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Fruchtiger » Sonntag 1. Juni 2014, 20:07

Genauso wie fehlfarbe habe ich die OpenCV Bibliothek, die ich übrigens sehr empfehlen kann, benutzt. Zugegebenermaßen hatte ich große Teile von dem Code schon herumliegen, weil ich mal etwas ähnliches machen wollte. ;)

Im Prinzip

  • Weichzeichnung des Bildes
  • Differenz der letzten beiden Bilder des Videos
  • Anwendung eines Schwellwerts auf das Differenzbild

Im C++ Code (OpenCV)
Code: Alles auswählen
// lpic - letztes Bild
// pic - aktuelles Bild
// bin_t - Schwellwert zur Binarisierung

// Weichzeichnung
cv::GaussianBlur(pic,pic,Size(5,5));
// Differenz der Bilder
cv::absdiff(lpic,pic,out);
// Schwellwert
cv::threshold(out,out,bin_t,255,0);


Der Rest ist "drumherum": Einlesen des Videos, auf-hübschen für die Anzeige und GUI.
  • 1

Benutzeravatar
Fruchtiger
Mitglied
 
Beiträge: 10
Registriert: Mittwoch 9. April 2014, 15:21
Bewertung: 14

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Sonntag 1. Juni 2014, 23:08

So, ich habe den aktuellen Stand mal in ein Git Repo geschoben. Also wer sich den aktuellen Code (in Python geschrieben) mal anschauen möchte: https://github.com/mechlabDegenkolbe/antpath-vis

Ansonsten hab ich es jetzt auch geschafft das Ganze für Windows zu kompilieren: https://www.dropbox.com/s/5ilyiahnj8ew3 ... th_0.1.zip
Derzeit noch ohne grafische Oberfläche, daher muss es über die Windows Konsole geöffnet werden. Einfach entpacken, dann SHIFT+Rechtsklick auf den Ordner "antpath" und dann auf "Eingabeaufforderung hier öffnen"
Bildschirmfoto.png

In der Konsole nun einfach
Code: Alles auswählen
antpath.exe -f PFAD_ZU_VIDEODATEI
eintippen und mit ENTER

Bildschirmfoto-1.png
bestätigen und schon startet das Programm. Sobald die ersten 40 frames zum Hintergrundmodell verarbeitet wurden, öffnet sich die Anzeige und die Aufzeichnung der Pfade läuft. Es wird außerdem ein Ordner mit Namen "out_GANZVIELEZAHLEN" im "antpath" Ordner erstellt, wo jeder verarbeitete frame als *.png gespeichert wird.

Hab das Ganze in einer frisch installierten Windows 7 64 bit VM getestet.
  • 1

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon hormigas » Donnerstag 12. Juni 2014, 13:00

Hallo Leute,
Ich habe eben in dem Blog von Barristan einen Beitrag gefunden der sich mit diesen Thema befasst.
Es gibt im Netz eine kostenlose Software (leider nicht für Mac)
mit der bis zu 35 Tiere gleichzeitig verfolgt werden können.
Aber seht selbst...
Das Program nennt sich idTracker



LG
  • 1

hormigas
 

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Donnerstag 12. Juni 2014, 14:22

Cool, die haben die Idee schön erweitert :)

Man sieht auch, dass sie zur Detektion ähnliche Algorithmen verwenden. Nur werden nicht einfach stumpf die Pfade wie bei mir als Bild gespeichert, sondern jede Bewegung als Objekt erkannt und getrackt. Verdeckungen und Kreuzungen sollten sich relativ einfach per Kalman Filter erkennen lassen. Ich denke da steckt jetzt nicht nichts Neues dahinter. Die Wiedererkennung der Fische am Ende des Videos ist mir allerdings neu. Würde mich interessieren, wie das funktioniert.
  • 0

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Trailandstreet » Donnerstag 12. Juni 2014, 15:10

mal so eine Frage von mir als Laien in Sachen "bewegter Bildverarbeitung". Wird da jetzt einfach ein Video in flv, mp4 oder anderem Format gemacht und dann erst der Algorithmus darauf angewendet oder wie kann ich mir das vereinfacht vorstellen?
Es würde mich nämlich interessieren, ob das sozusagen auch im nachhinein möglich ist.
  • 0

Benutzeravatar
Trailandstreet
Mitglied
 
Beiträge: 1033
Registriert: Mittwoch 9. April 2014, 21:02
Wohnort: Ho'mbua
Bewertung: 1336

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Donnerstag 12. Juni 2014, 15:15

Dem Algorithmus ist eigentlich egal ob es eine Videodatei oder ein Livebild ist. Der kriegt einfach Frame für Frame geliefert und verarbeitet das Ganze. Zum Testen ist es natürlich besser eine Videodatei aufzunehmen, an der man den Algorithmus mit veränderten Werten immer wieder testen kann.
  • 0

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Trailandstreet » Donnerstag 12. Juni 2014, 19:36

Danke für die Antwort. Demnach könnte ich also meine Kleine Kolonie einfach mal per Cam und Stativ aufnehmen, die Vidodatei auf den PC laden und dann deren Bewegungsmuster ansehen. Klingt nicht schlecht.
  • 0

Benutzeravatar
Trailandstreet
Mitglied
 
Beiträge: 1033
Registriert: Mittwoch 9. April 2014, 21:02
Wohnort: Ho'mbua
Bewertung: 1336

Re: Visualisierung von Ameisenpfaden

Beitragvon Alimato » Sonntag 26. April 2015, 09:48

Hi
ermutigt durch diesen Threat habe ich mich ebenfalls mal ans Programme schreiben versucht und man möge es mir glauben oder nicht, obwohl ich davon eigentlich nichts verstehe, ist es mir gelungen einige
funktionierende Programme zu schreiben.

Leider funktionieren die compilierten Programme nur auf dem Rechner auf dem ich sie geschrieben habe. Starte ich sie auf einem anderen CPU gehen sie nicht da verschiedene DLLs fehlen.
Habs wirklich versucht und bin aber einfach zu ungeschickt im Umgang mit der ganzen Materie...

Alles nur spielerei... aber ein kleines Programm fand ich gut und würde es gern fuktionstüchtig besitzen.
Ein sehr einfaches Programm zum erstellen von Zeitraffer aufnahmen aller "Timmershot". Super einfach man kann nicht mal die Bilder pro sek einstellen sonder lediglich entscheiden alle wieviele Frames ein Bild mit fortlaufender Bennenung gespeichert werden soll.

Leider bekomme ich es jetzt aus irgendeinem Grund gar nicht mehr compiliert. Kann jemand das, was mir gerade unmöglich scheint. Und es unserer Gemeinschaft zur Verfügung stellen.
Zeitrafferaufnahme(einzel Bilder)
Hier der Code ( Bitte nicht auslachen, wie gesagt hab keine Fähigkeiten in dem Bereich... es funktioniert ! aber leider eben nur auf meinem CPU)
Code: Alles auswählen
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <sstream>

using namespace cv;
using namespace std;

int main()
{
int zahl=0,rest=0,zahlrech=0,x,bildnummer=0;
string name,anhang,bildname;
char buffer[50];

name="Bild";
anhang=".jpg";



cout<<"Alle wie viel frames eines speichern?"<<endl;
cout<<"hier eingeben"<<endl;
cin>>x;
namedWindow("Bilder",CV_WINDOW_NORMAL);

//Webcam abrufen

    VideoCapture webcam(1);
if (!webcam.isOpened())
{
    cout << "geht net!"<<endl;
    return(-1);
}


//Endlosschleife (Frames einlesen/speichern und ausgeben

while(1)
    {
        Mat frame;

         webcam.read(frame); // read a new frame from video
         imshow("Bilder",frame);

//wandelt int um
sprintf (buffer,"%d",bildnummer);

//erstelt den Datei/speichernamen
bildname= name+buffer+anhang;

rest=zahlrech%x;

if(rest==0)
    {
imwrite(bildname, frame);
 bildnummer=bildnummer+1;
}


         //COUNTER
if(webcam.isOpened())
    {

zahl=zahl+1;
zahlrech=zahl;

    }
if (waitKey(30) == 27) //wait for 'esc' key press for 30ms. If 'esc' key is pressed, break loop
{
cout << "esc keys is pressed by user" << endl;
break;
}


    }


        return 0;
}


Über eine bessere Version dieses Programms würde ich mich natürlich um so mehr freuen.

lg Alimato
  • 0

Planung ersetzt den Zufall durch den Irrtum.
Alimato
Mitglied
 
Beiträge: 78
Registriert: Mittwoch 9. April 2014, 16:59
Bewertung: 210

Re: Visualisierung von Ameisenpfaden

Beitragvon fehlfarbe » Sonntag 26. April 2015, 11:39

Na das sieht doch schon ganz gut aus :)

Da du DDLs erwähnst, vermute ich, dass du unter Windows programmierst. Wenn ich mich recht erinnere, installiert man OpenCV dort unter C:\Opencv? Schau mal wo dort die fehlenden DDLs liegen (irgendwo im build Ordner, denke ich mal). Der Grund, warum es auf dem anderen Rechner nicht läuft, ist, dass du OpenCV nur auf deinem Rechner systemweit installiert hast und somit Zugriff auf die Bibliotheken besteht. Wenn du die .exe startest, wird (ich hoffe, die Reihenfolge stimmt) zuerst im gleichen Verzeichnis, in dem das Programm liegt, nach den DLLs gesucht, dann in System32 und anderen angegebenen Pfaden. Also reicht es, wenn du die fehlenden DLLs in den Ordner kopierst, wo deine .exe liegt. Dabei ist zu beachten, dass manche ein 'd' im Namen, glaube nach der Versionsnummer stehen haben. Je nachdem ob du als Release oder Debug kompiliert hast, musst du die DLLs mit dem 'd' (Debug) oder ohne (Release) in den Ordner kopieren.

Ich habe deinen Code mal als Grundlage genommen und zwei, drei Änderungen eingebaut:

Statt aller x Frames ein Bild zu speichern, kannst du auch die waitKey() Funktion nutzen um direkt X Sekunden zu warten. Nachteil ist, dass sich das Bild auch nur alle X Sekunden erneuert. Falls du eine Live Anzeige willst, ist deine Methode natürlich besser. Dabei solltest du aber beachten, dass nicht alle Kameras mit 25 Frames pro Sekunde aufnehmen und daher die Zeitabstände zwischen den Bildern unterschiedlich sein können.
Bei der Benennung hast immer BildX.jpg. Das kann beim Sortieren nerven, weil dann teilweise so sortiert wird: Bild1.jpg, Bild10.jpg Bild2.jpg, Bild20.jpg, ...
Das Problem lässt sich einfach mit vorgestellten Nullen lösen. Das können dir ganzen Xprintf() Funktionen automatisch. Einfach "%05d" nutzen. Dann hat die Ausgabe immer 5 Ziffern wobei fehlende Werte mit Nullen aufgefüllt werden. Das geht auch mit float Werten, die man automatisch in der Bildschirmausgabe runden kann. Mehr Infos mit Beispielen z.B. unter: http://www.codingunit.com/printf-format ... ted-output
Dann hab ich noch die Auswahl der Webcam Nr hinzugefügt, weil man ja z.B. am Laptop die interne Kamera dran hat aber vielleicht doch lieber eine externe per USB nutzen will. Aber das hättest du bestimmt auch selbst fix hin bekommen :)

Code: Alles auswählen
#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <sstream>

using namespace cv;
using namespace std;

int main()
{
    int x,webcam_nr,bildnummer=0;
    string name,anhang,bildname;
    char buffer[50];

    name="Bild";
    anhang=".jpg";

    cout<<"Alle wie viel Sekunden ein Bild speichern?"<<endl;
    cout<<"hier eingeben"<<endl;
    cin>>x;
    cout<<"Welche Webcam Nr?"<<endl;
    cout<<"hier eingeben"<<endl;
    cin>>webcam_nr;

    namedWindow("Bilder",CV_WINDOW_NORMAL);

    VideoCapture webcam(webcam_nr);

    if (!webcam.isOpened())
    {
        cout << "geht net!"<<endl;
        return(-1);
    }


    //Endlosschleife (Frames einlesen/speichern und ausgeben
    while(1){
        Mat frame;

        webcam.read(frame); // read a new frame from video
        imshow("Bilder",frame);

        //wandelt int um (format fuenfstellig mit fuehrenden nullen)
        sprintf (buffer,"%05d",bildnummer);

        //erstelt den Datei/speichernamen
        bildname = name+buffer+anhang;

        //rest=zahlrech%x;
        imwrite(bildname, frame);
        bildnummer++; //zaehlt direkt hoch :) =bildnummer+1;

        // der direkte Vergleich in der if Abfrage ging bei mir irgendwie nicht
        char k = waitKey(x*1000); //warte einfach die Zeit in Sekunden
        if (k == 27) //wait for 'esc' key press for 30ms. If 'esc' key is pressed, break loop
        {
            cout << "esc keys is pressed by user" << endl;
            break;
        }
    }


    return 0;
}


Bei Kompilierungsfehlern bzw. Fehlern allgemein immer die Fehlerausgabe mit angeben, sonst kann man nur raten ;)
  • 3

Benutzeravatar
fehlfarbe
Mitglied
 
Beiträge: 120
Registriert: Donnerstag 10. April 2014, 10:02
Wohnort: Dresden
Bewertung: 279

Re: Visualisierung von Ameisenpfaden

Beitragvon Alimato » Sonntag 26. April 2015, 15:53

Hi

Zeitrafferaufnahmen(einzel Bilder)

Zwar konnte ich Fehlfarbes Verbesserungen noch nicht umsetzten, aber dank seiner Tipps konnte ich die ursprüngliche Version zum laufen bringen.

Klar ich bin nicht vom Fach und deshalb ist das alles auch noch etwas schlecht gemacht und mangelhaft(keine Bilder pro sek, sondern alle X Frames wird ein Bild gespeichert.) und es gibt keine Taste um das Programm zu beenden(Die Eingabeaufforderung muss dann mit der Maus geschlossen werden.)

ZeitrafferCam1: Um bei einem CPU die USB-Kamera zu nutzen oder die fest installierte bei einem Laptop
ZeitrafferCam2: um bei einem Laptop eine Usb-Kamera zu nutzen.


Die Bilder werden im Ordner gespeichert in dem sich die Anwendung befindet.

Anschließend müssen die Bilder noch zu einem Clip zusammengefügt werden.(Verschiedenste Anwendungen können dies (Freeware)

Für den Fall, dass ihr das auch mal ausprobieren wollt stelle ich euch hier die Anwendung zur Verfügung.

Könnt ja dann Bescheid geben, ob es auch bei euch funktioniert.

Viel Spaß
Zeitraffer.rar
(1.74 MiB) 43-mal heruntergeladen

lg Alimato
  • 0

Planung ersetzt den Zufall durch den Irrtum.
Alimato
Mitglied
 
Beiträge: 78
Registriert: Mittwoch 9. April 2014, 16:59
Bewertung: 210


Zurück zu Allgemeines und europäische Ameisenarten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

Reputation System ©'