cikkek

Elrood összes cikke...

személyes bejegyzések

listázás
találatok >>

személyes bejegyzések

OpenCV és a teljesítmény

Szerző: Elrood | Dátum: 2012-01-30 22:49 | Hozzászólások (0)

Akik tudják, mit takar az OpenCV, azoknak nem kell bemutatnom: [link]

Most röviden leírom, milyen érdekes dolgokat fedeztem fel pár függvénnyel kapcsolatban.

Az OpenCV-ben rengetek függvény van sok mindenre, de előfordulhat, hogy mi szeretnénk kézzel valamit számolni az egyes pixeleken, de OpenCV-ben nincs rá függvény.

Először is, az OpenCV teljesítményét kézzel nem fogjuk elérni, de néhány dolog valamiért pluszba belassít.
(OpenCV teljesítmény: egyszer végre tényleg bele kéne másznom a kódjába, hogy hogyan valósítják meg ezt, mert nagyon jól jönne:) )

Itt egy példa, végig akarunk menni minden pixelen:

Itt egy kép:
cv::Mat imgmat(cv::Size(640,480),CV_8UC3);

Ezen akarunk végigmenni:
for(int row=0; row<imgmat.rows; row++)
{
for(int col=0; col<imgmat.cols; col++)
{

}
}

Két féle módon férhetünk hozzá az adott pixelhez:
1. a beépített függvény:

Olvasás:
unsigned char b = imgmat.at<cv::Vec3b>(row,col)[0]; // blue
unsigned char g = imgmat.at<cv::Vec3b>(row,col)[1]; // green
unsigned char r = imgmat.at<cv::Vec3b>(row,col)[2]; // red

Első nap, első óra MSc-s hallgatóként

Szerző: Elrood | Dátum: 2011-09-20 10:13 | Hozzászólások (11)

Ez a kis animáció kb. összefoglalja, milyen pofákat vágtam :D

Szerencsére a többi nem volt már olyan vészes.

Bejegyzés késett 11 napot, de sebaj.

Asus 1215B (ezüst)

Szerző: Elrood | Dátum: 2011-08-21 21:29 | Hozzászólások (0)

Új hordozható számítógépet kellett vásárolnom, mert úgy néz ki, az elkövetkezendő 2 évben (ha minden jól megy), ingáznom kell majd Bp. és Szeged között.

A követelmények a követezők voltak:
+ Hosszú akkumulátor üzemidő
+ Könnyű gép
+ Kicsi gép
+ És a külseje se legyen azé ronda

Ezeknek felelt meg az Asus 1215B.

Sem a netbookot magát, sem a teljesítményét nem mutatom be, mert ezt már két PH! cikkben is megtették:
[link1] [link2]

Épp ezért lett személyes bejegyzés, mert ez egy gyakorlatilag egy élménybeszámoló lesz.

Elég kalandosan érkezett meg a csomag. Házhoz szállítást kértem, mert nem akartam ezért 1 nap szabit kivenni, és kedvem se volt elmenni a cég telephelyére, hogy személyesen átvegyem.

A rendelésnél direkt leírtam, hogy a megadott szállítási cím a munkahelyem, és egész biztosan 10:30 és 18:00 között leszek ott.

Végre...

Szerző: Elrood | Dátum: 2011-07-10 17:48 | Hozzászólások (0)

Pár napi szenvedés van ebben a screenshotban.
Részletek: LGPL-s FFmpeg-t kellett az OpenCV-vel megetetni fordításkor linux alatt, de nem nagyon akart sikerülni, de végre rájöttem a nyitjára.

Pár kód későbbre, mert továbbra se vagyok teljesen kész.

GTK teszt:

#include <iostream>
#include "cv.h"
#include "highgui.h"

using namespace std;

int main (int argc, char *argv[])
{
cout << "Hello world!" << endl;
cvNamedWindow("g");
cvWaitKey();
cvDestroyWindow("g");
return 0;
}

FFmpeg teszt

int main()
{
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( "/home/elrood/Documents/video.avi" );
IplImage* frame;

while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
//cvSaveImage("/home/elrood/Documents/foo.png", frame);
cvShowImage( "Example2", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}

Lego NXT fejlesztési lehetőségek

Szerző: Elrood | Dátum: 2011-06-07 07:51 | Hozzászólások (0)

A következő néhány bejegyzés a LeJOS-nak lesz szentelve.

Pár szóban mi is ez az egész:
A LeJOS egy kicsi virtuális gép, amit a Lego NXT-re portoltak. A LeJOS előnyei (forrás a weboldal, had ne fordítsam le:) ):

