Det otrevliga sättet som en glidande medelstrålar, trenden från en massa förvirrande mätningar kan ses genom att plotta 10 dagars glidande medelvärde tillsammans med de ursprungliga dagliga vikterna, som visas som små diamanter. De rörliga medeltal som vi har använt hittills ger lika stor betydelse för alla dagar i genomsnittet. Detta behöver inte vara så. Om du tänker på det, ger det ingen mening, speciellt om du är intresserad av att använda ett långsiktigt glidande medelvärde för att släpa ut slumpmässiga stötar i trenden. Antag att du använder ett 20 dagars glidande medelvärde. Varför ska din vikt för nästan tre veckor sedan betraktas lika relevant för den nuvarande trenden som din vikt i morse. Olika former av viktade glidmedel har utvecklats för att hantera denna invändning. I stället för att bara lägga upp mätningarna för en sekvens av dagar och dela med antalet dagar, multipliceras varje mätning först med en viktfaktor som skiljer sig från dag till dag i ett viktat glidande medelvärde. Slutbeloppet är uppdelat, inte efter antal dagar, utan av summan av alla viktfaktorer. Om större viktfaktorer används för de senaste dagarna och mindre faktorer för mätningar längre fram i tiden, kommer trenden att vara mer mottaglig för de senaste ändringarna utan att offra den utjämning som ett glidande medel ger. Ett obetydligt glidande medelvärde är helt enkelt ett viktat glidande medelvärde med alla viktfaktorer lika med 1. Du kan använda alla viktfaktorer du vill, men en viss uppsättning med käftbrytande monicker Exponentially Sloothed Moving Average har visat sig användbar i applikationer som sträcker sig från luftförsvarsradar att handla Chicago fläskmarknaden. Låt oss sätta det på jobbet på våra bäckar också. Denna graf jämför viktfaktorerna för ett exponentiellt jämnt 20 dagars glidande medelvärde med ett enkelt glidande medelvärde som vikter lika mycket varje dag. Exponentiell utjämning ger dagens mätning dubbelt så stor betydelse att det enkla medelvärdet skulle tilldela det, måtten på gårdagarna lite mindre än det, och varje successiv dag mindre än dess föregångare med dag 20 bidrar bara 20 lika mycket till resultatet som med ett enkelt glidande medelvärde. Viktfaktorerna i ett exponentiellt jämnt glidande medelvärde är successiva krafter för ett tal som kallas utjämningskonstanten. Ett exponentiellt jämnt glidande medelvärde med en utjämningskonstant av 1 är identiskt med ett enkelt glidande medelvärde, eftersom 1 till vilken effekt som helst är 1. Smoothningskonstanter mindre än 1 väger de senaste dataens tyngre, varvid förspänningen mot de senaste mätningarna ökar som utjämningen konstant minskar mot noll. Om utjämningskonstanten överstiger 1, viktas äldre data tyngre än de senaste mätningarna. Denna plot visar viktfaktorerna som följer av olika värden på utjämningskonstanten. Observera hur viktfaktorerna är alla 1 när utjämningskonstanten är 1. När utjämningskonstanten är mellan 0,5 och 0,9, minskar vikten som ges till gamla data så snabbt jämfört med senaste mätningar att det inte finns något behov av att begränsa det glidande medlet till ett visst antal dagar kan vi genomsnittsa alla data vi har direkt tillbaka till början och låt viktfaktorerna beräknade från utjämningskonstanten automatiskt kasta bort gamla data eftersom det blir irrelevant för den nuvarande trenden. Jag fann en mer elegant lösning för denna fråga. Den funktion som du behöver är redan tillhandahållen av OpenCV. Detta fungerar på 3-kanals färg eller 1-kanals gråskala bilder: Metod convertScaleAbs vågar array-element, beräknar absoluta värden och omvandlar resultaten till 8-bitars usignerade heltal: dst (i) saturatecastabs (src (i) alfabeta) convertScaleAbs (InputArray src , OutputArray dst, dubbel alfa1, dubbel beta0) Exempel kod besvarad feb 8 15 kl 23:46 Ditt svar 2017 Stack Exchange, IncHi, det här kommer att bli en mycket enkel artikel, men du hittar det väldigt bra. Det handlar om bakgrundsutdragning från en video. Antag att du får video av bilder av trafik, kan vara något sådant så här. Trafik i Indien. och du uppmanas att hitta en ungefärlig bakgrund. Eller något sånt. Bakgrundsutvinning är viktig vid objektspårning. Om du redan har en bild av den nakna bakgrunden är det enkelt. Men i många fall har du inte en sådan bild och så måste du skapa en. Det är där Running Average kommer till nytta. (Jag tänkte på det här när en kille frågade en fråga i SOF. Länk) Funktionen som vi använder här för att hitta Running Average är cv2.accumulateWeighted (). Om vi till exempel tittar på en video fortsätter vi att mata varje ram till den här funktionen, och funktionen fortsätter att hitta medelvärdena för alla ramar som matas till den enligt förhållandet nedan: src är ingenting annat än vår källbild. Det kan vara gråskala eller färgbild och antingen 8-bitars eller 32-bitars flytpunkt. dst är utsignalen eller ackumulatorns bild med samma kanaler som källbilden, och det är antingen 32-bitars eller 64-bitars flytpunkt. Dessutom bör vi förklara det först till ett värde som kommer att tas som initialvärde. alfa är vikten av inmatningsbilden. Enligt Docs reglerar alfa uppdateringshastigheten (hur fort ackumulatorn 8220forgets8221 om tidigare bilder). I enkla ord, om alfa är ett högre värde, försöker den genomsnittliga bilden att fånga mycket snabbt och korta ändringar i data. Om det är lägre värde blir genomsnittet trögt och det kommer inte att överväga snabba ändringar i inmatningsbilderna. Jag kommer att förklara det lite med hjälp av bilder i slutet av artikeln. I ovanstående kod har jag satt två medelvärden, en med högre alfa-värde och ett annat med lägre alfa-värde så att du kan förstå effekten av alfa. Först ställs båda in i initialbildsramen. Och i loop blir de uppdaterade. Du kan se några resultat i SOF-länken som jag redan tillhandahållit. (Jag ger dessa resultat här, du kan kolla koden och alfa-värdet där): Jag använde min webbkamera och sparade originalram och löpande medelvärde vid ett visst ögonblick. Detta är en ram från en vanlig trafikvideo som tas av en stationär kamera. Som du kan se går en bil på vägen, och personen försöker korsa vägen vid ett visst ögonblick. Men se löpande genomsnittet vid den tiden. Det finns ingen person och bil i bilden (Egentligen är det där, titta noga, då ser du det och personen är tydligare än bilen, eftersom bilen går mycket snabbt och över bilden, det har inte mycket effekten i genomsnitt, men personen är där länge, eftersom han är långsam och rör sig över vägen.) Nu behöver vi se effekten av alfa på dessa bilder. Möjliga bilder Förklaringen nedan tillhör boken Datorsyn: Algoritmer och applikationer av Richard Szeliski och LearningOpenCV Smoothing. kallas också suddig. är en enkel och ofta använd bildbehandlingsoperation. Det finns många orsaker till utjämning. I denna handledning kommer vi att fokusera på utjämning för att minska buller (andra användningar kommer att ses i följande handledning). För att utföra en utjämningsoperation kommer vi att tillämpa ett filter på vår bild. Den vanligaste typen av filter är linjär. i vilket ett utgångs-pixel8217s-värde (d. v.s.) bestäms som en viktad summa av ingångspixelvärden (dvs): Det hjälper till att visualisera ett filter som ett fönster av koefficienter som glider över bilden. Det finns många typer av filter, här kommer vi att nämna de mest använda: Normaliserad Boxfilter Det här filtret är det enklaste av alla Varje utgångspixel är medelvärdet av dess kärngrannar (alla bidrar med lika vikt) Kärnan är nedan: Gauss Filtrera Troligen det mest användbara filtret (men inte det snabbaste). Gaussisk filtrering görs genom att sammanfoga varje punkt i ingångs-matrisen med en Gaussisk kärna och summera dem alla för att producera utmatningsraden. Bara för att göra bilden tydligare, kom ihåg hur en 1D Gaussisk kärna ser ut som Om man antar att en bild är 1D, kan du märka att pixeln i mitten skulle ha den största vikten. Väggen hos dess grannar minskar som det rumsliga avståndet mellan dem och mittpunkten ökar. Kom ihåg att en 2D-gauss kan representeras som: Medianfilter Medianfiltret löper genom varje element av signalen (i detta fall bilden) och ersätter varje pixel med medianen i dess närliggande pixlar (belägen i ett kvadratkvarter runt den utvärderade pixeln ). Bilateralt filter Hittills har vi förklarat några filter vars huvudsyfte är att släta en inmatningsbild. Men ibland löser filtren inte bara ljudet, utan släpper också av kanterna. För att undvika detta (i viss utsträckning åtminstone) kan vi använda ett bilateralt filter. På ett analogt sätt som det gaussiska filtret betraktar det bilaterala filtret även de närliggande pixlarna med vikter som tilldelas var och en av dem. Dessa vikter har två komponenter, den första är samma vikt som används av Gaussian filter. Den andra komponenten tar hänsyn till skillnaden i intensitet mellan de närliggande pixlarna och den utvärderade. För en mer detaljerad förklaring kan du kolla denna länk. Vad laddar det här programmet Laddar en bild Tillämpar 4 olika filtertyper (förklaras i teorin) och visar de filtrerade bilderna i följd. Förklaring Let8217s kontrollerar OpenCV-funktionerna som endast innefattar utjämningsproceduren, eftersom vila är redan känd nu. Normaliserad Blockfilter: OpenCV erbjuder funktionen oskärpa för att utföra utjämning med detta filter. Vi anger 4 argument (mer information, kolla referensen): src. Källbild dst. Destinationsbild Storlek (w, h). Definierar storleken på kärnan som ska användas (med bredd w pixlar och höjd h pixlar) Punkt (-1, -1). Anger var ankarpunkten (pixeln utvärderas) ligger i förhållande till grannskapet. Om det finns ett negativt värde, anses kärnans mitt ankarpunkten. Det utförs av funktionen GaussianBlur: Här använder vi 4 argument (mer information, kolla OpenCV-referensen):
No comments:
Post a Comment