Optik oqim haqida bilmoqchi bo'lgan narsangiz, lekin so'rashdan uyaldingiz. Tasvirning siljishini baholash uchun optik oqim usullarini qo'llash Maqola aylanish oqimining optik usullari

Iltimos, uni maqolani formatlash qoidalariga muvofiq formatlang.

Optik oqim- kuzatuvchining (ko'z yoki kamera) voqea joyiga nisbatan harakati natijasida hosil bo'lgan ob'ektlar, yuzalar yoki sahna chetlarining ko'rinadigan harakati tasviridir. Harakatni aniqlash, ob'ektni segmentatsiyalash, harakatni kodlash va stereo nomutanosiblikni hisoblash kabi optik oqimga asoslangan algoritmlar ob'ektlar, sirtlar va qirralarning bu harakatidan foydalanadi.

Optik oqimni baholash

Buyurtma qilingan tasvirlar ketma-ketligi harakatni bir lahzali tasvir tezligi yoki diskret siljish sifatida baholashga imkon beradi. Fleet va Weiss tuzdilar o'quv kursi optik oqimni baholash uchun gradient usulidan foydalanish.

Optik oqimni hisoblash usullarini tahlil qilish Jon L. Barron, Devid J. Fleet va Stiven Beauchemin ishlarida amalga oshirildi. Ular usullarni ham aniqlik nuqtai nazaridan, ham hosil bo'lgan vektor maydonining zichligi nuqtai nazaridan ko'rib chiqadilar.

Optik oqimga asoslangan usullar bir vaqtning o'zida va har bir pikselda olingan ikkita kadr orasidagi harakatni hisoblab chiqadi. Bu usullar differensial deb ataladi, chunki ular signalni Teylor seriyasining segmenti bilan yaqinlashishga asoslangan; shunday qilib, ular vaqt va fazoviy koordinatalarga nisbatan qisman hosilalardan foydalanadilar.

2D+ o'lchami bo'lsa t(yuqori oʻlchamli holatlar oʻxshash) bir kadrda intensivligi boʻlgan joydagi piksel , va ga siljiydi va quyidagi tenglama yozilishi mumkin:

Teylor qatoridan foydalanib, siljish kichik bo'lsa, biz quyidagilarni olamiz:

.

Bu tengliklardan kelib chiqadi:

shu yerdan ma'lum bo'ladi

- dagi optik oqim tezligining komponentlari,
, , - tegishli yo'nalishdagi hosila tasvirlari.

Shunday qilib:

Olingan tenglama ikkita noma'lumni o'z ichiga oladi va uni yagona hal qilib bo'lmaydi. Bu holat deb nomlanadi diafragma muammosi. Muammo qo'shimcha cheklovlar qo'yish - tartibga solish orqali hal qilinadi.

Optik oqimni aniqlash usullari

Optik oqimdan foydalanish

Optik oqim tadqiqotlari videoni siqish va harakatni tahlil qilish sohalarida keng olib boriladi. Optik oqim algoritmlari nafaqat oqim maydonini aniqlaydi, balki sahnaning 3D mohiyati va tuzilishini, shuningdek, ob'ektlar va kuzatuvchining sahnaga nisbatan 3D harakatini tahlil qilishda optik oqimdan foydalanadi.

Optik oqim robototexnikada ob'ektni aniqlash, ob'ektni kuzatish, harakatni aniqlash va robot navigatsiyasi uchun ishlatiladi.

Bundan tashqari, ob'ektlarning tuzilishini o'rganish uchun optik oqim ishlatiladi. Chunki harakatni aniqlash va struktura xaritasini yaratish muhit hayvonlar (inson) ko'rishning ajralmas qismi bo'lsa, u holda bu tug'ma qobiliyatni kompyuter yordamida amalga oshirish kompyuter ko'rishning ajralmas qismi hisoblanadi.

Pastki chapdan yuqori o'ngga harakatlanayotgan to'pning besh kadrli videosini tasavvur qiling. Harakatni aniqlash usullari ikki o'lchovli tekislikda to'pning yuqoriga va o'ngga harakatlanishini aniqlashi mumkin va bu harakatni tavsiflovchi vektorlarni ramkalar ketma-ketligidan olish mumkin. Videoni siqishda bu kadrlar ketma-ketligining to'g'ri tavsifi. Biroq, kompyuterda ko'rish sohasida qo'shimcha ma'lumotsiz, to'pning o'ngga harakatlanayotganini va kuzatuvchi bir joyda turganligini yoki to'p tinch holatda va kuzatuvchi chapga harakatlanayotganini aniqlash mumkin emas.

Shuningdek qarang

Eslatmalar

Havolalar

  • DROP: (Windows interfeysi) Diskret optimallashtirishdan foydalangan holda zich optik oqimni baholash uchun bepul dasturiy ta'minot.
  • Frantsiya aerokosmik laboratoriyasi: Lukas-Kanade asosidagi optik oqimning GPU amalga oshirilishi

Wikimedia fondi. 2010 yil.

  • Optik oqim o'lchagichlar
  • Ikki marta qoplangan optik tolali

Boshqa lug'atlarda "Optik oqim" nima ekanligini ko'ring:

    Optik element- retroreflektor ko'zguni olish imkonini beruvchi optik tizim. Eslatma Optik elementlarning quyidagi turlari ajratiladi: tekis qirrali, sferik va kino. Manba … Normativ-texnik hujjatlar atamalarining lug'at-ma'lumotnomasi

    yorug'lik moslamasining optik samaradorligi- atrof-muhit, issiqlik sharoitlari va yorug'lik moslamasining chiroqning yorug'lik oqimiga ta'sirini hisobga olmagan holda, chiroqning (chiroqlarning) nominal yorug'lik oqimiga nisbatan hisoblangan yoritish moslamasining samaradorligi ( lampalar). [GOST ...... Texnik tarjimon uchun qo'llanma

    Optik cımbızlar- RNK polimerazasini o'rganishda optik cımbızlardan foydalanish sxemasi Optik cımbızlar (inglizcha ... Vikipediya

    ELEKTRON-OPTIK KONVERTER- (EOC), ko'zga ko'rinmaydigan ob'ekt tasvirini (IQ, UV va rentgen nurlarida) ko'rinadiganga aylantirish yoki ko'rinadigan tasvirning yorqinligini oshirish uchun vakuumli fotoelektron qurilma. Tasvir kuchaytirgichning ishlashi optik konvertatsiyaga asoslangan. yoki rentgen ...... Jismoniy ensiklopediya

    Lukas - Kanada- Lukas Kanade algoritmi kompyuterda ko'rishda optik oqimni hisoblash uchun keng qo'llaniladigan differensial lokal usuldir. Ma'lumki, optik oqimning asosiy tenglamasi ikkita noma'lumni o'z ichiga oladi va uni yagona hal qilib bo'lmaydi.... ... Vikipediya

    Lukas algoritmi- Kanada, kompyuter ko'rishda keng qo'llaniladigan optik oqimni hisoblash uchun differentsial mahalliy usul. Asosiy optik oqim tenglamasi ikkita noma'lumni o'z ichiga oladi va ularni yagona hal qilib bo'lmaydi. Lukas Kanade algoritmini chetlab o'tadi... ... Vikipediya

    OpenCV- Kompyuterni ko'rishni yozing Muallif... Vikipediya

    Kuzatuv (kompyuter grafikasi)- Bu atamaning boshqa maʼnolari ham bor, qarang: Kuzatuv (maʼnolari). Kuzatish - bu harakatlanuvchi ob'ektning (bir nechta ob'ektning) joylashishini kamera yordamida vaqt ichida aniqlash. Algoritm video kadrlarni tahlil qiladi va pozitsiyani beradi... ... Vikipediya