+ Object oriented language (Java)
+ Preemptive threads (tasks)
+ Arrays, including multi-dimensional
+ Recursion
+ Synchronization
+ Exceptions
+ Java types including float, long, and String
+ Most of the java.lang, java.util and java.io classes
+ A Well-documented Robotics API

A LeJOS használatához firmware-t is kell majd frissíteni (későbbi bejegyzés).

A LeJOS mellett a további firmware-k és programozási eszközök:

Gyári fw. + (National Instruments) NXT-G

XXX. OTDK

Szerző: Elrood | Dátum: 2011-04-20 17:15 | Hozzászólások (0)


Forrás: [link]

Véget ért a XXX. Jubileumi Országos Tudományos Diákköri Konferencia Informatika Tudományi Szekciója, amin én is részt vettem mint előadó. A program. Mi hétfő 15:40-kor adtunk elő.


A helyszín [+]


[+]

Főiskola vége

Szerző: Elrood | Dátum: 2011-02-09 13:16 | Hozzászólások (19)

Végre valamit sikerült elvégezni :). Aki ismer tudja miről beszélek:).

Állásinterjúkra már nagyon kíváncsi vagyok.

[SVS_20] Február 5.

Szerző: Elrood | Dátum: 2011-02-05 19:09 | Hozzászólások (0)

Újra itt :). Folytatódik a 57 napja leadott szakdolgozat további fejlesztése.

GAMF-t befejeztem, diplomára jeles kerül, irány a munkaerőpiac! (jaj :O)

KÉPAF2011-re a cikk: [pdf]

A távolság probléma meg lett oldva, ennek nagyon örültem (lásd előző poszt).

Fejmozgatás

A szakdolgozathoz 3 kérdést kaptam, ezek közül az egyik, hogy mi történne, ha nem lehetne mozgatni a robot fejét.

Először egy kis ismétlés:

Lényegében a bal képen található (x0,y0) pixelhez úgy keressük meg a párosítást, hogy elindulunk a jobb oldali kép (x0,y0) pixeléből, és végignézünk egy tartományt, hogy melyik pixel illik rá legjobban a bal oldalon található pixelre.
Két fontos paraméter látható a képen:
minDisparity: (x0,y0) ponthoz mennyire térjünk el vízszintesen (ezt a továbbiakban nem bátjuk)
numberOfDisparities: hány pixel legyen az a tartomány, amin keresünk. (továbbiakban NofD)

[SVS_19] Január 5.

Szerző: Elrood | Dátum: 2011-01-05 23:12 | Hozzászólások (2)

Ez a bejegyzés több nap eseményeit meséli el, csak már nem emlékszem, mit mikor csináltam.

Ha még emlékeztek rá, a múltkori bejegyzésben azon agyaltam, hogy a tényleges és számított távolságok miért nincsenek még köszönőviszonyban sem.

Három ötletem volt a hibára:
1. kalibráció
2. a disparity map -> 3D megvalósításnál valami nem stimmel az OpenCV-ben
3. Vetítési hiba

Berakom megint a számolt és tényleges távolságokat:

Elkezdtem a próbálgatást, először a vetítési hiba jelenséget akart leellenőrizni magasabb felbontással. Eredetileg 320x240-es képeket használtam, most kipróbáltam 640x480-on. A sebesség se volt borzasztó lassú.
Ehhez az elmozdulásokat számoló BM függvényt is újra be kellett állítani.

Eredmény:

Ha megfigyelitek, akkor látható, hogy szinte teljesen ugyanaz a 320x240-en mértekkel, így vetítési hiba kizárva.

Próbálgattam a kalibrációt, mert rendes fizikai pontok 3D-s adatait kell megadni kalibrálás előtt (gondoltam én, de az egy másik függvény és másra való). Itt is elszenvedtem 1-2 napot, de nem sikerült használható új kalibrációt csinálnom.

[SVS_18] December 10.

Szerző: Elrood | Dátum: 2010-12-10 10:42 | Hozzászólások (1)

December 10., még 0 nap

Lejárt az idő, végre, szakdoga leadva, befogadva, most már csak azon kell izgulni, nehogy elkeverjék :B.
Kemény 4 hónap volt, főleg leírni ezt az egészet úgy, hogy az előző két hétben betegeskedtem.

