Turinys:

„Raspberry Pi“objektų skaičiavimas: 5 žingsniai
„Raspberry Pi“objektų skaičiavimas: 5 žingsniai

Video: „Raspberry Pi“objektų skaičiavimas: 5 žingsniai

Video: „Raspberry Pi“objektų skaičiavimas: 5 žingsniai
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Liepa
Anonim
Raspberry Pi objektų skaičiavimas
Raspberry Pi objektų skaičiavimas

Kompiuterinė vizija, be jokios abejonės, yra fantastiškas dalykas! Naudodamas tai kompiuteris įgyja galimybę „matyti“ir geriau jausti aplinkinę aplinką, o tai leidžia kurti sudėtingas, naudingas ir šaunias programas. Tokios programos, kaip veido aptikimas ir atpažinimas, objektų sekimas ir objektų aptikimas, mūsų kasdienėje veikloje vis dažniau atsiranda dėl kompiuterinio matymo pažangos.

Atsižvelgiant į tai, kaip pažangios ir prieinamos yra kompiuterinės vizijos sistemos ir įrankiai, šiame straipsnyje aprašyta programa puikiai tinka: naudojant paprastą „Raspberry PI“ir nemokamą atvirojo kodo kompiuterinę vizijos sistemą „OpenCV“judantiems objektams skaičiuoti, tiksliau objektai įeina ir išeina iš tam tikros stebimos zonos.

1 žingsnis: gilinkitės: kaip vaizdo sraute galima aptikti objektų judėjimą?

Giliau: kaip vaizdo sraute galima aptikti objektų judėjimą?
Giliau: kaip vaizdo sraute galima aptikti objektų judėjimą?

Dabar atėjo laikas gilintis į vaizdo apdorojimo dalykus:

kaip gauti vaizdo kameros srauto vaizdus ir nustatyti, kad kažkas ten persikėlė

Jis susideda iš penkių žingsnių:

1 žingsnis: paryškinkite judantį objektą

Kaip apibrėžta klasikinėje fizikoje, norint sužinoti, ar kažkas juda, ar nestovi vietoje, būtina nuoroda. Čia, norint nustatyti, ar kažkas persikėlė, tai beveik tas pats: kiekvienas internetinės kameros srauto užfiksuotas kadras bus lyginamas su atskaitos rėmeliu. Jei kažkas yra kitaip, kažkas buvo perkeltas. Tai paprasta, kaip skamba.

Šis atskaitos rėmelis turi būti užfiksuotas tobuliausiomis sąlygomis (pavyzdžiui, niekas nejuda). Vaizdo apdorojimo pasaulyje šį užfiksuoto kadro ir etaloninio kadro palyginimą sudaro technika, vadinama fono atėmimu. Fono subtravimas susideda iš pažodžiui atimtos pikselių spalvų informacijos iš užfiksuoto rėmo ir atskaitos kadro. Taigi, gautas vaizdas iš šios procedūros paryškins / parodys daugiau detalių tik tai, kas skiriasi tarp šių dviejų kadrų (arba, kas judėjo / judėjo), o visa kita vaizde bus juoda (pilkos spalvos nulinės vertės spalva) -mastelio pikselis). Svarbu: apšvietimo sąlygos ir fiksuotos internetinės kameros vaizdo kokybė (dėl fiksavimo jutiklių kokybės) kiekviename kadre gali šiek tiek skirtis. Tai reiškia, kad atėmus foną „lygios dalys“iš atskaitos rėmo ir kiti kadrai nebus visiškai juodi. Nepaisant tokio elgesio, tolesni šio projekto vaizdo apdorojimo veiksmai neturi rimtų pasekmių.

Siekiant sutrumpinti vaizdo apdorojimo laiką, prieš darant foną, užfiksuotas kadras ir atskaitos rėmas paverčiami pilkos spalvos vaizdu. Bet kodėl? Tai yra skaičiavimo efektyvumo problema: vaizdas, kuriame pateikiamos kelios spalvos (spalvotas vaizdas), turi tris pikselio informaciją: raudonos, mėlynos ir žalios spalvos komponentai (senas, bet auksinis RGB standartas). Taigi matematiškai kiekvienas pikselis gali būti apibrėžiamas kaip trijų verčių masyvas, kiekvienas iš jų reiškia spalvų komponentą. Todėl, išplėtus jį į visą vaizdą, galutinis vaizdas iš tikrųjų bus trijų vaizdo komponentų mišinys: raudonos, mėlynos ir žalios vaizdo komponentai.

Norint jį apdoroti, reikia daug dirbti! Tačiau pilkos skalės vaizduose kiekvienas pikselis turi tik vieną spalvų informaciją. Taigi spalvotas vaizdas apdorojamas tris kartus lėčiau nei pilkos skalės atveju (mažiausiai tris kartus, priklausomai nuo to, kokia technika naudojama). Ir dar daugiau: tam tikrais tikslais (kaip šis projektas) visų spalvų apdorojimas nėra būtinas ar visai svarbus. Todėl priėjome prie išvados: vaizdų apdorojimui labai rekomenduojama naudoti pilkos spalvos vaizdus. Atlikus subtitrus fone, būtina taikyti Gauso suliejimo filtrą.

Gauso suliejimo filtras, taikomas fone atimtam vaizdui, išlygina visus judančio aptikto objekto kontūrus. Žinoma, tai bus naudinga atliekant kitus vaizdo apdorojimo veiksmus.

