Lodes Computer Graphics Handledning Bildfiltrering Innehållsförteckning Inledning Bildfiltrering gör att du kan tillämpa olika effekter på foton. Den typ av bildfiltrering som beskrivs här använder ett 2D-filter som liknar det som ingår i Paint Shop Pro som användardefinierat filter och i Photoshop som anpassat filter. Konvoltering Tricket i bildfiltrering är att du har en 2D-filtermatris och 2D-bilden. Sedan, för varje bildpunkt, ta summan av produkterna. Varje produkt är färgvärdet för den aktuella pixeln eller en granne av den, med motsvarande värde för filtermatrisen. Filtermatrisens centrum måste multipliceras med den aktuella pixeln, de andra elementen i filtermatrisen med motsvarande nabopixlar. Denna operation där du tar summan av produkter av element från två 2D-funktioner, där du låter en av de två funktionerna flytta över varje element i den andra funktionen kallas Konvolvering eller Korrelation. Skillnaden mellan konvolution och korrelation är att för konvolution måste du spegla filtermatrisen, men vanligtvis är den symmetrisk i alla fall så det är ingen skillnad. Filtren med konvolvering är relativt enkla. Mer komplexa filter, som kan använda mer fina funktioner, existerar också, och kan göra mycket mer komplexa saker (till exempel Färgpennfiltret i Photoshop), men sådana filter diskuteras inte här. 2D-konvolutionsoperationen kräver en 4-dubbel loop, så det är inte extremt snabbt, om du inte använder små filter. Här brukar brukar använda 3x3 eller 5x5 filter. Det finns några regler om filtret: Dess storlek måste vara ojämn, så att den har ett centrum, till exempel 3x3, 5x5 och 7x7 är ok. Det behöver inte, men summan av alla element i filtret ska vara 1 om du vill att den resulterande bilden ska ha samma ljusstyrka som originalet. Om summan av elementen är större än 1 kommer resultatet att bli en ljusare bild, och om den är mindre än 1, en mörkare bild. Om summan är 0, är den resulterande bilden inte nödvändigtvis helt svart, men det är väldigt mörkt. Bilden har ändliga dimensioner, och om du till exempel beräknar en pixel på vänster sida, finns det inte några fler pixlar till vänster om det, medan dessa krävs för falsningen. Du kan antingen använda värdet 0 här eller linda runt till andra sidan av bilden. I denna handledning väljes omslaget, eftersom det enkelt kan göras med en modulo-delning. De resulterande pixelvärdena efter applicering av filtret kan vara negativa eller större än 255. Om så händer kan du stympa dem så att värden som är mindre än 0 är gjort 0 och värden större än 255 är satt till 255. För negativa värden kan du också ta det absoluta värdet istället. I Fourier Domain eller Frequency Domain blir konvolutionsoperationen en multiplikation istället, vilket är snabbare. I Fourier-domänen kan mycket kraftfullare och större filter appliceras snabbare, speciellt om du använder snabb Fourier-transformen. Mer om detta finns i Fourier Transform-artikeln. I den här artikeln, kolla på några mycket typiska småfilter, såsom oskärpa, kantdetektering och prägling. Bildfilter är inte möjliga för applikationer och spel i realtid, men de är användbara vid bildbehandling. Digitala ljud - och elektroniska filter fungerar också med convolution men i 1D. Häri koden som ska användas för att prova olika filter. Förutom att använda en filtermatris, har den också en multiplikatorfaktor och en bias. Efter applicering av filtret multipliceras faktorn med resultatet, och förspänningen läggs till den. Så om du har ett filter med ett element 0,25 i det, men faktorn är satt till 2, är alla element i filtret teoretiskt multiplicerat med två så att elementet 0,25 faktiskt är 0,5. Förspänningen kan användas om du vill göra den resulterande bilden ljusare. Resultatet av en pixel lagras i floats röd, grön och blå innan den konverteras till heltalet i resultatbufferten. Filtreringsberäkningen i sig är en 4-dubbelslinga som måste gå igenom alla pixlar av bilden, och sedan genom varje element i filtermatrisen. PlaceringsbildenX och imageY beräknas så att för centrumets element i filtret är det x, y, men för de andra elementen är det en pixel från bilden till vänster, höger, övre eller nedre delen av x, y. Dess modulo delad genom bredden (w) eller höjden (h) av bilden så att pixlar utanför bilden kommer att lindas runt. Innan modulo delar upp det, läggs även w eller h till det, eftersom den här modulo-divisionen inte fungerar korrekt för negativa värden. Nu blir pixel (-1, -1) korrekt pixel (w-1, h-1). Om du vill ta det absoluta värdet av värden som är mindre än noll istället för att avkorta det, använd den här koden istället: Scientist and Engineers Guide to Digital Signal Processing av Steven W. Smith, Ph. D. Kapitel 24: Linjär bildbehandlingskonvolution genom separabilitet Detta är en teknik för snabb konvolvering, så länge som PSF-enheten är separerbar. En PSF sägs vara separerbar om den kan brytas in i två endimensionella signaler: en vertikal och ett horisontellt projektion. Figur 24-5 visar ett exempel på en separerbar bild, den fyrkantiga PSF. Specifikt är värdet för varje pixel i bilden lika med motsvarande punkt i det horisontella projektionen multiplicerat med motsvarande punkt i det vertikala utsprånget. I matematisk form: där x r, c är den tvådimensionella bilden, och vert r amp horz c är de endimensionella projektionerna. Självklart uppfyller de flesta bilderna inte detta krav. Till exempel är pillboxen inte separerbar. Det finns emellertid ett oändligt antal separerbara bilder. Detta kan förstås genom att generera godtyckliga horisontella och vertikala utsprång och hitta den bild som motsvarar dem. Exempelvis illustrerar Fig. 24-6 detta med profiler som är dubbelsidiga exponentialer. Bilden som motsvarar dessa profiler hittas sedan från ekv. 24-1. När bilden visas, visas bilden som en diamantform som exponentiellt sönderfaller till noll då avståndet från ursprunget ökar. I de flesta bildbehandlingsuppgifter är den perfekta PSF cirkulärt symmetrisk. såsom pillboxen. Även om digitaliserade bilder vanligtvis lagras och bearbetas i rektangulärt format i rader och kolumner, är det önskvärt att ändra bilden på samma sätt i alla riktningar. Detta väcker frågan: Finns det en PSF som är cirkulärt symmetrisk och separerbar Svaret är ja, men det finns bara en, den gaussiska. Såsom framgår av Fig. 24-7 har en tvådimensionell gaussisk bild projektioner som också är gaussier. Bild - och projektionen Gaussianer har samma standardavvikelse. För att sammanfoga en bild med en separerbar filterkärna, sammanfoga varje rad i bilden med den horisontella projektionen. vilket resulterar i en mellanbild. Därefter sammanfogar varje kolumn med denna mellanbild med den vertikala projektionen av PSF. Den resulterande bilden är identisk med den direkta fällningen av originalbilden och filterkärnan. Om du vill, samla kolumnerna först och sedan raderna blir resultatet detsamma. Konfolutionen av en N-gånger N-bild med en M-gånger-M-filterkärna kräver en tid som är proportional med N 2 M 2. Med andra ord beror varje pixel i utmatningsbilden på alla pixlar i filterkärnan. I jämförelse kräver sammandragning genom separerbarhet endast en tid som är proportionell mot N2M. För filterkärnor som är hundratals pixlar breda, kommer denna teknik att minska genomförandetiden med en hundratals faktor. Saker kan bli ännu bättre. Om du är villig att använda en rektangulär PSF (Fig. 24-5) eller en dubbelsidig exponentiell PSF (Fig. 24-6), är beräkningarna ännu effektivare. Detta beror på att de endimensionella omvälvningarna är det glidande medelfiltret (kapitel 15) respektive det dubbelriktade polsparfiltret (kapitel 19). Båda dessa ettdimensionella filter kan snabbt utföras genom rekursion. Detta resulterar i en bildkonvolutions tid proportionell med endast N 2. Fullständigt oberoende av PSF: s storlek. Med andra ord kan en bild samlas med så stor en PSF som behövs, med bara några heltalsoperationer per bildpunkt. Till exempel kräver konvertering av en 512 x 512 bild endast några hundra millisekunder på en persondator. Det är snabbt. Inte som formen på dessa två filterkärnor. Konvolvera bilden med en av dem flera gånger för att approximera en Gaussian PSF (garanterad av Central Limit Theorem, Kapitel 7). Det här är bra algoritmer, som klarar av att lyckas med misslyckande käkar. De är väl värda att komma ihåg. Forskaren och ingenjörernas guide till digital signalbehandling av Steven W. Smith, Ph. D. Kapitel 6: Konvolution Låt oss sammanfatta det här sättet att förstå hur ett system ändrar en insignal till en utsignal. För det första kan ingångssignalen sönderdelas till en uppsättning impulser, vilka var och en kan betraktas som en skalad och skiftad deltafunktion. För det andra är utmatningen som resulterar från varje impuls en skalad och skiftad version av impulsresponsen. För det tredje kan den totala utsignalen hittas genom att addera dessa skalade och skiftade impulsresponser. Med andra ord, om vi känner till ett systemimpulssvar, så kan vi beräkna vad resultatet kommer att vara för en eventuell ingångssignal. Det betyder att vi vet allt om systemet. Det finns inget mer som kan läras om en linjär systemegenskaper. (Men i senare kapitel kommer vi att visa att denna information kan representeras i olika former). Impulssvaret går med ett annat namn i vissa applikationer. Om systemet betraktas är ett filter. impulssvaret kallas filterkärnan. faltkärnan. eller helt enkelt, kärnan. Vid bildbehandling kallas impulssvaret punktspridningsfunktionen. Medan dessa termer används på något annorlunda sätt, menar de alla samma sak, den signal som produceras av ett system när ingången är en deltafunktion. Konvolution är en formell matematisk operation, precis som multiplikation, addition och integration. Addition tar två siffror och producerar ett tredje nummer. medan konvolveringen tar två signaler och producerar en tredje signal. Konvolution används i matematiken i många områden, till exempel sannolikhet och statistik. I linjära system används konvoltering för att beskriva förhållandet mellan tre signaler av intresse: ingångssignalen, impulsresponsen och utsignalen. Figur 6-2 visar notationen när konvolvering används med linjära system. En ingångssignal, x n, går in i ett linjärt system med ett impulsrespons, h n, vilket resulterar i en utsignal, y n. I ekvationsform: x n h n y n. Uttryckt i ord är ingångssignalen som är sammankopplad med impulssvaret lika med utsignalen. Precis som tillsats representeras av plus,, och multiplikation av korset, är tiden convolution representerad av stjärnan. Det är olyckligt att de flesta programmeringsspråk också använder stjärnan för att indikera multiplikation. En stjärna i ett datorprogram betyder multiplikation, medan en stjärna i en ekvation betyder konvolvering. Figur 6-3 visar konvolution som används för lågpass och högpassfiltrering. Exempel på ingångssignalen är summan av två komponenter: tre cykler av en sinusvåg (representerande en högfrekvens) plus en långsamt stigande ramp (sammansatt av låga frekvenser). I (a) är impulsresponsen för lågpassfiltret en jämn båge, vilket resulterar i att endast den långsamt växande rampvågformen överförs till utgången. På samma sätt tillåter högpassfiltret, (b) endast den snabbare byta sinusformen att passera. Figur 6-4 illustrerar ytterligare två exempel på hur konvolvering används för att bearbeta signaler. Den inverterande dämparen, (a), sänder signalet uppifrån och ned och minskar dess amplitud. Det diskreta derivatet (även kallat den första skillnaden) som visas i (b) resulterar i en utsignal relaterad till insignalens lutning. Notera längderna av signalerna i fig. 6-3 och 6-4. Ingångssignalerna är 81 prov långa, medan varje impulsrespons består av 31 prov. I de flesta DSP-applikationer är ingångssignalen hundratals, tusentals eller till och med miljontals prover i längd. Impulssvaret är vanligtvis mycket kortare, säg några punkter till några hundra punkter. Matematiken bakom convolution begränsar inte hur länge dessa signaler är. Det anger emellertid längden på utsignalen. Längden på utsignalen är lika med längden på ingångssignalen plus längden på impulsresponset, minus en. För signalerna i fig. 6-3 och 6-4, varje utsignal är: 81 31 - 1 111 prover långa. Ingångssignalen går från prov 0 till 80, impulssvaret från prov 0 till 30 och utgångssignalen från prov 0 till 110. Nu kommer vi till den detaljerade matematiken av konvolvering. Som används i digital signalbehandling kan konvolvering förstås på två separata sätt. Den första ser på konvolvering ur ingångssignalens synvinkel. Detta innebär att analysera hur varje prov i ingångssignalen bidrar till många punkter i utsignalen. Det andra sättet ser på konvolution från utgångssignalens synvinkel. Detta undersöker hur varje prov i utsignalen har fått information från många punkter i ingångssignalen. Tänk på att dessa två perspektiv är olika sätt att tänka på samma matematiska operation. Den första synvinkeln är viktig eftersom den ger en begreppsmässig förståelse för hur konvolvering avser DSP. Den andra synpunkten beskriver konvolutionsmatematiken. Detta kännetecknar en av de svåraste uppgifterna du kommer att stöta på i DSP: göra din begreppsmässiga förståelse passformen med matematikens skymt som används för att kommunicera idéerna.
No comments:
Post a Comment