Pentru a vedea invizibilul

Ce este îmbunătățirea mișcării? Amplificarea mișcării este atunci când anticipăm în ce fel se amestecă semnalul și îl mișcă mai departe în această direcție.

Pentru a vedea invizibilul

Să presupunem că avem un receptor unidimensional. Pe acest receptor observăm semnalul I (x, t) = f (x). În imaginea de la ea este trasată în negru (pentru un moment t). În următorul moment de timp, semnalul I (x, t + 1) = f (x + Δ) (albastru). Pentru a amplifica acest semnal, înseamnă să primim un semnal I '(x, t + 1) = f (x + (1 + α) Δ). Aici α este câștigul. După ce l-am extins într-o serie Taylor, el poate fi exprimat ca:







Să presupunem că:

Ce este B? Aproximativ, aceasta este I (x, t + 1) - I (x, t). Să atragem:

Pentru a vedea invizibilul

Desigur, acest lucru este inexact, dar se va schimba ca aproximație (graficul albastru arată forma unui astfel de semnal "aproximativ"). Dacă înmulțim B cu (1 + α), aceasta va fi "amplificarea" semnalului. Obțineți (grafic roșu):

Pentru a vedea invizibilul

În cadre reale, pot exista mai multe mișcări, fiecare dintre acestea urmând viteze diferite. Metoda de mai sus este o prognoză liniară, fără îmbunătățire se va rupe. Dar, există o abordare clasică pentru a rezolva această problemă, care a fost folosită în lucrare - pentru a descompune mișcarea prin caracteristici de frecvență (atât spațială cât și temporală).

Pentru a vedea invizibilul

În prima etapă, imaginea se descompune în frecvențe spațiale. Această etapă, în plus, realizează derivarea diferenței ∂f (x) / ∂x. Prima lucrare nu arată cum le implementează. În a doua lucrare, folosind abordarea de fază, amplitudinea și faza au fost considerate a fi filtre Gabbor de ordine diferite:

Pentru a vedea invizibilul

Aproximativ așa că am făcut-o, luând filtrul:

Iar raționalizarea valorii sale

Aici l - distanțele pixelului din centrul filtrului. Bineinteles, am facut un pic mai mic, luand un astfel de filtru doar pentru o valoare a ferestrei σ. Acest lucru a făcut posibilă o accelerare considerabilă a calculelor. În același timp, se obține o imagine ușor mai neclară, dar am decis să nu depun eforturi pentru acuratețe ridicată.
Să ne întoarcem la formule. Să vrem să amplificăm semnalul dând un răspuns caracteristic la ω în secvența noastră de timp a cadrelor. Am selectat deja un filtru spațial caracteristic cu o fereastră σ. Acest lucru ne oferă o diferență aproximativă la fiecare punct. După cum puteți vedea din formule - există doar o funcție temporară care dă un răspuns mișcării noastre și câștigului. Multiplicați cu sine frecvența pe care dorim să o amplificăm (aceasta va fi o funcție care oferă un răspuns de timp). Avem:







Desigur, mult mai ușor decât în ​​articolul original, dar probleme de viteză ușor mai puțin.

Cod și rezultat.

Sursele pentru primul articol sunt postate deschis pe Matlab. Se pare, de ce reinventați roata și scrieți-vă? Dar au existat o serie de motive, în mare măsură legate de Matlab:

  1. Utilizați un cadru cu o dimensiune redusă. În mod semnificativ accelerează munca. Pe formular nu a început să controleze dimensiunea cadrului, dar dacă deschideți codul, atunci linia: "_capture.QueryFrame () Convert() .PyrDown () .PyrDown (); "Aceasta este
  2. Utilizați un singur filtru spațial. Pentru o situație în care mișcarea de pierderi dorită este cunoscută, sunt cunoscute cele necritice. Controlați parametrul filtrului din formular (lungimea de undă a filtrului Gabor).
  3. Utilizați o singură frecvență care accentuează seria de timp. Desigur, ați putea face o convoluție cu o fereastră pre-calculată, cu un spectru fără aproape nici o pierdere de performanță, dar această metodă funcționează prea bine. Din forma este controlată fie de un cursor, fie de introducerea valorilor limită.