2 žingsnis: Binarizavimas

Binarizavimas
Binarizavimas

Daugeliu atvejų apdorojant vaizdus, binarizavimas yra beveik privalomas žingsnis po to, kai paveikslėlyje paryškinami objektai / charakteristikos. Priežastis: dvejetainiame vaizde kiekviena pikselio spalva gali turėti tik dvi reikšmes: 0x00 (juoda) arba 0xFF (balta). Tai labai padeda apdoroti vaizdus, kad tolesniuose veiksmuose būtų reikalaujama dar mažiau „skaičiavimo galios“, kad būtų galima pritaikyti vaizdo apdorojimo būdus. Binarizavimą galima atlikti lyginant kiekvieną pilkos skalės vaizdo pikselio spalvą su tam tikra riba. Jei pikselių spalvos vertė yra didesnė už slenkstį, ši pikselių spalva prisiims baltos spalvos vertę (0xFF), o jei pikselių spalvos reikšmė yra mažesnė už slenkstį, ši pikselių spalva bus juodos spalvos (0x00). Deja, pasirinkti slenkstinę vertę nėra taip paprasta. Tai priklauso nuo aplinkos veiksnių, tokių kaip apšvietimo sąlygos. Neteisingas slenksčio vertės pasirinkimas gali sugadinti visus veiksmus. Taigi primygtinai rekomenduoju rankiniu būdu pakoreguoti jūsų atveju nustatytą slenkstį prieš bet kokius kitus veiksmus. Ši ribinė vertė turi užtikrinti, kad judantis objektas būtų rodomas dvejetainiame vaizde. Mano atveju, tinkamai pasirinkus slenkstį, gaunama tai, ką matote 5 paveiksle.

5 paveikslas - dvejetainis vaizdas

3 žingsnis: išplėskite

Iki šiol buvo galima aptikti judančius objektus, juos paryškinti ir pritaikyti binarizavimą, dėl kurio susidarė gana aiškus judančio objekto vaizdas (= gana aiškus objekto vaizdas vaizdo apdorojimo tikslais). Pasirengimas objektų skaičiavimui beveik baigtas. „Beveik“čia reiškia, kad prieš pereinant į priekį reikia šiek tiek pakoreguoti. Šiuo metu yra reali tikimybė, kad objektuose bus „skylių“(juodos pikselių masės į baltą paryškintą objektą). Šios skylės gali būti bet kokios - nuo tam tikrų apšvietimo sąlygų iki tam tikros objekto formos dalies. Kai skylės gali „pagaminti“netikrus objektus realių objektų viduje (priklausomai nuo to, kokio dydžio ir kur jie yra), skylių buvimo vaizde pasekmės gali būti katastrofiškos objektų skaičiavimui. Šias skyles galima pašalinti naudojant vaizdo apdorojimo technologiją „Dilate“. Naudokite tai ir skylės išnyks.

4 žingsnis: kontūrų (ir jų centroidų) paieška

Kontūrų (ir jų vidurių) paieška
Kontūrų (ir jų vidurių) paieška

Šiuo metu mes turime paryškintus objektus, be skylių viduje ir pasiruošę toliau: kontūrų (ir jų centrų) paieškai. „OpenCV“yra išteklių automatiškai aptikti kontūrus, tačiau aptikti kontūrai turi būti išmintingai parinkti (pasirinkti tik tikrąjį objektą ar objektus). Taigi, kontūrų aptikimo kriterijus yra objekto plotas, matuojamas pikseliais². Jei kontūro plotas yra didesnis nei riba (sukonfigūruota programinėje įrangoje), jis turi būti laikomas tikru skaičiuojamu objektu. Šios srities ribos/kriterijų pasirinkimas yra labai svarbus, o blogas pasirinkimas čia reiškia neteisingą skaičiavimą. Turite išbandyti kai kurias srities vertės ribines vertes ir patikrinti, kas geriau tinka jūsų naudojimui. Nesijaudinkite, šios ribos rasti nėra sunku. Pasirinkus visus paveikslėlyje esančius objektus, kitas žingsnis yra nupiešti ant jo įstrižainę (šiame pervyniojime turi būti visas aptiktas objektas). Ir šio stačiakampio centras yra … centrinis objektas! Galbūt jūs galvojate: „Kas čia per didžiulis dalykas?“, Tiesa? Štai jūsų atsakymas: nesvarbu, kokio dydžio ar kokia yra objekto forma, jo judėjimas yra toks pat kaip ir vidurio. Kitaip tariant: šis paprastas taškas, vadinamas centroidu, atspindi visą objekto judėjimą. Dabar skaičiavimas tampa labai paprastas, ar ne? Žiūrėkite žemiau esantį paveikslėlį (6 pav.), Kur objekto centroidas pavaizduotas kaip juodas taškas.

5 žingsnis: Centorid judėjimas ir objektų skaičiavimas

Didysis finalas: palyginkite objekto centrines koordinates su įėjimo ir išėjimo linijų koordinatėmis ir pritaikykite anksčiau aprašytą skaičiavimo algoritmą. Ir bus skaičiuojami judantys objektai!

Galutinis rezultatas Kaip parodyta šio įrašo pradžioje, čia yra vykdomas projektas:

Rekomenduojamas: