Geometria alakzat felismerése video stream-ben

 ( nehai | 2011. március 30., szerda - 22:50 )

A feladat a címben... konkrétan egy 640x480-as stream-ben kellene felismerni 2-5 párhuzamosan futó sötétszürke vonalat.

Létezik erre valami library vagy esetleg konkrét alakalmazás?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ha pelda kepet tudnal adni, akkor lehetne konkret segitseget adni. Igy csak annyi, hogy nezd meg az opencv-t.

Köszi az infót. Itt van három példa kép, ezekben kellene felismerni a csöveket.

http://zippy.cso.uiuc.edu/~roma/signal/images/Pipeline-1.jpg
http://sgp.undp.org/intranet//img/projects/9762/pipe%20line%20coming%20from%20the%20intank%20to%20the%20well.jpg
http://farm4.static.flickr.com/3467/3263692375_7d89375b90.jpg

Mennyire gépigényes ez a feladat? Embedded cuccal megoldható vagy erőgép kell hozzá?

Sosem csináltam ilyet, de vannak általánosítható szempontok.
Realtime? - mennyire, 200 vagy csak 20 km/ó -ás sebesség mellett kell felismerni. Azaz milyen sebességgel kell felismerni az alakzatokat, mit befolyásol, hogy a haladás párhuzamos vagy merőleges a csövekre nézvést, esetleg bármilyen szögben.
Én onnan indulnék, hogy színes kell hogy legyen a kép? Mindjárt erősen redukálja a feldolgozandó infót. A különféle fotómanipulációs szoftverekben van kontraszt módosítás (egészen odáig lehet vinni hogy jóformán csak ff alakzatok maradnak), és van olyan transzformáció ami a kép kontúrjait "javítja/emeli" (biztos van valami szép neve, de mint mondtam nem vagyok ennyire képben).
Az biztos, hogy nem triviális a feladat. Gondolj a rendszám felismerő rendszerekre - borzasztó sok baj volt velük, megvilágítás, szennyezettség stb. Pedig ha belegondolsz, a rendszámtábla lokalizálása után csak betűk és számok maradnak, amire léteznek jó kis OCR libraryk.

* Én egy indián vagyok. Minden indián hazudik.

Csatalkozom. A rendszámtábla felismerése is hatalmas munka. Ráadásul ott van támpont, hogy milyen egy szabványos rendszámtábla. A cső pedig az bármi lehet. A gumisalgtól a távhőcsőig minden.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Nem trivi a feladat, mert látom, hogy természetes képeken kell megtalálnod, változó fényviszonyok mellett.

A feladat nehézsége attól függ, hogy milyen arányú false negatív és false pozitív találatra van szükséged.

A real-time megoldás pécén, komolyabb DSP-én vagy ARM cortex procin lehetséges.

Egyszerű módszerekkel, "gyorsba" kb. 10 millió órajel alatt lehet megcsinálni 320-as képre C-ben (optimalizációk nélkül), ha komolyabb találati arányra és kevés téves riasztásra van szükséged, akkor ez lehet sokkal több is.

Csak szólok, hogy működő módszerhez nagyon sok képre van szükséged, hogy el tudd egyáltalán dönteni, hogy az algoritmusod működik, vagy nem,

Ezt a feladatot megoldó libet nem ismerek, OpenCVben, Matlabban van Hough transzformáció: az még kevés lesz, de abból talán el lehet indulni. Illetve felejtsd el a Hough-ot, mert ezer sebből vérzik, de az alapötletéből kiindulva lehget írni "gyorsba" egy csatornakeresőt.

Jobban megnézve a képeket, felejtsd el a gyors megoldást.

Ez egy nagyon komoly fejlesztés, a hough tuti kevés lesz, ezzel nagyon sokat kell játszani, mire kielégítő megoldás születik.

Először nézz meg vagy 100-200 képet, és csak azután válassz módszert.

csak kovetnem ...
ha van mit :)

szép napokat
zsömi

Ez nem lesz pite. Hasonlókat készítettem én is, nekem az elv az annyi volt, (ami csak akkor működik, ha a kép viszonyalg nagy százaléka a keresett dolog), hogy túltömöríted a képet, ekkor eltűnnek a zavaró részletek, majd egy fourier transzformálás után a fourier térben a megfelelő függvényekre jellemző dolgokat kerestem (ez elsősorban az én setemben periodicitás volt). A csövek esetében az egyenes fourier képt kell keresned. De ogy ezt hogyan lehet kiszűrn, arra nincs ötletem.Ráadásul ezzel még csak annyit tudsz eldönteni, hogy van egybefüggő egyenes szakasz a képen. Az pedig, hogy ez micsoda, cső, vagy egy árnyék..... Arra ötletem sincs, hogy hogyan döntsd el. Az én helyzetem sokkal egyszerűbb volt, mert nekem a minta szimmetrikusságát kellett elenőriznem, úgy világítottam meg ahogy akartam, annyiszor ahányszor akartam..... Kitartást.

UI: Most olvasom, hogy párhuzamosak. Akkor annyira nem gáz a helyzet. Én azt hittem, hogy bármilyen csövet fel kell tudnia ismerni. Szóval párhuzamosok keresése. Akor az opencv-ben találsz mintapéldát a dft-re. Pipeline-1.jpg dft-je ilyen. Kapásból látszik az egyenesek fourier képe középen.

A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

ha jól értem a valóságban párhuzamos, a képen perspektív

egyébként érdekesek ezek az "egy lépésben megoldok én bármit, a kivitelezést meg rád bízom", pl "nézd meg a képeket amiket fel akarsz dolgozni aztán dönts", a két legalább valami kapaszkodó közül (az emberi tudást ugye nem lehet használni hogy tudjuk mi az a cső) a színcsatornákat vegyük ki hisz már harmad akkora adatmennyiségen kell akkor csak dolgozni :)

no offense :)

Úgy sokkal jobb lenne, ha elküldené a problémát, és másnap reggelre lekódolja neki valaki a tökéletes megoldást :-).

Ennél a problémánál sajnos nincs holy grail (egyelőre?), az ilyesmi vérverejtékes sokmunkanapos próbálgatásba (algoritmusok, paraméterezések, stb) szokott torkollni. Az eredmény minősége pedig kétséges.

persze, de ez triviális, ami nem az hogy ilyenre létezhet library (igen, létezhet!), és az volt a kérdés hogy valaki tud is e róla

Az hogy perspektív az nem nagy gond szerintem, emiatt a Fourier képen nem egyetlen vonal az eredmény, hanem egymással szöget bezáró vonalak sokasága (+ más is, de a képződött alakzat jól látszik). Azon felül nem egy olyan transzformáció létezik ami ezt kikorrigálja (épeszű határok között persze). A színcsatornákal pedig abszolút nem fogalkoztam most, mert nagyon egyszerű volt megnyomni az fft-gombot a szoftveremen. Az hogy most ez nekem -, vagy + 3 tized sec, nem érdekelt, de természetesen jogos a felvetés. Én is így szoktam, amikor a hologramot rekonstruálom, mert 10k*10k pixelszámnál már tényleg nagyon nem mindegy. Egyébként amit írtam az koránt sem megoldás. Max ötletnek talán jó lehet.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

nem is neked írtam hanem a fentebbi hsz-okra (is)

az fft-t még gondold át szerintem.. vagy ha egyszerűbb a példa képen nézd meg hogy az van-e amit mondtál :)

(az fft frekvenciát mutat, nem irányt, egy vonalnak sok frekvenviája van (impulzusnak fft-je minden frekin 1) és azt se mondja meg hán cső van.. ha még különböző is az iránya a csöveknek nem sokra megy vele..

igen, a képektől függ, akár több algoritmus is kellhelt amiben az egyik szereplő lehet az fft, ami jelzi hogy HA van cső, akkor milyen irányú, de semmi többet, azt sem jelzi ha nem párhuzamos

Abszolút egyetértek veled. Tudom, hogy az fft-frekvenciaspektrumot ad vissza 1D-s fft esetén ennyire tiszta is a dolog, 2, vagy több dimenzió esetén ezen frekvenciák fázisáról is kapunk infót. Na és ez lesz azonosítható a csövek irányával (de csak mert egyenesek, és dominál a képen ha szerencsénk van). De fentebb pont ezt is írtam, hogy ha vannak benne párhuzamosok, akkor a párhuzamosok irányára lehet belőle következtetni.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

HA vannak benne párhuzamosok, akkor kapsz egy súgást a másik algoritmusodhoz hogy mit keressen..
a példa képeken kettőnél egy igen halvány súgást jelent ez, a harmadiknál semmit

Igen. Én is kipróbáltam mind a 3-at. Ez lett a legjobb. :). Nem is mondtam, hogy ez a tökéletes megoldás. Ismételten mondom, ha vannak párhozamosok, akkor ez támpontot ad az irányra, ami később akár be is válhat. Hol van ez a sima kis fft a megoldástól még!

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