O mică observație. Toate rezultatele sunt obținute pe o cameră web obișnuită la domiciliu. Când utilizați o cameră cu setări bune + trepied + iluminare corectă + respingere 50 Hz, calitatea se va îmbunătăți semnificativ. Scopul meu nu era să obțin o imagine frumoasă sau un algoritm îmbunătățit. Scopul este de a obține rezultate la domiciliu. Ei bine, ca bonus, aș vrea să înregistrez pulsul când joc Starctaft 2 ... Este curios cât de mult e-sport face sportul.
Ca rezultat, logica lucrării este obținută:

Pentru a vedea invizibilul

Totul este simplu de rușine. De exemplu, sumarea incrementului cu cadrul este realizată în general după cum urmează:

(Da, știu că cu OpenCV, acest lucru nu este cel mai bun mod)
Undeva 90% din cod nu este nucleul, am un corp în jurul lui. Dar implementarea kernelului este deja un rezultat bun. Se poate vedea cum pieptul este umflat cu cateva zeci de centimetri atunci cand respira, se vede cum se umfla vena, cum se plimba capul.


Aici explică în detaliu de ce capul se agită cu un puls. De fapt, este o întoarcere de la o injectare de sânge de inimă:

Un pic despre frumusete

Caracteristici cantitative

Un maxim evident este observat la frecvențe de 0,6-1,3, ceea ce nu este specific pentru zgomot. Din moment ce respirația nu este un proces sinusoidal, ci un proces care are două izbucniri aparente (atunci când inspiră-expiră), frecvența imaginii diferenței trebuie să fie egală cu rata dublă de respirație. Rata de respirație a fost undeva în jur de 10 respirații în 30 de secunde (0.3 HZ). Dublarea acestuia este de 0,6 Hz. Care este aproximativ egal cu maximul spectrogramului. Dar, desigur, nu este necesar să vorbim despre sensul exact. În plus față de respirație, o mulțime de motilitate fină a corpului este întins, ceea ce marchează considerabil imaginea.
Există un vârf interesant la 2.625HZ. Se pare că se rupe prin grila electrică de pe matrice. Pe benzile de accesare cu crawlere ale matricei care dau cu succes un maxim la această frecvență.
Apropo, rata dublei impulsuri ar trebui să se situeze aproximativ în același interval și, prin urmare, această metodă nu ar trebui să funcționeze pe ea. Și într-adevăr:

În acest spectru, nu puteți găsi impulsul.
Într-una din lucrările MIT, se oferă o altă metodă de măsurare a frecvenței cardiace: se calculează fluxul optic pe față și se determină prin frecvența acestui flux. Așa că am făcut (și pe grafic, spectrele):

Este mai bine să vedeți în graficul pe care am amânat numărul maximelor spectrului:

De ce este maximul pe pulsul * 3 Nu stiu cum sa explic, dar acest maxim este precis si legat de puls :)
Ar fi de dorit doar să observăm că pentru primirea unui impuls în așa fel este necesar să stați direct și să nu vă mișcați. Când jucați Starcraft, este imposibil, frecvența nu este eliminată. Ah ... Și această idee! Va trebui să obțineți un monitor de ritm cardiac, pentru că este interesant acum!

Deci, rezultatul

Nimic nou sub lună

Și în final: programator, fii atent!

Algoritmul, judecat după mărcile de pe site, este brevetat. Utilizarea este permisă în scopuri educaționale. Desigur, în Rusia nu există o brevetare a algoritmilor. Dar ai grijă dacă faci ceva la baza ei. În afara Rusiei poate deveni ilegal.

Z.YU. Și spune-mi monitorul ritmului cardiac, care ar fi capabil să arunce datele de pe computer și, de preferat, ce fel de interfață de fir pentru Android a avut?







Articole similare

Trimiteți-le prietenilor: