Wednesday 8 November 2017

Python Flytting Gjennomsnittet Image


Hei, dette kommer til å være en veldig enkel artikkel, men du vil finne det veldig nyttig. Det handler om bakgrunnsutdragelse fra en video. Anta at du får video av bilder av trafikk, kan være noe slikt. Trafikk i India. og du blir bedt om å finne en omtrentlig bakgrunn. Eller noe sånt. Bakgrunnsutvinning kommer viktig i objektsporing. Hvis du allerede har et bilde av den bare bakgrunnen, er det enkelt. Men i mange tilfeller vil du ikke ha et slikt bilde, og du må derfor opprette en. Det er her Running Average kommer til nytte. (Jeg tenkte på dette da en fyr spurte et spørsmål i SOF. Link) Funksjonen vi bruker her for å finne Running Average er cv2.accumulateWeighted (). For eksempel, hvis vi ser på en video, fortsetter vi å matche hver ramme til denne funksjonen, og funksjonen fortsetter å finne gjennomsnittene for alle rammer som er matet til det som i forholdet nedenfor: src er ingenting annet enn vår kildebilde. Det kan være gråtoner eller fargebilde og enten 8-biters eller 32-biters flytpunkt. dst er utdata - eller akkumulatorbildet med samme kanaler som for kildebildet, og det er enten 32-bit eller 64-bit flytpunkt. Også, vi bør erklære det først til en verdi som vil bli tatt som innledende verdi. alfa er vekten av inngangsbilledet. Ifølge Docs regulerer alfa oppdateringshastigheten (hvor fort akkumulatoren 8220forgets8221 om tidligere bilder). I enkle ord, hvis alfa er en høyere verdi, forsøker det gjennomsnittlige bildet å få enda svært raske og korte endringer i dataene. Hvis det er lavere verdi, blir gjennomsnittet trist, og det vil ikke betrakte raske endringer i inngangsbildene. Jeg vil forklare det litt med hjelp av bilder på slutten av artikkelen. I overkoden har jeg satt to gjennomsnitt, en med høyere alfa-verdi og en annen med lavere alfa-verdi slik at du kan forstå effekten av alfa. Ved første blir begge satt til innledende ramme for fangsten. Og i løkke blir de oppdatert. Du kan se noen resultater i SOF-lenken jeg allerede har gitt. (Jeg gir disse resultatene her, du kan sjekke koden og alfa-verdien der): Jeg brukte mitt webkamera og lagret originalramme og kjørende gjennomsnitt på et bestemt tidspunkt. Dette er en ramme fra en vanlig trafikkvideo tatt av et stasjonært kamera. Som du ser, går en bil på veien, og personen prøver å krysse veien på et bestemt tidspunkt. Men se løpende gjennomsnitt på den tiden. Det er ingen person og bil i dette bildet (Egentlig er det der, se nærmere på det, så ser du det, og personen er klarere enn bilen, siden bilen beveger seg veldig fort og over bildet, har det ikke mye effekt i gjennomsnitt, men personen er der lenge siden han er langsom og beveger seg over veien.) Nå må vi se effekten av alpha på disse bildene. Hmmm, det virker som dette quoteasy å implementquot-funksjonen er faktisk ganske enkelt å få feil og har fremmet en god diskusjon om minneeffektivitet. Jeg er glad for å ha oppblåst hvis det betyr å vite at noe har blitt gjort riktig. ndash Richard Sep 20 14 kl 19:23 NumPys mangel på en bestemt domenespesifikk funksjon er kanskje på grunn av Core Teams disiplin og troskap til NumPys hoveddirektiv: gi en N-dimensjonal array type. samt funksjoner for å opprette og indeksere disse arrays. Som mange grunnleggende mål er denne ikke liten, og NumPy gjør det glimrende. Den (mye) større SciPy inneholder en mye større samling av domenespesifikke biblioteker (kalt delpakker med SciPy devs) - for eksempel numerisk optimalisering (optimalisering), signalprosessering (signal) og integralkalkulator (integrere). Min gjetning er at funksjonen du er ute etter, er i minst en av SciPy-subpackages (scipy. signal kanskje), men jeg vil se først ut i samlingen av SciPy scikits. identifiser relevante scikit (er) og se etter interessens funksjon der. Scikits er selvstendig utviklede pakker basert på NumPySciPy og rettet mot en bestemt teknisk disiplin (f. Eks. Scikits-image. Scikits-learn etc.) Flere av disse var (spesielt den fantastiske OpenOpt for numerisk optimalisering) høyt ansett, modne prosjekter lange før du velger å bo under de relativt nye scikits rubric. Scikits hjemmeside likte å overliste omtrent 30 slike scikits. selv om minst flere av dem ikke lenger er under aktiv utvikling. Etter dette rådene vil du lede til scikits-timeseries, men denne pakken er ikke lenger under aktiv utvikling. Pandas er faktisk blitt AFAIK, de facto NumPy-baserte tidsserienbiblioteket. Pandas har flere funksjoner som kan brukes til å beregne et glidende gjennomsnitt. Det enkleste av disse er trolig rullende. som du bruker slik: Nå bare ring funksjonen rullende mens passerer i Serie objektet og en vindu størrelse. som i mitt eksempel nedenfor er 10 dager. bekreft at det virket - f. eks. sammenlignet verdier 10-15 i den opprinnelige serien versus den nye serien jevnet med rullende middel Funksjonen rullende mean sammen med omtrent et dusin eller annen funksjon er informelt gruppert i Pandas dokumentasjon under rubrikk flyttingsvinduet fungerer en andre relatert gruppe funksjoner i Pandas refereres til som eksponentielt vektede funksjoner (f. eks. ewma. som beregner eksponentielt flytende vektet gjennomsnitt). Det faktum at denne andre gruppen ikke er inkludert i de første (bevegelige vindufunksjonene), er kanskje fordi de eksponentielt vektede transformasjonene ikke stole på et fastlengtingsvindu. Utforming av bilder Forklaringen nedenfor tilhører boken Computer Vision: Algorithms and Applications av Richard Szeliski og til LearningOpenCV Smoothing. også kalt uskarphet. er en enkel og ofte brukt bildebehandlingsoperasjon. Det er mange grunner til utjevning. I denne opplæringen vil vi fokusere på utjevning for å redusere støy (andre bruksområder vil bli sett i følgende opplæringsprogrammer). For å utføre en utjevningsoperasjon vil vi søke et filter på bildet vårt. Den vanligste typen filtre er lineær. hvor en utgangspixel8217s-verdi (dvs.) bestemmes som en vektet sum av inngangspikselverdier (dvs.): Det hjelper å visualisere et filter som et vindu av koeffisienter som glir over bildet. Det er mange slags filtre, her vil vi nevne de mest brukte: Normalisert boksfilter Dette filteret er det enkleste av alle Hver utgangspiksel er gjennomsnittet av sine nabolag (alle bidrar med likevekt) Kjernen er under: Gaussisk Filtrer Sannsynligvis det mest nyttige filteret (selv om det ikke er det raskeste). Gaussisk filtrering gjøres ved å samle hvert punkt i inngangsarrangementet med en gausskjerne og deretter summere dem alle for å produsere utgangsarrayen. Bare for å gjøre bildet klarere, husk hvordan en 1D Gaussisk kjerne ser ut som om man antar at et bilde er 1D, kan du legge merke til at pikselet i midten ville ha størst vekt. Vekten av naboene avtar som den romlige avstanden mellom dem og sentrumspikselet øker. Husk at en 2D Gauss kan representeres som: Median Filter Medianfilteret løper gjennom hvert element av signalet (i dette tilfellet bildet) og erstatter hver piksel med medianen til nabobillingene (plassert i et kvadratkvarter rundt det evaluerte pikselet ). Bilateral Filter Så langt har vi forklart noen filtre som hovedmål er å glatte et innspillingsbilde. Imidlertid løsner filtre ikke bare støynivået, men glir også bort kantene. For å unngå dette (i viss grad minst), kan vi bruke et bilateralt filter. På en analog måte som det gaussiske filteret vurderer det bilaterale filteret også nabobillingene med vektene som er tildelt hver av dem. Disse vekter har to komponenter, hvorav den første er den samme vektingen som brukes av det gaussiske filteret. Den andre komponenten tar hensyn til intensiteten i intensiteten mellom nabopunktene og den evaluerte. For en mer detaljert forklaring kan du sjekke denne lenken. Hva gjør dette programmet Belaster et bilde. Bruker 4 forskjellige typer filtre (forklart i teorien) og viser de filtrerte bildene i rekkefølge. Forklaring Let8217s kontrollerer OpenCV-funksjonene som bare involverer utjevningsprosedyren, siden hvile er allerede kjent nå. Normalisert blokkfilter: OpenCV tilbyr funksjonsskarmen for å utføre utjevning med dette filteret. Vi angir 4 argumenter (flere detaljer, sjekk referansen): src. Kilde bilde dst. Destinasjonsbilde Størrelse (w, h). Definerer størrelsen på kjernen som skal brukes (med bredde w piksler og høyde h piksler) Punkt (-1, -1). Angir hvor ankerpunktet (pikselevalueringen) befinner seg i forhold til nabolaget. Hvis det er en negativ verdi, betraktes sentrum av kjernen som ankerpunktet. Det utføres av funksjonen GaussianBlur: Her bruker vi 4 argumenter (flere detaljer, se OpenCV-referansen):

No comments:

Post a Comment