csak érted, kb így az összes eddigi tipp meg még ha 10x ennyi hasznosabbat is felsorolnánk sem érne annyit sem mintha valaki ezt a linket benyögné:
http://www.amazon.com/Digital-Image-Processing-Rafael-Gonzalez/dp/0201180758

márpedig ez is messze van egy "library"-tól

Mondjuk igen. Én nem is néztem, hogy ez nem a programozói topic. Többnyire csak azt szoktam olvasni. De az opencv följött, mint alkalmas eszköz. Én is azt használom(Többségében). Annyival kiegészítve, hogy nem volt benne cirkuláris peremfeltételű fft, annyit kellet csak írnom, a többi megy neki. Akkor csatlakozom én is egy könyv linkkel.:
http://oreilly.com/catalog/9780596516130 Bár nem tudom, hogy ez már a 2.2-es hez való, vagy még a 2.1-es, de mindenképp hasznos.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Elég jónak tűnik. Nincs meg valakinek pdf-ben? :)

"nézd meg a képeket amiket fel akarsz dolgozni aztán dönts"

Pedig érdemes. Pár éve foglalkozom ilyesmivel, és ha nem láttál elég képet, akkor nem lehet okos algoritmust fejleszteni.

"színcsatornákat vegyük ki hisz már harmad akkora adatmennyiségen kell akkor csak dolgozni"

Viszont információ is kevesebb lesz. :-)
Amúgy általában elég gray-scale-ben dolgozni. Viszont, ha ismert a csövek színe, akkor segíthet (persze a fényviszonyok változásai, a "beégett" fehér foltok tönkreteszik a színeket, ezért a szín szvsz csak kiegészítésre jó.)

-------

Mivel eléggé különböző csöveket láttam a képeken, ezért feltételezem, hogy több módszer lesz célravezető.

Ebből az egyik a következő lehet (ha működik):
- veszel egy gradiensképet
- veszed a gradiensek hisztogramját
- Ha kedvező a szituáció, akkor a csövek élei benne lesznek a top valahány irányban a hisztogramon.
- Innentől nem tudom, itt meg kell nézni, hogy milyen eredményeket ad a módszer.

- Ha nem kedvező a szituáció, mert pl. sok vasúti sin van a képen, amik megtévesztik ezt az egyszerű módszert, akkor a csöveken látható köríveket keresném. Persze ez sem mindig jó, mert pl. az első képen ezek (ha jól emlékszem) nem látszanak.

A Fourrier-t kihagynám, szerintem lassú.

Figyelni kell a perspektívára, amikor a párhuzamosságról döntünk.

Amúgy lehet, hogy pont ez is lehet egy szűrés: csak azokat az egyeneseket meghagyni, amik vagy párhuzamosak, vagy egy pontban metszik egymást.

"színcsatornákat vegyük ki hisz már harmad akkora adatmennyiségen kell akkor csak dolgozni"

Viszont információ is kevesebb lesz. :-)

Viszont mivel video streamrol van szo, onnan pedig mindefelekeppen egy yuv varians esik ki (codec-bol jobbara y420p, kamerakbol pedig ezek variansa) ezert annyi informaciot eleve nem hordoz az U es a V plane, h nagyon erdemes legyen vele szamolni, leven az iDCT eleg sok pontatlansagot bevisz. Viszont az Y plane egy teljes felbontasu grayscale kepnek felel meg, ellenben az U/V plane-nel ez jobbara csak negyed akkora.

---
pontscho / fresh!mindworkz

Igaz. :-)

szerintem meg nem kell megnézni a képeket, amikor a metróra szállok fel sem nézem meg hogy bent van-e a megállóban vagy nincs ;)