Yorqinlik tasvirlari kuzatilgan ob'ektlar bilan birga harakatlanadi. Optik oqim - yorqinlik tasvirining ko'rinadigan harakati. Ideal holda, optik oqim harakat maydoniga mos keladi, lekin biz quyida bu har doim ham shunday emasligini ko'rsatamiz.

Guruch. 12.2. Har doim harakat maydoniga to'g'ri kelmaydigan optik oqim. a - silliq shar doimiy yorug'lik ostida aylanadi - harakat maydoni nolga teng bo'lmasa-da, tasvir o'zgarmaydi; b - harakatsiz sfera harakatlanuvchi manba tomonidan yoritilgan - harakat maydoni nolga teng bo'lsa-da, tasvirning yorug'lik taqsimoti o'zgaradi.

Vizual tizimning linzalari oldida aylanadigan ideal bir hil sharni ko'rib chiqaylik (12.2-rasm, a). Sirt egri bo'lgani uchun, shar tasvirida yorqinlikning fazoviy o'zgarishlari kuzatiladi. Biroq, bu yorqinlik namunasi sirt bilan harakat qilmaydi va tasvir vaqt o'tishi bilan o'zgarmaydi. Bunday holda, harakat maydoni nolga teng bo'lmasa-da, optik oqim hamma joyda nolga teng. Endi harakatlanuvchi yorug'lik manbai bilan yoritilgan statsionar sharni ko'rib chiqing (12.2-rasm, b). Rasmdagi yorqinlik manba harakati bilan o'zgaradi. Bunday holda, harakat maydoni hamma joyda nolga teng bo'lsa-da, optik oqim aniq nolga teng. Ko'zgu aks ettirish va soyalar optik oqim harakat maydoniga to'g'ri kelmaydigan boshqa misollarni beradi.

Bizda faqat optik oqimga kirish imkoni bor va biz odatdagi holatda optik oqim harakat maydonidan unchalik farq qilmaydi deb taxmin qilamiz. Bu bizga tasvirning vaqt o'tishi bilan qanday o'zgarishiga asoslangan nisbiy harakatni taxmin qilish imkonini beradi.

Yorqinlik naqshining ko'rinadigan harakati deganda nimani tushunamiz? Hozirgi vaqtda yorqinligi E bo'lgan tasvirning P nuqtasini ko'rib chiqamiz (12.3-rasm). Hozirgi vaqtda tasvirning qaysi P nuqtasi unga mos keladi, boshqacha qilib aytganda, bu vaqt oralig'ida yorqinlik tasviri qanday harakat qiladi? Odatda P nuqtaga yaqin joyda ko'p bo'ladi

yorqinligi bir xil bo'lgan nuqtalar E. Agar bizni tasvirning yorqinligi doimiy ravishda o'zgarib turadigan qismida qiziqtiradigan bo'lsak, u holda P nuqta C teng yorqinlikdagi chiziqda yotadi. bir xil qiymat E. Biroq, C va WITH chiziqlari nuqtalari o'rtasidagi moslik qanday? Bu savolga javob berish oson emas, chunki bu chiziqning shakli odatda harakatlanayotganda o'zgaradi.

Shunday qilib, biz o'zgaruvchan tasvirdagi optik oqim mahalliy ma'lumotlar bilan noaniq tarzda aniqlanganligini ta'kidlaymiz. Buni boshqa misol bilan tushuntirib beraylik. Keling, vaqt o'tishi bilan o'zgarmaydigan tasvirning bir xil yorqinligi mintaqasini ko'rib chiqaylik. Bu holatda "eng maqbul" nol optik oqim bo'ladi. Aslida, bir hil nuqta ichida biz nuqtalarga istalgan tezlikni belgilashimiz mumkin. Garchi, aftidan, biz kuzatilgan tasvir o'zgarishlari uchun eng oddiy tushuntirishni afzal ko'rardik (bu holda, bunday o'zgarishlarning yo'qligi).

Tasvirning bir nuqtasida yorug'lik bo'lsin. So'ngra, agar va optik oqim vektorining y-komponentlari bu nuqtada, biz yorug'lik hozirgi nuqtada bir xil bo'lishini kutishimiz mumkin. ikkita noma'lum va Vni aniqlang. Bundan tashqari, biz harakat maydoni deyarli hamma joyda uzluksiz ekanligidan foydalanmoqchi ekanligimiz aniq.

Agar yorug'lik silliq o'zgarib tursa va biz tenglamaning chap tomonini Teylor seriyasiga kengaytira olamiz va bu erdan olamiz.

dan boshlab kichiklikning yuqori darajalari shartlarini o'z ichiga oladi

Guruch. 12.3. Yorqinlik naqshining ko'rinadigan harakati.

Ikkinchi tasvirning yorqinlik darajasi C chizig'idagi qaysi P nuqtasi birinchi tasvirning yorqinlik darajasi C chizig'idagi berilgan P nuqtaga mos kelishini aniqlash oson emas.

Guruch. 12.4. Yorqinlik gradienti va uning vaqt o'tishi bilan o'zgarish tezligi haqida mahalliy ma'lumotlar, optik oqim vektorining tarkibiy qismlariga faqat bitta cheklov qo'yadi. Oqim tezligi yorqinlik gradienti yo'nalishiga perpendikulyar to'g'ri chiziq bo'ylab yo'naltirilishi kerak. Biz faqat yorqinlik gradienti bo'ylab yo'naltirilgan komponentni aniqlashimiz mumkin.Oqim tezligining perpendikulyar yo'nalishdagi komponenti haqida hech narsa ma'lum emas.

ikkinchisidan. Keling, kamaytiramiz, bo'linamiz va chegaraga o'tamiz

Optik oqim - bu ishlatiladigan texnologiya turli sohalar siljishlarni, segmentatsiyani, ob'ektni tanlashni, videoni siqishni aniqlash uchun kompyuterni ko'rish. Ammo, agar biz buni Vikipediyada yoki boshqa joyda o'qib, loyihamizda tezda amalga oshirmoqchi bo'lsak, unda, ehtimol, biz juda yomon ishlayotganiga va tartib o'zgarishlarini aniqlashda muvaffaqiyatsizlikka uchraganiga tezda qoqilib qolamiz. 1-2 piksel (hech bo'lmaganda men uchun shunday edi). Unga murojaat qilaylik tayyor ilovalar masalan, OpenCV da. U erda amalga oshirilgan turli usullar va nima uchun PyrLK qisqartmasi Farneback yoki shunga o'xshash belgidan yaxshiroq yoki yomonroq ekanligi mutlaqo noma'lum va siz ba'zi ilovalarda juda ko'p bo'lgan parametrlarning ma'nosini tushunishingiz kerak bo'ladi. Bundan tashqari, qiziq tomoni shundaki, bu algoritmlar qandaydir tarzda ishlaydi, biz o'zimiz yozganimizdan farqli o'laroq. Buning siri nimada?

Optik oqim nima

Optik oqim (OP) - bu har bir nuqtaning ikkita tasvir orasidagi siljishini ifodalovchi aniq harakat tasviri. Mohiyatan, u tezlik maydonini ifodalaydi (chunki siljish, masshtabgacha, bir lahzalik tezlikka teng). OPning mohiyati shundan iboratki, tasvirning har bir nuqtasi uchun ikkinchi tasvirdagi nuqta dastlabki nuqtaga mos keladigan siljish (dx, dy) topiladi. Ballarning mosligini qanday aniqlash - bu alohida savol. Buning uchun siz siljish natijasida o'zgarmaydigan qandaydir nuqta funksiyasini olishingiz kerak. Odatda nuqta o'z intensivligini (ya'ni rangli tasvirlar uchun yorqinlik yoki rangni) saqlab qoladi deb hisoblanadi, lekin gradientning kattaligini, Hessianni, uning kattaligini yoki uning determinantini, Laplas va boshqa xususiyatlarni saqlaydigan nuqtalarni bir xil deb hisoblash mumkin. . Shubhasiz, yorug'lik yoki yorug'likning tushish burchagi o'zgarsa, intensivlikni saqlab qolish muvaffaqiyatsiz tugadi. Biroq, agar haqida gapiramiz video oqimi haqida, agar ular orasida qisqa vaqt o'tgan bo'lsa, yorug'lik ikki kvadrat o'rtasida unchalik o'zgarmaydi. Shuning uchun intensivlik ko'pincha nuqtada saqlanadigan funktsiya sifatida ishlatiladi.

Ushbu tavsifga asoslanib, OPni xarakterli nuqtalarni qidirish va taqqoslash bilan aralashtirish mumkin. Ammo bular turli xil narsalar, optik oqimning mohiyati shundaki, u hech qanday maxsus nuqtalarni qidirmaydi, lekin tasvir parametrlariga asoslanib, o'zboshimchalik nuqtasi qayerga siljiganligini aniqlashga harakat qiladi.

Optik oqimni hisoblashning ikkita varianti mavjud: zich (zich) va selektiv (siyrak). Sparse oqim alohida berilgan nuqtalarning siljishini hisoblaydi (masalan, ba'zi xususiyat detektori tomonidan tanlangan nuqtalar), zich oqim barcha tasvir nuqtalarining siljishini hisoblaydi.Tabiiyki, selektiv oqim tezroq hisoblanadi, lekin ba'zi algoritmlar uchun farq emas. juda katta va ba'zi vazifalar uchun tasvirning barcha nuqtalarida oqimni topish talab qilinadi.

Degeneratsiyalangan holatlarda siljishni aniqlashning oddiy usullaridan foydalanish mumkin. Xususan, agar barcha tasvir nuqtalari bir xil siljishga ega bo'lsa (butun tasvir siljigan bo'lsa), u holda fazaviy korrelyatsiya usuli qo'llanilishi mumkin: ikkala tasvir uchun Furye konvertatsiyasini hisoblang, ularning fazalarining konvolyutsiyasini toping va siljishni aniqlash uchun foydalaning ( qarang en.wikipedia.org /wiki/Phase_correlation). Bloklarni moslashtirishdan ham foydalanishingiz mumkin: oynadagi tasvirlar orasidagi farq normasini minimallashtiradigan siljishni toping. Sof shaklda bunday algoritm uzoq vaqt ishlaydi va aylanishlarga va boshqa buzilishlarga beqaror. Inglizcha Vikipediya sanab o'tilgan algoritmlarni quyidagicha tasniflaydi turli xil variantlar optik oqimning hisob-kitoblari, lekin bu menga unchalik to'g'ri kelmaydi, chunki bu algoritmlar boshqa maqsadlarda ishlatilishi mumkin va bu muammoni to'liq hal qilmaydi. Biz tasvirlarning mahalliy xususiyatlariga asoslangan usullarni optik oqim deb ataymiz (inglizcha Vikipediyada differensial usullar deb ataladi).

Standart yondashuv (Lukas-Kanade usuli)

Algoritmning matematik tavsifi ushbu maqolada etarlicha batafsil berilgan, ammo u faqat nazariy jihatlarga to'g'ri keladi.

Keling, ko'rib chiqaylik matematik model nuqtaning intensivligi siljish natijasida o'zgarmagan deb faraz qilingan optik oqim.

Mayli – birinchi tasvirning qaysidir nuqtasida (x, y) intensivlik (ya’ni t vaqtida). Ikkinchi rasmda bu nuqta (dx, dy) ga siljidi, dt vaqt o'tganda, biz Teylor intensivlik funksiyasini birinchi hadga kengaytirdik (keyinchalik nima uchun faqat birinchisiga aytiladi), bu erda koordinatalar va vaqtga nisbatan qisman hosilalar , ya'ni mohiyatiga ko'ra, ikkita ramka orasidagi (x, y) nuqtada yorqinlikning o'zgarishi.

Fikrimizcha, nuqta o'z intensivligini saqlab qoldi, ya'ni
Biz ikkita noma'lum (dx va dy) bilan bitta tenglamani olamiz, bu uni yechishning o'zi etarli emasligini anglatadi, ya'ni siz faqat bu tenglama bilan uzoqqa bormaysiz.

Muammoning eng oddiy yechimi Lukas-Kanade algoritmidir. Bizning rasmimizda o'lchami 1 pikseldan kattaroq ob'ektlar mavjud, ya'ni, ehtimol, joriy nuqtaga yaqin joyda boshqa nuqtalar taxminan bir xil siljishlarga ega bo'ladi. Shuning uchun biz ushbu nuqta atrofida oynani olamiz va undagi umumiy xatoni Gauss bo'yicha taqsimlangan og'irlik koeffitsientlari bilan minimallashtiramiz (eng kichik kvadratlar usuli bilan), ya'ni o'rganilayotgan pikselga eng yaqin piksellar eng katta vaznga ega bo'lishi uchun. Eng oddiy o'zgarishlardan so'ng biz 2 ta noma'lumli 2 ta tenglamalar tizimini olamiz:

Ma'lumki, bu tizim mavjud yagona qaror har doim ham emas (juda tez-tez bo'lsa ham): agar tizimning determinanti nolga teng bo'lsa, u holda echimlar yoki cheksiz sonlar mavjud emas. Ushbu muammo diafragma muammosi sifatida tanilgan - davriy tasvirlar uchun cheklangan ko'rish maydoni bilan noaniqlikni siljitish. Bu tasvirning bir bo'lagi paydo bo'lgan holatga to'g'ri keladi, unda qandaydir tsikliklik mavjud; bu erda hatto odam rasm qayerga siljiganligini aniq aniqlay olmaydi. Muammo shundaki, bunday noaniq vaziyatlarda shovqin tufayli biz nol determinantni emas, balki juda kichikni olamiz, bu, ehtimol, haqiqat bilan unchalik bog'liq bo'lmagan juda katta siljish qiymatlariga olib keladi. Shunday qilib, ma'lum bir bosqichda siz tizimning determinanti etarlicha kichik yoki yo'qligini tekshirishingiz kerak va agar shunday bo'lsa, bunday nuqtalarni hisobga olmang yoki ularni noto'g'ri deb belgilang.

Nega u ishlamayapti?
Agar biz ushbu bosqichda to'xtab, ushbu algoritmni amalga oshirsak, u muvaffaqiyatli ishlaydi. Ammo qo'shni tasvirlar orasidagi siljish juda kichik bo'lsa, 1 piksel tartibida va har doim ham emas. (Sifatni tahlil qilish uchun har xil nisbiy siljishlar bilan sintetik ketma-ketliklar yaratildi va bu siljish butun son bo'lmagan piksellar soni bilan ifodalanishi mumkin, keyin olingan tasvir mos ravishda interpolyatsiya qilinadi) 2 pikselli siljishda allaqachon xato katta bo'ladi. , va agar 3 yoki undan ko'p bo'lsa, natija umuman noto'g'ri bo'ladi. Nima bo'ldi?

Bu erda matematika bizni o'rnatdi. U bizga atrofimizdagi barcha funktsiyalar uzluksiz va ko'p marta farqlanadigan tuyg'uni uyg'otdi. Va umuman olganda, institutda bizga Teylor formulasidan foydalanib, nuqta qo'shnisida funksiyaning yaqinlashishini yozishni o'rgatishgan va biz uni hamma joyda o'ylamasdan va quvonch bilan ishlatamiz. Keling, bu joydagi hosilalarning jismoniy ma'nosi haqida o'ylab ko'raylik? Biz ulardan nuqtaning cheklangan qo'shnisidagi funktsiya qiymatining o'zgarishini aniqlash uchun foydalanmoqchimiz va hosila cheksiz kichik qo'shnilik haqida fikr beradi. Ushbu qo'shnilikni kengaytirish uchun Teylor kengayishiga hosilalarning yuqori tartibini qo'shish mumkin edi, ammo bu tizimda nochiziqlilikka olib keladi, bu uni hal qilishni ancha qiyinlashtiradi va afzalliklar shubhali bo'ladi, ayniqsa amalda biz uzluksiz ko'p differentsiallanuvchi funktsiyalar bilan emas, balki qanday diskret funktsiyalar bilan shug'ullanamiz. Shuning uchun g(x) funksiyani izlash mantiqan to‘g‘riroq bo‘lar edi, bu funksiya uchun bizning diskret holatda f(x) + g(x) = f(x+1), f(x) + 2g(x) = f(x) imkon qadar aniq qondiriladi +2), f(x) - g(x) = f(x-1) va hokazo. Shunday qilib, bu holda bizga hosila kerak emas, balki qandaydir chiziqli funksiya kerak asl funktsiyaning nuqtalariga eng yaqin. Oddiy matematik hisob-kitoblar yechimga olib keladi , Qayerda . Agar biz hosilani har tomondan bitta qo'shni nuqtadan foydalangan holda tuzgan bo'lsak, unda omadimiz keldi: bu holda formula hosilalarni taxminiy hisoblash formulasiga to'g'ri keladi: g(x) = (f(x+1) – f(x-) 1)) / 2. Odatda, OpenCVda Lukas-Kanade optik oqimini hisoblashda aynan shu formuladan foydalaniladi, biz bunga keyinroq qaytamiz. Ammo agar siz ko'proq ball olsangiz, unda formula birinchi hosila uchun klassik farq sxemalaridan butunlay farq qiladi.

Shubhasiz, agar biz ushbu funktsiyani, masalan, asl funktsiyaning chap va o'ng tomonidagi uchta qo'shni nuqtadan foydalangan holda qursak, u hech qanday tarzda uzoqroqda joylashgan nuqtalarga bog'liq emas va shunga ko'ra, agar biz uchtadan ko'proq siljitsak. ball bo'lsa, biz hali ham ko'pincha noto'g'ri natijalarga erishamiz. Va shuningdek, biz ushbu funktsiyani quradigan nuqtalar soni qanchalik ko'p bo'lsa, natijada olingan chiziqning ishlatilgan nuqtalardan o'rtacha og'ishi shunchalik katta bo'ladi - yana bizda chiziqli o'zgaruvchan tasvirlar yo'qligi sababli, lekin kim biladi. Amalda, biz qancha ball olsak ham, 2 pikseldan ortiq siljishlar allaqachon etarli darajada katta xatolikka olib keladi.

Algoritmning yana bir zaif tomoni shundaki, biz yana silliq uzluksiz funktsiyalar bilan emas, balki ixtiyoriy va hatto diskret funktsiyalar bilan shug'ullanamiz. Shuning uchun, ba'zi tasvir qismlarida intensivlik hech qanday aniq naqshlarsiz, masalan, ob'ektlar chegaralarida yoki shovqin tufayli "sakrashi" mumkin. Bunda hech bir g(x) funksiya nuqta yaqinidagi tasvirdagi o‘zgarishlarni yetarli darajada aniq tasvirlay olmaydi. Bunga qarshi kurashish uchun (hech bo'lmaganda qisman) asl tasvirni bo'yash tavsiya etiladi va uni juda qattiq surtish foydali bo'ladi, ya'ni hamma ham yoqtirmaydigan gauss xiralashuvidan (og'irlik koeffitsientlari bilan o'rtacha) foydalanish yaxshidir. lekin faqat bir quti filtri (oyna ustida bir xil o'rtacha ) va ketma-ket bir necha marta. Tasvirning silliqligi endi biz uchun tafsilotlardan ko'ra muhimroqdir.

Biroq, bu choralar bizni aniqlangan siljishni 2-3 pikselgacha cheklashdan ham qutqarmaydi. Aytgancha, OpenCV 1.0 da optik oqimning bunday amalga oshirilishi mavjud edi va u faqat ideal sharoitlarda va juda kichik smenalarda ishladi.

