Skip to main content

Flytte Gjennomsnittet Filter Verilog Kode


Gjennomsnittlig filter, eller gjennomsnittlig filter Kategori. Programvareutvikling for digitalt signal og bildebehandling (DSP og DIP). Abstrakt. Artikkelen er en praktisk veiledning for gjennomsnittlig filter, eller gjennomsnittlig filterforståelse og - implementering. Artikkelen inneholder teori, C kildekode, programmeringsinstruksjoner og prøveapplikasjon. 1. Introduksjon til gjennomsnittlig filter, eller gjennomsnittlig filter Gjennomsnittlig filter. eller gjennomsnittlig filter er windowed filter av lineær klasse, som jevner signalet (bilde). Filteret fungerer som lavpass en. Den grunnleggende ideen bak filteret er for ethvert element av signalet (bildet) et gjennomsnitt over hele nabolaget. For å forstå hvordan det gjøres i praksis, la oss begynne med vinduets ide. 2. Filter vindu eller maske La oss forestille oss, bør du lese et brev og det du ser i tekst begrenset av hull i spesiell stencil som dette. Så, resultatet av lesing er lyd t. Ok, la oss lese brevet igjen, men ved hjelp av en annen stencil: Nå er resultatet av å lese t lyd 240. La oss gjøre det tredje forsøket: Nå leser du brev t som lyd 952. Hva skjer her Å si det I matematisk språk, gjør du en operasjon (lesing) over element (bokstav t). Og resultatet (lyden) avhenger av elementet nabolaget (bokstaver ved siden av t). Og den stencilen, som bidrar til å hente elementet nabolag, er vindu Ja, vinduet er bare en stencil eller et mønster, ved hjelp av hvilket du velger elementet nabolaget 0151 et sett med elementer rundt den givne 0151 for å hjelpe deg med å ta avgjørelse. Et annet navn for filtervindu er maske 0151 maske er en stencil, som skjuler elementer vi ikke betaler oppmerksomhet til. I vårt eksempel er elementet vi opererer på plassert på venstre side av vinduet, men i praksis er dens vanlige posisjon midt i vinduet. La oss se noen vindueksempler. I en dimensjon. Fig. 4. Vindu eller maske av størrelse 5 i 1D. I to dimensjoner. Fig. 5. Vindu eller maske av størrelse 3times3 i 2D. I tre dimensjoner. Tenk på bygging. Og nå mdash om rom i den bygningen. Rommet er som 3D-vindu, noe som skjærer ut noe underrom fra hele rommet. Du kan finne 3D-vindu i volum (voxel) bildebehandling. 3. Forstå gjennomsnittlig filter Nå la oss se hvordan å ldquotake et gjennomsnitt over elementer neighborhoodrdquo. Formelen er enkle 0151 oppsummeringselementer og deler summen av antall elementer. La oss for eksempel beregne et gjennomsnitt for saken, vist i fig. 7. Fig. 7. Ta et gjennomsnitt. Og det er alt. Ja, vi har bare filtrert 1D-signal ved gjennomsnittlig filter. La oss lage CV og skrive ned trinnvise instruksjoner for behandling av gjennomsnittlig filter. Gjennomsnittlig filter eller gjennomsnittlig filteralgoritme: Sett et vindu over elementet. Ta en gjennomsnittlig oppsummeringselement på 0151 og del summen av antall elementer. Nå, når vi har algoritmen, er det på tide å skrive noen kode mdash la oss komme ned til programmering. 4. 1D gjennomsnittlig filterprogrammering I denne delen utvikler vi 1D-middelfilter med vindu med størrelse 5. La oss få 1D-signal med lengde N som inngang. Det første trinnet er å plassere vinduet 0151, vi gjør det ved å endre indeksen for det ledende elementet: Vær oppmerksom på at vi starter med det tredje elementet og avsluttes med det siste, men to. Problemet er at vi ikke kan starte med det første elementet, fordi i dette tilfellet er venstre del av filtervinduet tomt. Vi vil diskutere nedenfor, hvordan du løser dette problemet. Det andre trinnet tar gjennomsnittet, ok: Nå, la oss skrive ned algoritmen som funksjon: Typeelementet kan defineres som: 5. Behandling av kanter For alle vindusfiltre er det noe problem. Det er kanten behandling. Hvis du plasserer vinduet over første (siste) elementet, vil venstre (høyre) del av vinduet være tomt. For å fylle gapet, bør signalet forlenges. For gjennomsnittlig filter er det god ide å utvide signal eller bilde symmetrisk, slik: Så før signalet sendes til vår gjennomsnittlige filterfunksjon, bør signalet utvides. La oss skrive ned wrappen, som gjør alle forberedelser. Som du ser, tar vår kode hensyn til noen praktiske problemer. Først og fremst sjekker vi innspillparametrene 0151 signalet skal ikke være NULL, og signallengden skal være positiv: Andre trinn 0151 vi sjekker tilfelle N1. Denne saken er spesiell en, for å bygge utvidelse trenger vi minst to elementer. For signalet med 1 elementlengde er resultatet selve signalet. Vær også oppmerksom på at vårt gjennomsnittlige filter fungerer på plass, hvis utgangsparameterresultatet er NULL. La oss nå tildele minne for signalutvidelse. Og sjekk minnefordeling. Implementering av FIR-filtrering i C (del 3) Del 2 viste et eksempel på et FIR-filter i C ved hjelp av fast punkt. Denne opplæringen om FIR-filtrering viser hvordan du bruker flere forskjellige FIR-filtre til de samme inngangsdataene. Eksemplene på denne delen er også i fast punkt. Eksemplet er en enkelt C-fil med FIR-filterkoden øverst, og et lite testprogram nederst. I en faktisk implementering vil du sannsynligvis ønske å dele koden i flere filer. Klikk på følgende kobling for en PDF-versjon av kodeeksemplet: Kodeksemplet er vist nedenfor: Det er noen forskjeller fra kodeeksemplet til del 2. Først har jeg opprettet en funksjon for å lagre inngangsprøver til inngangseksemplaret (firStoreNewSamples). Denne funksjonen kalles en gang for hver blokk av inngangssampler som behandles. Anropsfunksjonen passerer i en peker til de nye innspillprøvene, og antallet nye prøver som skal kopieres. Funksjonen returnerer adressen der du skal bruke FIR-filteret. For det andre har jeg lagt til en funksjon for å flytte prøvene etter å ha behandlet en blokk med prøver (firMoveProcSamples). Igjen kalles denne funksjonen en gang per blokk med prøver, ikke en gang per FIR-filter påført. FIR-filtreringsfunksjonen (firFixed) har samme argumentliste som i eksempel 2, men inngangsargumentet er litt annerledes i dette tilfellet. Inngangspekeren som ble sendt inn, skal være adressen returnert fra firStoreNewSamples-funksjonen, i stedet for en peker til inntaksprøvebufferen. Testprogrammet viser et eksempel hvor to forskjellige FIR-filtre blir brukt på de samme utgangsdataene. Første innspillingsfil åpnes (for inngangssampler) og to utgangsfiler åpnes (ett for hvert filter). I prosessbehandlingssløyfen leses og lagres en blokk på opptil 80 prøver inn i arbeidsarrayet for filtrene. Deretter påføres 63 tap-båndpassfilteret ved å ringe firFixed, og blokken av utgangsprøver blir skrevet til fil. Etterpå blir 8-trykks glidende gjennomsnittsfilter påført, og utgangssamplene blir skrevet til en annen fil. Til slutt forskyves prøvebufferen for å forberede seg til neste blokk av inngangsprøver. Koden jeg har vist fungerer for så mange filtre som du vil implementere. Husk å holde oversikt over maksimal filtertangelengde, og angi prøveblokkestørrelse, og endre definisjonene på riktig måte. Det avsluttes opplæringen min på grunnleggende FIR-filtre. Liker dette: Legg igjen et svar Avbryt svar Takk så mye for å legge inn veldig fin opplæring. Jeg vil gjerne implementere ditt eksempel på AVR Atmega16-kontrolleren. Jeg har ADC-funksjonen ReadADC (0x00) som leser 10bits-verdien fra ADC-registret. hvor skal jeg legge inn ADC-verdien til eksempelet ovenfor. Jeg er ny til kontrollerprogrammet, jeg skal være takknemlig for dine guider og forslag. Vennligst veiled meg hvor jeg skulle gjøre nødvendige endringer i eksempelet ovenfor. Abdul, takk for komplimentet. Du bør lese dine ADC-prøver inn i en matrise og deretter sende adressen til det aktuelle arrayet til firFixed-funksjonen som det andre argumentet. I hovedprogrammet leser jeg eksempler fra en fil inn i arrayet heter 8220input8221. I koden din bør du lese ADC-prøver til et lignende utvalg. I eksemplet har jeg behandlet 80 prøver om gangen, men du bør endre denne verdien til det som passer for din søknad. Ved å behandle en prøve om gangen ville det redusere forsinkelsen gjennom filteret, men det ville være den mest kostbare når det gjelder sykluser. Kjære Shawn, takk for svaret ditt. Jeg har lest ADC-verdien som inputSAMPLESADCRead (0x00), og passerte adressen til inputSAMPLES til funksjonen firStoreNewSamples som inp firStoreNewSamples (ampinputSAMPLES, size). jeg er forvirret om størrelsen heltall. som størrelse er lengden, vil du gjerne foreslå meg hva som skal være verdien av størrelsen. siden FirFixed-funksjonen har fem argumenter som firFixed (coeffs, inp, output, size, FILTERLEN) og inp leses fra firStoreNewSamples. Mitt program er oppført nedenfor, vennligst chek det. Jeg vil være takk full til deg, takk. inkludere inkludere definere ADCVREFTYPE 0x20 definere PWM1DCReg OCR1A maksimalt antall innganger som kan håndteres i ett funksjonsanrop definere MAXINPUTLEN 25 maksimal lengde på filteret enn det kan håndteres definer MAXFLTLEN 16 buffer for å holde alle inngangsprøvene definere BUFFERLEN (MAXFLTLEN 8211 1 MAXINPUTLEN ) array for å holde input samples int16t insamp BUFFERLEN definere SAMPLES 25 FIR init void firFixedInit (void) memset (insamp, 0, sizeof (insamp)) lagre nye innsatsprøver int16t firStoreNewSamples (int16t inp, int lengde) sette de nye prøvene på høy slutten av buffer memcpy (ampinsampMAXFLTLEN 8211 1, inp, lengde sizeof (int16t)) returnere plasseringen der du skal bruke filtreringsreturen ampinsampMAXFLTLEN 8211 1 flytt prosesserte prøver tomt firMoveProcSamples (int lengde) skiftinngangsprøver tilbake i tid for neste gang memmove (ampinsamp0, ampinsamplength, (MAXFLTLEN 8211 1) sizeof (int16t)) FIR-filterfunksjonen void firFixed (int16t coeffs, int16t input, i nt16t utgang, int lengde, int filterlengde) int32t akkumulator for MACs int16t coeffp peker til koeffisienter int16t inputp peker for å skrive inn prøver int n int k bruke filteret til hver inngangseksempel for (n 0 n lt lengde n) beregne utdata n coeffp coeffs inputp ampinputn belastning avrunding konstant acc 1 ltlt 14 utfør multiplikat akkumulere for (k 0 k 0x3fffffff) acc 0x3fffffff annet hvis (acc gt 15) Lavpass cutoff frekvens 1000Hz, Samplingsfrekvens 8915Hz. definere FILTERLEN 16 int16t coeffs FILTERLEN 0xFF45, 0xFE83, 0xFDB2, 0xFFC9, 0x088E, 0x18A4, 0x2B29, 0x37AF, 0x37AF, 0x2B29, 0x18A4, 0x088E, 0xFFC9, 0xFDB2, 0xFE83, 0xFF45 PORTA 0x00 DDRA 0x00 PORTB 0x00 DDRB 0xff PORTC 0x00 DDRC 0xff PORTC 0x00 DDRC 0xff PORTD 0x00 DDRD 0x20 PIND.5 Filterutgang tomrom InitADC (tomrom) ADMUX ADCVREFTYPE amp 0xff Velg kanal 0 ADCSRA 0xC4 Aktiver ADC amp start 1: st dummy konvertering int16t ReadADC (usigned char channel) int16t ADCValue ADMUX kanal (ADCVREFTYPE amp 0xff) Velg kanal delayus (10) Forsinkelse nødvendig for stabilisering av ADC-inngangsspenningen ADCSRA 0x40 Start konvertering mens ((ADCSRA amp 0x10)) Sjekk om konverteringen er klar ADCSRA 0x10 Klar konverterings klar flagg ved å sette bit ADCValue ADCL Les 8 lavbits først (viktig) ADCValue (int) ADCH ltlt 8 Les 2 høybiter og multipliser med 256 tomgangstimer1 (tomrom) TimerCounter 1-initialisering Urkilde: Systemur Klokkeverdi: 8000.000 kHz Modus: 8 bit Pulsmålingmodulasjon OC1A-utgang: Ikke-inv. OC1B-utgang: Discon. PWM-utgangsfrekvensen er doblet Støyavbryter: Av91,09 Inngangsfanger på fallende kant TCCR1A 0x09 TCCR1B 0x09 TCNT1H 0x00 TCNT1L 0x00 ICR1H 0x00 ICR1L 0x00 OCR1AH ​​0x00 OCR1AL 0x00 OCR1BH 0x00 OCR1BL 0x00 Initialiser alle enhetene cli () Slett alle Interrupts InitPort () InitADC () timer1 () int størrelse int16t inputSAMPLES int16t outputSAMPLES int16t inp initialiser filteret firFixedInit () prosess alle prøvene leser prøver fra filstørrelse fread (input, sizeof (int16t), SAMPLES, infid) inputSAMPLES ReadADC (0x00) lagre ny Eksempler i arbeidsgruppe inp firStoreNewSamples (ampinputSAMPLES, size) gjelder hvert filter firFixed (coeffs, inp, output, size, FILTERLEN) flytte behandlede prøver firMoveProcSamples (size) mens (størrelse 0) Ekstern Interrupt (s) initialisering INT0: Av INT1: Av MCUCR 0x00 MCUCSR 0x00 Timer (teller) Counter (s) Initialisering av initieringen TIMSK 0x83 Analog Comparator-initialisering Analog Comparator: Av Analog Comparator Input Capture av TimerCounter 1: Av ACSR 0x80 SFIOR 0x00 sei () Aktiver Global avbryt PWM1DCReg utgangseffekt for filter PORTB Bytt utgangsport for å tillate måling av ISR-samplingsfrekvens PORTC ADCH Kontroller ADCH-statusresultatet Det er en rekke ting feil med koden din. Det ser ut til at du bare leser én prøve om gangen, så det ville være fornuftig å endre definere SAMPLES til 1 (eller bare bruk en variabel i stedet for en matrise). 8220size8221 var opprinnelig antall eksemplarer som ble lest fra filen i mitt eksempel. Du bør bare passere 1 i stedet hvis du gjør 1 prøve om gangen. Gjørsløyfen bør elimineres helt siden du ikke lenger leser fra en fil. Du bør enten avstemme timeren avbryte eller skrive en ISR slik at du kan lese fra ADC periodisk (8000 eller 8915 ganger per sekund, dømmer etter kommentarer i koden din). Og du må sannsynligvis skrive til outputregisteret hver gang du har en ny utgang. Jeg vil også anbefale å starte med et enklere program hvor du bare leser ADC og deretter utdata hva du leser. Når du har det som fungerer, sett inn filterkoden. Jeg håper det hjelper. Kjære Shawn, Takk for din guide og forslag. Jeg er ny til kontrolleren programmering jeg må starte første veldig enklere eksempel. Jeg er veldig interessert i å lære programmeringen av kontrolleren hvis mulig, vennligst foreslå meg hvordan skal jeg begynne. Jeg har begynnende kunnskap om AVR-arkitektur ATmega-serie 8-biters mikrokontrollere. og jeg bruker AVR Studio for programmering av kontrolleren. Vennligst veiled meg hvordan skal jeg begynne å jobbe med kontrolleren. Abdul. Mitt råd vil være å starte med noen eksempelprogrammer som følger med utviklingssettet ditt (eller verktøyene, eller andre steder), og sørg for at du kan få dem til å fungere skikkelig. Prøv deretter å eksperimentere ved å endre disse programmene. Når du kjeder deg med det, kan du prøve å lage ditt eget program. Start med noe enkelt som å sette opp ADC og lese fra det. Legg deretter til flere funksjoner ett trinn om gangen. Legg til en kode for å sette opp timeren og verifisere at den fungerer. Legg til kode for å avstemme timeren avbryt. Prøv deretter å kode en interrupt service rutine (ISR). Legg deretter til kode i ISR ​​for å lese ADC. Trikset er å skrive en liten mengde kode om gangen og verifisere at den fungerer hvert skritt av veien. Det er vanligvis enklere enn å skrive en hel del kode om gangen, og deretter prøver å feilsøke alt på en gang (spesielt hvis du gjør noe som er nytt for deg). Kjære Shawn, Takk så mye for ditt verdsatte forslag. Og jeg ser frem til hjelpen din hvis jeg fant noe problem i programmeringen i fremtiden. Takk igjen. Shawn, jeg prøver å lage en grafisk equalizer ved hjelp av FIR-filtre, og dette har vært ganske nyttig så langt. Men jeg lurte på om du har noen informasjon om hvordan man søker gevinst til produksjonen av hvert band Hei Joseph. For en grafisk equalizer, vil du bruke en gevinst for hvert bånd ved å multiplisere sluttresultatet av filtreringen med et tall mellom 0 og 1. Så hvert filter skal ha en maksimal gevinst på 1 (ved midtfrekvensen) og da bør du ha et sett med gevinster for hvert bånd. Det er best å uttrykke gevinsten i dB (deciBels) hvis du lager en grafisk visning eller kontroll (som en skyveknapp). Gevinsten i dB er 20log10 (g) hvor g er multiplikasjonsverdien (mellom like over 0 og 1). Deretter tilsvarer 6 dB en gevinst på ca. 0,5. Det er 20log10 (0,5) er omtrent -6. Den omvendte formelen er g pow10 (G20) hvor G er gevinsten i dB. Så hvis gevinsten er -24 dB, er multiplikatorverdien g pow10 (-2420) 0,063. Årsaken til bruk av desibel er fordi oppfatningen av lydstyrken følger en logaritmisk skala. Jeg håper det hjelper deg. Hei Shawn, Flott opplæring Din blogg har mye mer praktiske ting enn de fleste signalbehandlingsbøker. Jeg har et par oppfølgingsspørsmål om opplæringen din, og det ville være flott hvis du kunne peke meg i riktig retning. Forsøker å implementere (i hardwareverilog) en 32 bit mac med 2 16 bit innganger. Hvis jeg vil lagre 32-bits resultat i et 16-biters register, forstår jeg at for fast punkt signert signert multiplikasjon må vi bare (uten avrunding) trekke ut bit 30 til 15 (og ikke 31 fordi det er dobbelt tegn). 1) Er litt forvirret hvis jeg trenger annen maskinvare for signert brøk multiplikasjon og rent heltall multiplikere. Si at jeg bruker to separate 16 bit-registre for å lagre 32bit-resultatet av multiplikasjonen. Tror du bare å bruke en betinget shifter mellom 32bit multiplikatorresultatet (umiddelbart etter multiplier-maskinvaren) og like før lagring av det i 2 separate registre ville være tilstrekkelig Den betingede shifter-forskyvningen venstre for 1 for fraksjonal multiplikasjon og skiftende med 0 for heltall multiplikere Takk for kommentaren. Ditt andre spørsmål synes å ha gått tapt. For å svare på ditt første spørsmål, bør du kunne bruke samme multiplikator for både heltall og fast punktmultiplikasjon, akkurat som du har beskrevet. For fastpunktmultiplikatoren er det ett spesiell tilfelle som du må være oppmerksom på, som multipliserer -1 med -1 (hvor -1 er 0x8000 i brøkdel Q.15). Når du multipliserer 0x8000 med 0x8000, blir resultatet 0x4000,0000. Hvis du skifter det som forlot du ender opp med 0x8000,0000, så er sluttresultatet at -1 ganger -1 er lik -1. Noen måter å håndtere dette på er: 1) Aldri multipliserer -1 ved -1 2) Saturate resultatet til 0x7FFF, FFFF 3) Hev et overgangsflagg og håndter feilen på en eller annen måte. Jeg håper det hjelper. Mean filter Vanlige navn: Gjennomsnittlig filtrering, utjevning, gjennomsnittlig, boksfiltrering Kort beskrivelse Gjennomsnittlig filtrering er en enkel, intuitiv og enkel å implementere metode for utjevning av bilder, dvs. redusere intensitetsvariasjonen mellom en piksel og den neste . Det brukes ofte til å redusere støy i bilder. Slik fungerer det Ideen om gjennomsnittlig filtrering er bare å erstatte hver pikselverdi i et bilde med gjennomsnittlig (gjennomsnitts) verdi for naboene, inkludert seg selv. Dette medfører at man eliminerer pikselverdier som ikke representerer omgivelsene. Gjennomsnittlig filtrering anses vanligvis som et konvoluttfilter. Som andre omveltninger er den basert rundt en kjerne. som representerer formen og størrelsen på nabolaget som skal samples ved beregning av gjennomsnittet. Ofte brukes en 32153 kvadratkjerne, som vist i figur 1, selv om større kjerner (for eksempel 52155 kvadrater) kan brukes til mer alvorlig utjevning. (Merk at en liten kjerne kan brukes mer enn en gang for å produsere en lignende, men ikke identisk effekt som et enkelt pass med en stor kjerne.) Figur 1 32153 gjennomsnittlig kjerne som ofte brukes i gjennomsnittlig filtrering Beregning av den enkle konvolusjonen av et bilde med Denne kjernen utfører den gjennomsnittlige filtreringsprosessen. Retningslinjer for bruk Gjennomsnittlig filtrering brukes mest som en enkel metode for å redusere støy i et bilde. Vi illustrerer filteret ved å vise originalen ødelagt av Gaussisk støy med et gjennomsnitt på null og en standardavvik () på 8. viser effekten av å anvende et 32153 middelfilter. Legg merke til at støyen er mindre tydelig, men bildet er mykgjort. Hvis vi øker størrelsen på det gjennomsnittlige filteret til 52155, oppnår vi et bilde med mindre støy og mindre høyfrekvent detalj, som vist i Det samme bildet er mer alvorlig ødelagt av gaussisk støy (med et middel på null og a av 13) vises inn er resultatet av gjennomsnittlig filtrering med en 32153-kjernen. En enda mer utfordrende oppgave er gitt av viser effekten av å stryke det støyende bildet med et 32153 middelfilter. Siden pixelverdiene for skuddstøypiksler ofte er svært forskjellige fra de omgivende verdiene, har de en tendens til å vesentlig forvride pikselmiddelet beregnet av middelfilteret. Bruke et 52155 filter istedet gir Dette resultatet er ikke en signifikant forbedring i støyreduksjon, og i tillegg er bildet nå veldig uklart. Disse eksemplene illustrerer de to hovedproblemene med gjennomsnittlig filtrering, som er: En enkelt piksel med en svært representativ verdi kan betydelig påvirke gjennomsnittsverdien av alle piksler i nabolaget. Når filterkvarteret strekker seg til en kant, vil filteret interpolere nye verdier for piksler på kanten, og det vil derfor uskarpe den kanten. Dette kan være et problem hvis skarpe kanter kreves i utgangen. Begge disse problemene løses av medianfilteret. som ofte er et bedre filter for å redusere støy enn gjennomsnittet filter, men det tar lengre tid å beregne. Generelt fungerer det gjennomsnittlige filteret som et lavpassfrekvensfilter og reduserer derfor de romlige intensitetsderivatene som er tilstede i bildet. Vi har allerede sett denne effekten som en mykning av ansiktsfunksjonene i eksemplet ovenfor. Nå vurderer bildet som viser en scene som inneholder et bredere spekter av forskjellige romlige frekvenser. Etter utjevning en gang med et 32153 middelfilter får vi oppmerksom på at den lave romlige frekvensinformasjonen i bakgrunnen ikke har blitt påvirket vesentlig ved filtrering, men de (en gang skarpe) kanter av forgrunnsfaget har blitt kraftig jevnet. Etter filtrering med et 72157 filter får vi en enda mer dramatisk illustrasjon av dette fenomenet i Sammenlign dette resultatet til det som er oppnådd ved å sende et 32153 filter over det opprinnelige bildet tre ganger i vanlige variasjoner. Variasjoner på det gjennomsnittlige utjevningsfilteret som diskuteres her inkluderer Terskelverdiberegning hvor utjevning påføres underlagt betingelsen om at senterpikselverdien bare endres hvis forskjellen mellom dens opprinnelige verdi og gjennomsnittsverdien er større enn en forhåndsinnstilt grense. Dette medfører at støyen blir jevnet med et mindre dramatisk tap i bilde detaljene. Andre convolution filtre som ikke beregner gjennomsnittet av et nabolag, brukes også ofte til utjevning. En av de vanligste av disse er det gaussiske utjevningsfilteret. Interaktiv eksperiment Du kan interaktivt eksperimentere med denne operatøren ved å klikke her. Det gjennomsnittlige filteret beregnes ved hjelp av en konvolusjon. Kan du tenke på noen måter der de spesielle egenskapene til den gjennomsnittlige filterkjernen kan brukes til å øke konvolusjonen. Hva er den kompleksiteten til denne raskere konvolusjonen. Bruk en kantdetektor på bildet og merk styrken på utgangen. Påfør deretter et 32153 middelfilter til det opprinnelige bildet og kjør kantdetektoren igjen. Kommentere forskjellen. Hva skjer hvis et 52155- eller 72157-filter brukes? Det å bruke et 32153-middelfilter to ganger gir ikke det samme resultatet som å bruke et 52155-middelfilter én gang. Imidlertid kan en 52155 konvolusjonskjerne konstrueres som er ekvivalent. Hva ser denne kjernen ut som Opprett en 72157 konvolusjonskjerne som har en ekvivalent effekt på tre passerer med et 32153 middelfilter. Hvordan tror du det gjennomsnittlige filteret ville takle Gaussisk støy som ikke var symmetrisk rundt null Prøv noen eksempler. Referanser R. Boyle og R. Thomas Computer Vision: Et første kurs. Blackwell Scientific Publications, 1988, s. 32-34. E. Davies Maskin Vision: Teori, Algoritmer og Praktiske. Academic Press, 1990, kap. 3. D. Vernon Machine Vision. Prentice-Hall, 1991, kap. 4. Lokal informasjon Spesifikk informasjon om denne operatøren kan bli funnet her. Mer generelt råd om den lokale HIPR-installasjonen er tilgjengelig i Innledning for lokal informasjon.

Comments

Popular posts from this blog

Best Forex Handelssystemer Anmeldelser

Forex Trading Anmeldelser Hvilke forex trading funksjoner betyr og hvorfor konto og portefølje konto og portefølje informasjon refererer til data og visningsalternativer knyttet til den finansielle kontoen og transaksjonsinformasjon av en forex konto. Alle de beste forexmeglerne vil oppdatere kontoinformasjon i sanntid, vise kontosaldoer, og gi historierapporter og uttalelser. Mens konto - og porteføljeinformasjon er relativt viktig, er det sikkert å anta at de fleste forex meglere tilbyr de viktigste funksjonene. En investor som krever spesifikke porteføljerapporteringsfunksjoner, vil kanskje ha en tøffere titt på funksjonene i denne kategorien. Viktigste konto - og porteføljefunksjoner Kontohistorie Rapporter 8211 Du kan opprette rapporter eller vise uttalelser av porteføljen eller kontoinformasjonen. Last ned Statements 8211 Du kan laste ned kontoutskrifter. Eksporter data 8211 Du kan eksportere porteføljen eller kontodata. GainLoss 8211 Du kan kjøre gevinst og tap rapporter for ska...