a színeknél a szarkazmusdetektorod úgy látszik kikapcsolt ;)

ahogy írod is épp azért mert relatíve bonyolult a feladat, az ff-t nehéz lenne kihagyni, nincs azzal semmi gond, nem kell teljes méretű képre, egy egész pici változatára is elég, egy apró plusz információt ad a többi algoritmusnak.. csak így önmagában édeskevés

Az FFT képen a vízszintes és a függőleges csík főleg a kép oldalait jelenti IMHO. Ha ráteszel az elemzés előtt valami harang-szerű ablakfüggvényt, akkor még markánsabban kiemelkedik a cső iránya.

Igen az. (ha jól tudom szélhatás a neve a jelenségnek), de ez a progi amibe beraktam az digitális holográfiához készült, így ennek a problémának a megoldására alkalmatlan, de a vonalak látszanak benne. Egyébként nekem ciklikus peremfeltételem van a szélhatás csökkentésére, de ennél a képnél teljesen marhaság lett az eredmény, így inkább kikapcsoltam, és maradt a sima fft.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Ez valami repülő robot lesz, ami végigrepül a csövek felett? Vagy micsoda?

Ez meló, vagy valami hobbi projekt amúgy?

Néhány ötlet:
* Ha valami mozog, ami végigmegy, akkor az egymás utáni képeken számítható előre, hogy mennyi változasnak kell kb lenni - forgás, eltolás, perspektíva változás - tehát tudod, hogy hol keresed az ojjektumot
* FFT kép a párhuzamosok irányának keresésére nagyon cool, mert merőlegesen meg fog jelenni origóból induló csík az FFT-n, amit fel lehet ismerni
* Ne a HW-ből indulj ki, végtelen feldolgozási kapacitásban gondolkodj! Mire végzel a projekttel bele fog férni a zsebedbe, és el fogja bírni egy akkus helikopter is :-)

Szerk - épp most volt Slashdoton hasonló. Érdemes lehet fénykép helyett ilyen képet csinálni talán: http://www.suasnews.com/2011/03/4851/mit-slam-quad-using-kinect/

Matlabban elég szépen lehet elemezni.
--
Coding for fun. ;)

Köszönöm a rengeteg információt.

A három káp amit feltettem, az három szálsőséges eset. Gondoltam hogy ha ezeket fel lehet ismertetni, akkor a normál esetek felismerése sima ügy.
A képkockák 99,9%-a felülről felvett, a csöves részeknél a képen teljesen keresztülfutó, 2-5 párhuzamos cső. A videó stream lassan változik, gyakorlatilag elég minden 50-100 képkocka kiértékelése. A képek színvilága a második képhez nagyon hasonló, élénk természeti színekben sötétszürke csövek. Véleményem szerint kiindulási pont lehet a színtartalommal bíró képpontok eldobása.

Valaki kérdezte, hogy munka vagy hobby. Munka lesz, főleg ha megoldható kicsi és könnyű "kiszerelésben".

Nem kell 100% pontosság (nem is lehet). Két dolgot kellene tudni az algoritmusnak:
1. eldönteni, hogy nagy valószínűséggel az van a képen amit keresünk, ezeket le kell tárolni.
2. lehet, hogy az van a képen amit keresünk, és riasztani az embert, hogy kukkoljon ő is.

Megpróbálnám Mathematicával megoldani ezt a problémát.

Itt egy példa rá (mondjuk úgy, hogy nem több öt sornál):
http://www.wolfram.com/mathematica/new-in-8/comprehensive-image-processing-environment/segment-an-aerial-image.html

További képfeldolgozásos példák:
http://www.wolfram.com/mathematica/new-in-8/comprehensive-image-processing-environment

A 8-as verzió pedig támogatja a CUDA-t, így még gyors is lesz :)

--
The Elder Scrolls V: Skyrim

Ez kegyetlen feladatnak néz ki így elsőre...
Legegyszerűbben talán spéci hardverrel lehetne megoldani, mondjuk speciális kamerával. Mint pl Microsoftéknál a kinect, csak persze valamilyen más szűrővel, feltételezem lehetséges lenne könnyen kiszűrni.

----------------
...jönnek a gépek, a szemükben nincs harag...