Keressen képeket részlet szerint
Beszédében Alexander Krainov elmondta, hogy a Yandex.Kartinki fürtözött duplikált képeket. Más szóval, az ismétlődő képeket választottuk és szűrtük. Ahol az alapötlet a vázlatos képek kiválasztása a DoG szűrőn keresztül. majd keresse meg a kulcspontokat és szerezzen leírást.
A másolatok csoportosítása csökkenti a leíró karakterek lekérdezését. Ez a legfontosabb pontok "digitális formátuma" a cikkből A duplikátumok csoportosítása a képkeresésben.
De szeretnék egy kicsit többet megtudni arról, hogy milyen descriptorok vannak, és hogyan kell keresni őket.
leírások
A legfontosabb pontok olyan pontok, amelyek ideális esetben nem változnak a kép módosításakor vagy módosításakor.
A jellemzők általában a jellemzők konvolúciója és a kulcsfontosságú pontok ábrázolása egy olyan formában, amely elérhető a véletlenszerű ellenőrzésre.
A kulcsfontosságú pontok, azok leírása és a véletlenszerű ellenőrzési módszerek hatékony kiválasztásának keresése még mindig napirenden van.
De el kell indítanunk valahol, ezért forduljunk az OpenCV könyvtárához.
Az első dolog, ami elkapja a szemed, a SURF leírók.
Ki ígér rendkívüli pontosságot. Ami a tesztek után megerősítésre kerül.
De van néhány árnyalat.
A SURF leíró a 128 (vagy 64) számról egy kulcspontra. A véletlen próbát a legközelebbi pont (vagy akár kettő) keresésével végezzük. És minél közelebb van a pont, annál jobb.
Kiderül, hogy 1000 kulcsponttal rendelkező képen 128 000 lebegőpontos számra van szükség.
Ráadásul a pontok felismerése meglehetősen bonyolult művelet, és jelentős időt igényel. Ez nem teszi lehetővé az algoritmus hatékony használatát kis eszközökön. Ezenkívül az algoritmus maga is zárt és szabadalmaztatott (az USA-ban).
Miután megismerkedtem a SIFT és a SURF programmal, a megvalósításban valami egyszerűt akartam, miközben kis szerverre vagy eszközre is alkalmazhattam.
Perceptuális hash
És észlelő vagy észlelő hashokat találtak.
A probléma az, hogy ha a kép kissé megváltozik, a hash szintén jelentéktelen mértékben változott.
A véletlen próbát úgy végezzük, hogy számba vesszük a különbözõ pozíciók számát a két hash között. Ie Hamming távolságot számolva. És minél kisebb, annál kisebb a különböző elemek, annál nagyobb a véletlen.
Ez a módszer arra szolgál, hogy teljes vagy részleges duplikált képeket keres. Ie ha a képformátumban vagy a tartalomban bekövetkező interferenciákban jelentős változás következik be, akkor lehetetlen ellenőrizni a mérkőzést, mivel a hasok jelentősen eltérnek egymástól.
Más szavakkal, az észlelő hashok nem alkalmasak semidoublet keresésre.
Ennek alapján kísérletet tettünk arra, hogy kombináljuk a SURF leíróit és a perceptuális hashajtókat, hogy megoldjuk a fuzzy félhullámok megtalálásának problémáját.
A módszer a kulcsfontosságú pontok klaszterezésén alapul, oly módon, hogy a klaszterközpontok egybeesnek az eredeti és az összeomlott képekkel. Aztán a kulcspont körüli képfájlt kivontuk, és észlelő hashot kaptunk. Ennek eredményeképpen egy kép körülbelül 200 vágott lécet és hashajtását eredményezett.
Ennek a módszernek két és fél jelentős hátránya van:
1. A véletlen ellenőrzés alacsony sebessége nagy mennyiségű hashúzással. 1 millió takarmányt keresett 20 másodperc
2. a kulcspontok megszerzésének alacsony sebessége
3. Alacsony pontosság, sok hamis pozitívum, nagy követelmény a célállomásra, nem alkalmas minden képre, előminősítésre van szükség stb.
Az a gondolat, hogy egy bizonyos számú ujjlenyomat jelenik meg a képen, amely egyszerűen összeilleszthető egymással, elkápráztatott.
Ezért úgy döntöttek, hogy megoldást találnak ezekre a problémákra.
Lassú mintavételi arány
A Hamming-távolság megtalálásának és kiszámításának bonyolultsága egy nagy adathalmazon független probléma, és független megközelítést igényel.
Némi kutatás után kiderült, hogy számos megoldás létezik ehhez a problémához.
A leghatékonyabb algoritmust, a HEngine-t választották és valósították meg. ami lehetővé tette
60-szor, hogy gyorsítsák fel a kiválasztást az adatbázisból.
SURF és kulcspontok
Mivel mi már dolgozik bináris hash vagy az ujjlenyomatok és a megfelelő hinni Hamming távolság, ez furcsa, hogy az ilyen gép, mint a felszíni és szükséges lenne, hogy más módszerek egyre legfontosabb pontok és a leírásokat.
Általában az OpenCV kétféle leíró típust tartalmaz:
- Lebegőpontos leíró
- És bináris leírók
Itt a bináris descriptorok, mint senki más, nem alkalmasak a mi problémánkra, mert a Hamming távolságot is használják a mérkőzések ellenőrzésére.
ORB: a SIFT vagy SURF hatékony alternatívája
Az OpenCV máris kiváló alternatívája a SURF-nek, ami nemcsak nyitott és engedélyezési korlátozások nélkül is könnyebb és gyorsabb. [1]
Az ORB egy orientált FAST és elforgatott BRIEF - egy továbbfejlesztett verzió és a FAST kulcspont-detektor és a BRIEF bináris descriptor kombinációja.
Az ORB-nek van egy jelentős árnyalata számunkra - a leírók mérete 32 bájt / pont.
A véletlen teszt a Hamming-távolságok összege a leíró minden egyes bájtja esetében (az első az első, a második a második, stb.
A mi problémánkban azt értjük, hogy egy pont ad egy értéket, és itt kapunk 32-et, amelyet szintén össze kell foglalni az indexben szereplő megfelelőikkel (az első az elsővel, a második a másodikval és így tovább) a céladatbázisban.
Mivel a hash egy 64 bites szám, szükségünk van 32 bájt a leíró, hogy nyomja a 8 bájt, és nem veszít nagy pontossággal.
Egyes tesztek után úgy döntöttek, hogy ezeket a 32 bájtot próbálják meg 16x16 bites mátrixot ábrázolni. És ezt követően átadja ezt a mátrixot az észlelő hash PHash segítségével. Az eredmény csak 64 bites szám volt.
Most a koncepció teljes leírására jutunk.
Hogyan működik az indexelés?
1. Szerezd meg az ORB kulcsfontosságú pontokat és leírókat, válassza ki a szükséges pontok számát a képen.
2. Az eredményül kapott 32 bájtos leírók 16x16 bites mátrixként vannak ábrázolva.
3. A mátrixot 64-bites számra konvertálja a PHash használatával.
4. 64 bites nyomatokat mentünk a MySQL-be.
5. Válassza ki a kívánt Hamming távolságot, és futtassa a HEngine démont, amely elvégzi a keresést.
A keresés működése
Ugyanazokat a lépéseket hajtjuk végre, mint az indexelés, csak a kért képen.
4. Kérünk a HEngine démont, amely a megadott limitben minden hashajtót visszaad.
5. Ha szükséges, szûrje ki az irreleváns eredményeket.
1. ábra Hamming távolságkorlát 7. A szürke pontok a kulcsfontosságú pontok. Zöld - egybeeső pontok. Vörös - egybeesik a standard ORB teljes brute force.
És mi a végén?
Végül számos problémát sikerült megoldani:
- megtalálja a módját, hogy gyorsan kiszámolja Hamming távolságát egy nagy adathalmazon
- megszabadulni a nagy és kellemetlen SURF-től
- növeli a kulcspontok és az ujjlenyomatok kiválasztásának sebességét
- és nem is veszítenek pontosan.
Ez lehetővé tette a képek töredékét, valamint a nagyszámítógépes erőforrások nélküli fuzzy semidoubie-t.
Tekintettel arra, hogy a beállításoktól függően az ismertetett algoritmus az ORB bináris descriptoron keresztül körülbelül 1000 darabnyi hash-ot produkál képenként.
1000 kép alapján 1 000 000 törmelék keletkezik az adatbázisban. És az adatbázisban lévő összes kép teljes keresése másfél percet vesz igénybe.
Összehasonlításképpen, jelentése Krainov Alexander Krainov elmagyarázza, hogy a keresés több mint egymillió képeket veszik körülbelül két percig.