A blogolás bevált, így emlékeztem a bakikra, amiket bele kell írni a dogába és a teszteredmények publikálása is hasznos volt, mert így megvoltak.
Nem is beszélve néhány képernyőmentésről, amit egyszerűen nem találok a vinyón, de itt megvoltak.

Tehát csak tanácsolni tudom, hogy aki diplomamunkát, szakdolgozatot ír, az blogoljon (nyilvánosan, vagy csak magának).

A szakdolgozatból tervezek ide is egy rövidebb cikket, de azt majd február fele.

Bár szakdolgozat leadva, a történetnek még nincs vége!

A dolgozat egy része el lett küldve cikként a KÉPAF 2011 konferenciára, ami január 25-28. között lesz (persze pont ezen a héten van a záróvizsga...).
A cikket befogadták, de javítani kell még rajta és pár kérdést meg kell felelni.

[SVS_17] Október 21-24.

Szerző: Elrood | Dátum: 2010-10-24 19:53 | Hozzászólások (3)

Október 21., még 49 nap

Hétfőn sikeresen félreértettem a konzulensemet. Nem azt mondta, hogy csináljam meg jobbra, majd balra a 3D-s ponthalmazt, majd abból szűrjek, hanem azt, hogy fogjam a két disparity mapot és abból szűrjek, majd a bal oldali képre csináljam meg a 3D-s ponthalmazt.

A jobb kép 3D-s ponthalmazával az a baj, hogy gyakorlatilag nem nyertem semmit azzal, hogy ki lett számolva. Látszódik persze minden ami kell, de nincs kapcsolat a bal és a jobb halmaz Z értékei között (ami a távolság), nem lehet felhasználni szűrésre. Ha mégis kézzel belövöm a szűrést, akkor bármilyen változtatásnál újra ki kéne kézzel számolni mindent és újra belőni.

Az a terv, hogy "megengedő" BM-t eresztek rá a jobb és a bal képre, majd a nem egyező disparity értékeket törlöm, így a fals adatok kiszóródnak.

Először is tartok egy kis oktatást :K.

Miért is csinálom ezt.

Ugye mi is így látunk, hogy a két szemből érkező képekből az agyunk rakja össze a 3D-t. Ha közelebb rakjuk az ujjunk a szemünkhöz és pislogunk felváltva, akkor látjuk, hogy jobban "mozog" az ujjunk két pislantás között, míg ha távol van, kevésbé. Magyarán minél nagyobb az elmozdulás, annál közelebb van a tárgy.

[SVS_16] Október 20.

Szerző: Elrood | Dátum: 2010-10-21 00:12 | Hozzászólások (0)

Október 20., még 50 nap

Az 15. bejegyzésben írtam, hogy balra rosszul lát és ezzel kezdeni kell valamit. Közben rájöttem, hogy azzal nem lehet mit kezdeni, hiszen a kamerák rögzítettek és jobbra is ez a probléma, hogy van egy sáv, amire nincs illesztés.

Több megoldási lehetőség kínálkozik:
1. A robot akkor fordul, mikor még biztonságosan megállapítható, hogy mehet-e balra vagy jobbra, ha szemben akadály van.
Hátrány: szerintem elég csúnyán néz ki, hogy a tárgy előtt nagyon messze már fordul, kicsi teremben meg körbe-körbe forgolódik.
2. A robot használja a fejét, így közelebb engedhetem a tárgyhoz és mégis biztonságosabban megállapítható merre induljon.
Hátrány: konzulensnek nem tetszik :).
3. 1. pontban leírtak a javítása. Eddig csak a bal képre volt megállapítva a 3D-s koordináták, most meglesz állapítva a jobb oldalra is, így kicsit biztosabb lesz a 3D-s térkép megállapítása.
Hátrány: ugyanazt mint az elsőnek, csak kicsit talán közelebb lehet engedni.

3. pontbelit el is kezdtem tesztelni. BM-mel van egy baj, csak balra illeszt. Szerencsére nem volt túl nagy probléma megcsinálni az ellenkezőjét. Felcseréltem a két képet a függvényben, és kicsit alakítottam a beállításokon:

BMState->minDisparity=-90;
BMState->uniquenessRatio=60;

[SVS_15] Október 18-19.

Szerző: Elrood | Dátum: 2010-10-19 20:48 | Hozzászólások (3)

Október 18., még 52 nap

A robot következőt fogja csinálni: megy, míg túl közel nem kerül egy tárgyhoz, aztán elfordul valamerre, aztán tovább halad. Megpróbálok egy elég nagy tesztpályát készíteni, ami teli lesz szórva dobozokkal.