Nima qilsa bo'ladi?
Xulosa qilib aytganda, odatiy Lukas-Kanade kichik siljishlarni aniqlashda yaxshi, shuning uchun rasm uning chiziqli yaqinlashuviga o'xshaydi. Bunga qarshi kurashish uchun biz standart CV texnikasidan foydalanamiz - ko'p masshtabli: biz turli masshtabdagi tasvirlardan "piramida" quramiz (deyarli har doim har bir o'q bo'ylab 2 marta o'lchaydi, hisoblash osonroq) va ular orqali o'tamiz. kichikroq tasvirdan kattaroqqa optik oqim bilan , keyin kichik tasvirda aniqlangan kichik siljish katta tasvirdagi katta siljishga mos keladi.Eng kichik tasvirda biz 1-2 pikseldan ko'p bo'lmagan siljishni aniqlaymiz, va kichikroq masshtabdan kattaroq masshtabga o‘tishda biz oldingi bosqichdagi natijadan foydalanamiz va siljish qiymatlarini aniqlaymiz.Aslida OpenCV da u calcOptFlowPyrLK funksiyasi tomonidan amalga oshiriladi.Ushbu piramidal algoritmdan foydalanish chiziqlilikni hisoblash bilan bezovta qilmaslik imkonini beradi. ko'p nuqtalar bo'yicha yaqinlashish: piramidaning ko'proq darajalarini olish osonroq va har bir darajada ushbu funktsiyaning nisbatan qo'pol yaqinlashuvini oling.Shuning uchun, OpenCV faqat ikkita qo'shni nuqtadan foydalangan holda hisoblaydi.Va shuning uchun algoritmning ushbu amalga oshirilishi bilan bog'liq holda, yaqinlashtiruvchi funktsiyaning hosiladan ustunligi haqidagi xulosalarimiz foydasiz bo'lib chiqdi: bunday ko'p sonli mos yozuvlar uchun hosila eng yaxshi yaqinlashuvchi funktsiyadir.

Yana qandaylari bor?

Bu algoritm optik oqimni hisoblashning yagona varianti emas. OpenCV-da, Lukas-Kanade oqimidan tashqari, Farneback va SimpleFlow oqimi ham mavjud va Horn-Schunck algoritmiga ham tez-tez murojaat qilinadi.

Usul Horn-Shunk Lukas-Kanade usuliga qaraganda bir oz globalroq xarakterga ega. Bu optik oqim butun tasvir bo'ylab juda silliq bo'ladi degan taxminga tayanadi. Xuddi shu tenglamadan funktsionalga o'tish, ya'ni a og'irlik koeffitsienti bilan siljishlarda keskin o'zgarishlarning yo'qligi talabini qo'shish taklif etiladi. Ushbu funktsiyani minimallashtirish bizni ikkita tenglama tizimiga olib keladi:

Ushbu tenglamalarda Laplasiyani taxminan hisoblash taklif etiladi: – o'rtacha qiymat bilan farq. Biz har bir piksel uchun yozadigan va yechadigan tenglamalar tizimini olamiz umumiy tizim takroriy:

Ushbu algoritmda ular ko'p masshtabdan foydalanishni ham taklif qilishadi va ular tasvirlarni 2 marta emas, balki 0,65 koeffitsientiga ko'paytirishni tavsiya qiladilar.

Ushbu algoritm OpenCV ning birinchi versiyalarida amalga oshirilgan, ammo keyinchalik undan voz kechilgan.

Farneback kvadratik shakl yordamida qo'shnilikdagi intensivlikning o'zgarishini taxminan hisoblashni taklif qildi: simmetrik A matritsasi bilan I = xAx + bx + c (aslida, Teylorning birinchi hadga kengayishi hisobga olinsa, biz I = bx + c chiziqli yaqinlashuvni oldik. , ya'ni, endi biz yaqinlashuvning aniqligini oshirishga qaror qildik) Agar tasvir ushbu qo'shnilik ichida harakatlangan bo'lsa, biz kvadrat kengayishda almashtiramiz, qavslarni ochamiz, biz olamiz


.

Endi biz ikkala rasmda A, b, c qiymatlarini hisoblashimiz mumkin, keyin bu tizim d ga nisbatan ortiqcha bo'ladi (birinchi tenglama ayniqsa chalkash) va umuman d ni ikkinchi tenglamadan olish mumkin: . Biz quyidagi taxminlarga murojaat qilishimiz kerak: . Keling, oddiylik uchun ham belgilaymiz , Keyin biz oddiygina olamiz.

Hisob-kitoblar paytida shovqinni qoplash uchun biz yana o'rganilayotgan nuqtaga yaqin joyda barcha nuqtalar ko'proq yoki kamroq bir xil siljishlarga ega degan taxminga murojaat qilamiz. Shuning uchun, biz yana Gauss og'irlik koeffitsientlari bilan oyna ustidagi xatoni birlashtiramiz w, va bu umumiy xatoni minimallashtiradigan d vektorini toping. Keyin biz optimal qiymatni va unga mos keladigan minimal xatoni olamiz. Ya'ni, biz har bir nuqta uchun hisoblashimiz kerak, deraza bo'ylab o'rtacha, matritsani o'zgartirib, natijani olishimiz kerak. Shunga ko'ra, ushbu mahsulotlarni butun rasm uchun hisoblash mumkin va turli nuqtalar uchun oldindan hisoblangan qiymatlardan foydalanish mumkin, ya'ni zich oqimni hisoblash mantiqiy bo'lsa, aynan shunday.

Odatdagidek, ushbu algoritm bir qator o'zgartirish va takomillashtirishga ega bo'lib, birinchi navbatda ma'lum apriori ma'lumotlardan foydalanishga imkon beradi - oqimning berilgan dastlabki yaqinlashuvi - va yana ko'p masshtabli.

Usulning asosi SimpleFlow quyidagi g'oya yotadi: agar biz hosilalarni qidirgan oynaning o'lchamidan kattaroq siljishni qanday aniqlashni hali ham bilmasak, unda nega hosilalarni hisoblash bilan shug'ullanish kerak? Keling, derazadan eng o'xshash nuqtani topamiz! Va noaniqliklarni bartaraf etish va shovqinni qoplash uchun biz oqim uzluksiz ekanligini va ma'lum bir nuqtaga yaqin joyda barcha nuqtalar deyarli bir xil siljishini hisobga olamiz. Va biz yana oyna o'lchami bilan bog'liq muammoni ko'p masshtablash orqali hal qilamiz.

Aniqroq aytganda, algoritm shunday eshitiladi: oynadagi barcha nuqtalar uchun boshlang'ich nuqtaning ushbu nuqtaga o'tish ehtimoli uchun javob beradigan (teskari logarifmik bog'liqlik bilan) "energiya" funktsiyasi mavjud: . Keyinchalik, bu energiyaning Gauss oynasi bilan konvolyutsiyasi ko'rib chiqiladi va bu funktsiyani minimallashtiradigan qiymatlar (dx, dy) topiladi. Subpiksel aniqligini olish uchun topilgan optimal nuqtaning kichik qo'shnisi (dx,dy) ko'rib chiqiladi va paraboloidning cho'qqisi sifatida undagi energiya funktsiyasining cho'qqisi qidiriladi. Va yuqorida aytib o'tilganidek, bu protsedura o'lchovli tasvirlar piramidasida amalga oshiriladi. Ularning algoritmi hisob-kitoblarni tezlashtirishning aqlli usullarini ham taklif qiladi, ammo qiziquvchilar buni o'zlari aniqlaydilar. Biz uchun muhimi shundaki, shuning uchun bu algoritm (nazariy jihatdan) yaxshi aniqlik bilan juda tezdir. Va u avvalgidek muammoga ega emas, siljish qanchalik katta bo'lsa, shunchalik yomonroq aniqlanadi.

Agar biz intensivlikni qabul qilmasak-chi?

Yuqorida nuqtalar orasidagi moslikni turli miqdorlar bilan aniqlash mumkinligi aytilgan edi, nega biz faqat intensivlikni hisobga olamiz? Ammo har qanday boshqa qiymatni unga kamaytirish mumkinligi sababli: biz shunchaki tegishli filtr bilan tasvirlarni filtrlaymiz va filtrlangan tasvirlarni yuqorida tavsiflangan algoritmlarning kiritilishiga beramiz. Shunga ko'ra, agar siz optik oqimdan foydalanmoqchi bo'lsangiz, avval sizning sharoitingiz bo'yicha qaysi tasvir xarakteristikasi eng barqaror bo'lishini o'ylab ko'ring va algoritmga kirish intensivlik emas, balki ushbu xarakteristikani kiritish uchun tegishli filtrlashni amalga oshiring.

Amaliyot

Keling, OpenCV bizga taqdim etgan algoritmlarni amalda sinab ko'raylik.

Bu yerda siz har bir algoritmni, turli xil parametrlarni, kiritish ketma-ketligini o'zgartirishni - turli siljishlar, aylanishlar, proyektiv o'zgarishlar, segmentlar, turli shovqinlar va boshqalar bilan turli xil tadqiqotlarni amalga oshirishingiz mumkin. Bularning barchasi ko'p vaqt va hisobot hajmini oladi. Ushbu maqoladan oshib ketadi, Shuning uchun men bu erda men o'zimizni parallel tasvirni qat'iy masofaga siljitish va kichik shovqinni kiritishning oddiy holati bilan cheklashni taklif qilaman. Bu sizga algoritmlarni qanday bajarish kerakligini va ularning qaysi biri sovuqroq ekanligini umumiy ma'noda tushunishga imkon beradi.

Jarayonlarning sintaksisi qo'llanma bilan sahifada batafsil tavsiflangan, bu erda men sharhlarim bilan qisqacha tarjimani taqdim etaman.

Klassik Lukas-Kanade calcOpticalFlowPyrLK protsedurasida piramida bilan amalga oshiriladi. Algoritm siyrak oqimni hisoblab chiqadi, ya'ni birinchi rasmdagi berilgan nuqtalar to'plami uchun ikkinchisida ularning o'rnini baholaydi. Kirish parametrlari juda aniq: ikkita kirish tasviri, kirish va chiqish nuqtalari to'plami, holat - tegishli nuqta muvaffaqiyatli topilganligini ko'rsatadigan chiqish vektori, err - tegishli nuqtalarning taxminiy xatolarining chiqish vektori, WinSize - Gauss o'rtacha qiymati sodir bo'ladigan oynaning o'lchami, men 21x21 ni oldim va u yaxshi ishladi, maxLevel - piramidadagi qatlamlar soni minus bitta, ya'ni oxirgi qatlam soni, men 5 ni oldim, mezonlar - chiqish sharti siljishni aniqlashning iterativ jarayoni (xatoni minimallashtirish iterativ ravishda amalga oshiriladi) - men bu parametrni sukut bo'yicha qoldirdim, bayroqlar - qo'shimcha bayroqlar, masalan, siz boshlang'ich oqimni taxmin qilishdan foydalanishingiz yoki xatoni baholash usulini tanlashingiz mumkin, minEigThreshold - gradient chegarasi Quyidagi qiymat matritsa birlik deb hisoblanadi, men uni sukut bo'yicha qoldirdim. OpenCV 2.4.1 dan boshlab, oqimni hisoblashda masshtabli tasvirlarning oldindan hisoblangan piramidasidan foydalanish mumkin.

Ishning natijasi shundaki, kichik va katta siljishlar muvaffaqiyatli va barqaror aniqlanadi, u juda katta shovqinlarga chidamli, 5 qatlamli piramida (i7 950 yadrosida) bilan 400 ball uchun ish vaqti taxminan 10 ms ni tashkil qiladi.

Aytgancha, ushbu algoritm ham zich va siyrak versiyalarda GPU (CUDA) da qo'llaniladi.

Farneback oqimi calcOpticalFlowFarneback protsedurasi bilan amalga oshiriladi, zich oqim, ya'ni har bir nuqtaning siljishi hisoblanadi. Parametrlar: kirish tasvirlari, ikki kanalli float matritsa formatidagi chiqish oqimi, piramida qatlamlari orasidagi masshtab nisbatini aniqlaydi, darajalar - piramidadagi darajalar soni, winsize - o'rtacha hisoblangan oynaning o'lchami. amalga oshiriladi, iteratsiyalar - har bir darajadagi takrorlashlar soni, poly_n - A va b qiymatlari baholanadigan polinomning o'lchami, poly_sigma - hosilalarni tekislashda Gauss xiralashuvining sigmasi, tavsiya etilgan parametr qiymatlari qo'llanmada ko'rsatilgan, bayroqlar - qo'shimcha bayroqlar, masalan, siz oqimning dastlabki yaqinlashuvidan yoki deraza ustidagi o'rtacha qiymatdan foydalanishingiz mumkin.

Ushbu algoritm ancha barqaror emas (kuzatishlarimga ko'ra), u bir xil suratlarda osonroq o'tkazib yuboradi (aftidan, muammo muvaffaqiyatsiz nuqtalarni filtrlashning yo'qligida) va katta siljishlarni yaxshi aniqlamaydi. Bu men uchun 512x512 tasvirda 600 milodiy tezlikda ishladi.

SimpleFlow oqimi calcOpticalFlowSF protsedurasini amalga oshiradi (yana zich oqim hisoblanadi) va u standart qiymatlarsiz juda ko'p sirli parametrlarga ega va umuman olganda bu daqiqa Sahifadagi ma'lumotlar juda qisqacha taqdim etilgan. Keling, buni tushunishga harakat qilaylik. Birinchi 3 tasi kirish tasvirlari va ikki kanalli chiqish; qatlamlar - piramidadagi qatlamlar soni, ya'ni biz asl tasvirni necha marta o'lchaymiz; averaging_block_size - biz piksel energiya funktsiyasini hisoblagan oynaning o'lchami; max_flow - biz har bir qadamda aniqlamoqchi bo'lgan maksimal siljish, aslida u oyna o'lchami bilan belgilanadi (garchi bu int nima uchun to'liq tushunilmagan bo'lsa ham). Siz shu erda to'xtashingiz mumkin yoki yana bir nechta parametrlarni o'rnatishingiz mumkin, ulardan ba'zilarining ma'nosi mendan chetda.

Sayt undan foydalanish misolini taqdim etadi, unda u quyidagi parametrlar bilan ishga tushiriladi: calcOpticalFlowSF(frame1, frame2, flow, 3, 2, 4, 4.1, 25.5, 18, 55.0, 25.5, 0.35, 18, 55.0, 25. , 10);

Mening algoritmim boshqalarga qaraganda ancha sekin ishlaydi, 512x512 tasvir uchun taxminan 9-12 soniya. Ishning natijasi Farnebackga qaraganda ancha ishonchli ko'rinadi, hech bo'lmaganda bir xil tasvirlardagi siljish yaxshiroq aniqlanadi va u katta siljishlar bilan sezilarli darajada yaxshi ishlaydi.

xulosalar

Agar biror joyda optik oqimdan foydalanmoqchi bo'lsangiz, avvalo, sizga kerakmi yoki yo'qligini o'ylab ko'ring: ko'pincha oddiyroq usullar bilan shug'ullanishingiz mumkin. Oqimni o'zingiz amalga oshirishga kirishish faqat bir necha marta o'ylab ko'rishga arziydi: har bir algoritmda juda ko'p fokuslar, nozikliklar va optimallashtirishlar mavjud; Nima qilsangiz ham, u OpenCV da yaxshiroq ishlaydi (albatta, u erda bo'lsa). Bundan tashqari, ular SSE ko'rsatmalaridan foydalanish, multithreading, CUDA yoki OpenCL bilan hisoblash imkoniyatlari va boshqalar kabi mantiqiy va apparat optimallashlaridan to'liq foydalanadilar. Agar siz shunchaki ma'lum bir nuqtalar to'plamining (ya'ni siyrak oqim) siljishini hisoblashingiz kerak bo'lsa, unda siz calcOpticalFlowPyrLK funktsiyasidan xavfsiz foydalanishi mumkin, u yaxshi, ishonchli va juda tez ishlaydi. Zich oqimni hisoblash uchun calcOpticalFlowSF funksiyasidan foydalanish yaxshi, lekin u juda sekin. Agar ishlash juda muhim bo'lsa, u holda calcOpticalFlowFarneback, lekin siz hali ham uning ish natijalari sizga mos kelishiga ishonch hosil qilishingiz kerak. Teglar qo'shing


Kompyuter ko'rish va tasvirni qayta ishlash tizimlarida ko'pincha optik sensor, ya'ni videokamera yordamida uch o'lchovli fazoda ob'ektlarning harakatlarini aniqlash vazifasi paydo bo'ladi. Kirish sifatida ramkalar ketma-ketligiga ega bo'lgan holda, ular ustida olingan uch o'lchamli bo'shliqni va vaqt o'tishi bilan sodir bo'ladigan o'zgarishlarni qayta yaratish kerak. Bu murakkab tuyuladi, lekin amalda ko'pincha ramka tekisligida jismlarning ikki o'lchovli proyeksiyalarining siljishlarini topish etarli.

Agar biz u yoki bu ob'ektni mahkamlash ramkalari o'rtasida o'tgan vaqt davomida oldingi ramkadagi holatiga nisbatan qanchalik o'zgarganligini bilmoqchi bo'lsak, unda birinchi navbatda optik oqim haqida eslaymiz. Optik oqimni topish uchun siz algoritmlardan birini, masalan, OpenCV kutubxonasidan tayyor, sinovdan o'tgan va optimallashtirilgan amalga oshirishdan xavfsiz foydalanishingiz mumkin. Shu bilan birga, nazariyani tushunish juda zararsizdir, shuning uchun men barcha qiziquvchilarni mashhur va yaxshi o'rganilgan usullardan biriga qarashga taklif qilaman. Ushbu maqolada hech qanday kod yo'q va amaliy maslahat, lekin formulalar va ma'lum miqdordagi matematik hosilalar mavjud.

Ikki qo'shni ramka orasidagi ofsetlarni aniqlashning bir necha yondashuvlari mavjud. Masalan, bitta freymning har bir kichik fragmenti (masalan, 8 dan 8 pikselgacha) uchun siz keyingi kadrda eng o'xshash fragmentni topishingiz mumkin. Bunday holda, asl va topilgan bo'laklarning koordinatalari orasidagi farq bizga siljishni beradi. Bu erda asosiy qiyinchilik - bu butun kvadrat piksel bo'ylab o'tmasdan kerakli fragmentni qanday tezda topishdir. Ushbu yondashuvning turli xil qo'llanilishi hisoblash murakkabligi muammosini u yoki bu tarzda hal qiladi. Ba'zilari shunchalik muvaffaqiyatliki, ular, masalan, videoni siqishning umumiy standartlarida qo'llaniladi. Tezlik uchun narx, albatta, sifatdir. Biz boshqa yondashuvni ko'rib chiqamiz, bu bizga fragmentlar uchun emas, balki har bir alohida piksel uchun ofsetlarni olish imkonini beradi va tezlik unchalik muhim bo'lmagan hollarda qo'llaniladi. Aynan shu bilan adabiyotda "optik oqim" atamasi ko'pincha bog'lanadi.

Ushbu yondashuv ko'pincha differentsial deb ataladi, chunki u tasvirning gorizontal va vertikal yo'nalishlari bo'ylab qisman hosilalarni hisoblashga asoslangan. Keyinchalik ko'rib chiqamizki, ko'chishlarni aniqlash uchun lotinlarning o'zi etarli emas. Shuning uchun bitta oddiy g'oya asosida juda xilma-xil usullar paydo bo'ldi, ularning har biri maqsadga erishish uchun daf bilan qandaydir matematik raqsdan foydalanadi. Keling, 1981 yilda Bryus Lukas va Takeo Kanade tomonidan taklif qilingan Lukas-Kanade usuliga to'xtalib o'tamiz.

Lukas-Kanade usuli
Barcha keyingi mulohazalar juda muhim va unchalik adolatli bo'lmagan bitta taxminga asoslanadi: Piksel qiymatlari o'zgarmasdan bir freymdan ikkinchisiga o'tadi deb faraz qilaylik. Shunday qilib, biz bir xil ob'ektga tegishli piksellar istalgan yo'nalishda siljishi mumkin, ammo ularning qiymati o'zgarishsiz qoladi, deb taxmin qilamiz. Albatta, bu taxminning haqiqatga deyarli aloqasi yo'q, chunki global yoritish sharoitlari va harakatlanuvchi ob'ektning o'zi yoritilishi ramkadan ramkaga o'zgarishi mumkin. Bu taxmin bilan bog'liq muammolar juda ko'p, ammo, g'alati, hamma narsaga qaramay, u amalda juda yaxshi ishlaydi.

Matematik tilda bu farazni quyidagicha yozish mumkin: . Bu erda I - kadr va vaqtdagi joylashuvdan piksel yorqinligi funksiyasi. Boshqacha qilib aytganda, x va y - ramka tekisligidagi piksel koordinatalari va ofset, t - ketma-ketlikdagi ramka raqami. Ikki qo'shni ramka o'rtasida vaqt birligi davri o'tishiga rozi bo'laylik.

Bir o'lchovli holat
Birinchidan, bir o'lchovli ishni ko'rib chiqaylik. Keling, balandligi 1 piksel va kengligi 20 piksel bo'lgan ikkita bir o'lchovli ramkani tasavvur qilaylik (o'ngdagi rasm). Ikkinchi ramkada tasvir biroz o'ngga siljiydi. Biz topmoqchi bo'lgan bu siljish. Buni amalga oshirish uchun keling, xuddi shu kadrlarni funksiyalar sifatida tasavvur qilaylik (chapdagi rasm). Kirish - pikselning joylashuvi, chiqish - uning intensivligi. Ushbu tasvirda kerakli siljish (d) yanada aniqroq ko'rinadi. Bizning taxminimizga ko'ra, bu shunchaki o'zgartirilgan, ya'ni aytishimiz mumkin.

E'tibor bering, agar xohlasangiz, siz ham yozishingiz mumkin umumiy ko'rinish: ; bu erda y va t qat'iy va nolga teng.

Har bir koordinata uchun biz ushbu nuqtadagi qiymatlarni bilamiz, qo'shimcha ravishda ularning hosilalarini hisoblashimiz mumkin. Keling, bog'laymiz ma'lum qiymatlar ofset bilan d. Buning uchun biz Teylor seriyasining kengayishini yozamiz:

Keling, ikkinchi muhim taxminni keltiraylik: Faraz qilaylik, u birinchi hosila tomonidan etarlicha yaqinlashtirilgan. Ushbu taxminni amalga oshirgandan so'ng, biz birinchi hosiladan keyin hamma narsani bekor qilamiz:

Bu qanchalik to'g'ri? Umuman olganda, unchalik ko'p emas, bu erda biz aniqlikni yo'qotamiz, agar bizning funktsiyamiz/tasvirimiz sun'iy misolimizda bo'lgani kabi qat'iy chiziqli bo'lmasa. Ammo bu usulni sezilarli darajada soddalashtiradi va kerakli aniqlikka erishish uchun siz keyinroq ko'rib chiqamiz.

Biz deyarli keldik. Deplasman d - biz xohlagan qiymat, shuning uchun biz bilan biror narsa qilishimiz kerak. Avval kelishib olganimizdek, biz shunchaki qayta yozamiz:

Ikki o'lchovli kassa
Endi bir o‘lchovli holatdan ikki o‘lchovli holatga o‘tamiz. Keling, kengayishni Teylor seriyasida yozamiz va barcha yuqori hosilalarni darhol o'chirib tashlaymiz. Birinchi hosila o'rniga gradient paydo bo'ladi:

Siqilish vektori qayerda.
Qabul qilingan taxminga muvofiq. E'tibor bering, bu ifoda ga ekvivalentdir. Bu bizga kerak bo'lgan narsa. Keling, qayta yozamiz:

Ikki freym orasida birlik vaqt oralig'i o'tganligi sababli, vaqtga nisbatan hosiladan boshqa narsa yo'qligini aytishimiz mumkin.
Keling, qayta yozamiz:

Keling, gradientni kengaytirib, uni qayta yozamiz:

Bizda qisman hosilalarning yig'indisi nolga teng bo'lishi kerakligini aytadigan tenglama mavjud. Yagona muammo shundaki, bizda bitta tenglama bor, lekin unda ikkita noma'lum mavjud: va . Shu nuqtada hayoliy parvozlar va turli yondashuvlar boshlanadi.

Uchinchi faraz qilaylik: Qo'shni piksellar bir xil masofaga siljigan deb faraz qiling. Keling, tasvirning bir bo'lagini olaylik, deylik, 5 dan 5 pikselgacha va 25 pikselning har biri uchun va teng ekanligiga rozi bo'ling. Keyin bitta tenglama o'rniga biz bir vaqtning o'zida 25 ta tenglama olamiz! Ko'rinib turibdiki, umumiy holatda tizimda hech qanday yechim yo'q, shuning uchun biz xatoni minimallashtiradigan va shunga o'xshash narsalarni qidiramiz:

Bu erda g - piksellar uchun tortish koeffitsientlarini aniqlaydigan funktsiya. Eng keng tarqalgan variant - ikki o'lchovli Gauss bo'lib, u markaziy pikselga eng katta og'irlikni beradi va markazdan uzoqlashganda kamroq va kamroq bo'ladi.

Minimalni topish uchun biz eng kichik kvadratlar usulidan foydalanamiz va uning va ga nisbatan qisman hosilalarini topamiz:

Keling, uni ixchamroq shaklda qayta yozamiz va uni nolga tenglashtiramiz:

Keling, ushbu ikki tenglamani matritsa shaklida qayta yozamiz:

Agar M matritsa teskari bo'lsa (2-darajali bo'lsa), E xatosini minimallashtiradigan va ni hisoblashimiz mumkin:

Ana xolos. Biz ikkita qo'shni kadrlar orasidagi taxminiy piksel almashinuvini bilamiz.

Unga qo'shni piksellar ham har bir pikselning ofsetini topishda ishtirok etganligi sababli, ushbu usulni amalga oshirishda birinchi navbatda ramkaning gorizontal va vertikal hosilalarini hisoblash tavsiya etiladi.

Usulning kamchiliklari
Yuqorida tavsiflangan usul uchta muhim farazga asoslangan bo'lib, ular bir tomondan bizga optik oqimni aniqlash uchun fundamental imkoniyat beradi, lekin boshqa tomondan, xatolikni keltirib chiqaradi. Perfektsionistlar uchun yaxshi yangilik shundaki, usulni soddalashtirish uchun bizga faqat bitta taxmin kerak va biz uning oqibatlari bilan kurashishimiz mumkin. Biz joy almashishni taxmin qilish uchun biz uchun birinchi hosila etarli bo'ladi deb taxmin qildik. Umumiy holatda, bu, albatta, bunday emas (chapdagi rasm). Kerakli aniqlikka erishish uchun har bir juft ramka uchun ofsetni (ularni va deb ataymiz) iterativ tarzda hisoblash mumkin. Adabiyotda bu burilish deb ataladi. Amalda, bu shuni anglatadiki, birinchi iteratsiyadagi siljishlarni hisoblab, biz ushbu siljishni qoplash uchun ramkaning har bir pikselini teskari yo'nalishda harakatlantiramiz. Keyingi iteratsiyada asl ramka o'rniga biz uning buzilgan versiyasidan foydalanamiz. Va shunga o'xshash, keyingi iteratsiyada barcha hosil bo'lgan siljishlar belgilangan chegara qiymatidan kam bo'lgunga qadar. Biz har bir aniq piksel uchun yakuniy siljishni uning barcha iteratsiyalardagi siljishlarining yig'indisi sifatida olamiz.

Tabiatan bu usul mahalliy hisoblanadi, ya'ni ma'lum bir pikselning ofsetini aniqlashda faqat shu piksel atrofidagi maydon hisobga olinadi - mahalliy qo'shnichilik. Natijada, ramkaning etarlicha katta (mahalliy mahallaning o'lchamidan kattaroq) bir xil rangdagi maydonlar ichida siljishlarni aniqlash mumkin emas. Yaxshiyamki, bunday joylar ko'pincha haqiqiy kadrlarda topilmaydi, ammo bu xususiyat hali ham haqiqiy ofsetdan qo'shimcha og'ishlarni keltirib chiqaradi.

Yana bir muammo shundaki, tasvirdagi ba'zi teksturalar teskari matritsani topib bo'lmaydigan yagona M matritsasini hosil qiladi. Shunga ko'ra, bunday to'qimalar uchun biz ofsetni aniqlay olmaymiz. Ya'ni, harakat borga o'xshaydi, lekin qaysi yo'nalishda ekanligi aniq emas. Umuman olganda, nafaqat ko'rib chiqilgan usul bu muammodan aziyat chekadi. Hatto inson ko'zi ham bunday harakatni aniq sezmaydi (Sartarosh ustuni).

Xulosa
Biz uni tartibga keltirdik nazariy asos optik oqimni topishning differentsial usullaridan biri. Boshqa ko'plab qiziqarli usullar mavjud, ulardan ba'zilari bugungi kunda yanada ishonchli natijalar beradi. Biroq, Lukas-Kanade usuli, juda samarali bo'lsa-da, tushunish uchun juda oddiy bo'lib qolmoqda va shuning uchun matematik asoslarni kiritish uchun juda mos keladi.

Optik oqimni topish muammosi bir necha o'n yillar davomida o'rganilgan bo'lsa-da, usullar hali ham takomillashtirilmoqda. Ish chuqurroq o'rganilganda muammo juda qiyin bo'lib chiqishi va boshqa ko'plab algoritmlarning barqarorligi va samaradorligi video va tasvirni qayta ishlashda noaniqliklarni aniqlash sifatiga bog'liqligini hisobga olgan holda davom etmoqda.

Ushbu da'vogar eslatmani yakunlab, manbalarga o'tishga ijozat bering foydali havolalar.
Lukas-Kanade usuli

  • Lukas Kanada
  • Teglar qo'shing