Az adatok megfelelőek, megkaptam a zöld jelzést, most már pontos adatok alapján kidolgozhatom azt az algoritmust, ami a fenti cselekvést meg tudja csinálni.

Persze ezzel vannak gondok, mert jelenleg a bal képre készül el a 3D-s ponthalmaz, ezért balra rosszabbul lát. A másik probléma, hogy a kamerák távol vannak, kicsi a látószög. E két nagyobb probléma miatt a robot kénytelen lesz látványosan hamarabb fordulni.
Van két ötlet ennek a leküzdésére, majd később leírom.

Csináltam egy képsorozatot, ahol centivel szépen lemértem minden távolságot, elkezdtem a kapott OpenCV eredményeket hozzárendelni a valósághoz.

Ígértem egy olyan képet is, ahol nem merőlegesen, hanem élével szemben áll egy doboz a robottal, íme:

[SVS_14] Október 16-17.

Szerző: Elrood | Dátum: 2010-10-17 19:48 | Hozzászólások (0)

Október 16., még 54 nap

Feljegyzés, az 1. és 2. képsorozat 54:50-s fejpozíciónál készültek

Ma csak egy fejlesztés történt, a párhuzamosan végrehajtható dolgokat külön threadbe raktam. A sebesség fontos :). Mérések holnap, mert lámpafénynél eléggé ugrálnak az eredmények, de így is látható gyorsulás. Threadbe rakáson kívül van még egy lehetőség a gyorsításra: kiszedem a megjelenítést. A rektifikált kép és a látható disparity kép előállítása is időbe telik.

VS2008 is tud szép hibákat irkálni:

Pedig a parancsot az msdn oldaláról néztem, és csak a kernel32.dll volt megadva függésnek.

Debug módban nem ilyeneket kéne feldobnia...

Október 17., még 53 nap

Hibaüzenetek folytatása, most SmartSVN:

Semmi változás előtte, program újraindításánál már jó

[SVS_13] Október 9-15.

Szerző: Elrood | Dátum: 2010-10-16 01:07 | Hozzászólások (3)

Október 11., még 59 nap

Csak kiderült, hogy valami nem stimmel.
A teszthez használt képekkel van egy nagy baj: a sakktábla.
Ugyanis a BM párokat keres a két kép között, a sakktábla mintái pedig ismétlődnek, így mindig a bal szélén találja meg (ha balról kezdi, nem néztem utána) a keresett pontot, hiába van az mondjuk a sakktábla jobb szélén. Pontosan ezért volt egy kupacban minden talált pont, aaaaaah.

Első körben saját képek kellettek, amiket lementek a programmal, mert robottal rohangászva nem lehet mindig ugyanolyan képeket csinálni.

Rectify és remap a menüből átköltözött ide, a képmentést egyelőre a normálhoz raktam.

Gondoltam a kép neveket a rand() nevű csoda függvénnyel teszem különbözővé, hát nem eléggé random :). Később átjavítom időbélyegre.

Második körben csináltam egy külön projektet, hogy a BM és egyéb teszteket elvégezzem, mert az eddigiek teli voltak szemetelve marhaságokkal.

A terv az, hogy egyelőre megpróbálom a BM-ből kihozni azt, amit lehet. Ha sikerül, és az FPS 1 lesz vagy afelett, akkor meghagyjuk, és ha még van idő, akkor próbálom meg felgyorsítani ritka illesztéssel.

[SVS_12] Szeptember 20.-Október 8.

Szerző: Elrood | Dátum: 2010-10-08 11:52 | Hozzászólások (0)

Szeptember 20., még 80 nap

Ebben a postban kicsit benéztem, OpenCV a C-s és a C++-s rész is 2.1-s: [link].

Következő lépés: A két képből 3D-s adatokat nyerni.

Október 8., még 62 nap

Visszatértem, elég sokat szenvedtem a 3D-s adatokkal eddig.
Elvileg az OpenCV-ben van egy függvény, cvReprojectImageTo3D, amivel elvileg rögtön 3D-s ponthalmaz nyerhető a cvFindStereoCorrespondenceBM eredményéből. Itt egy bizonyíték.

Sajnos nálam valami nem klappol. Most a különböző próbálgatásoknak a beállításai és eredményei lesznek felsorolva.

Először is kellett két, ami mindig ugyanaz, és van sztereókalibráció, ezért az OpenCV példák közti képet használtam. A különböző verziók között csak a változásokat írom le.

személyes bejegyzések

listázás
találatok >>