Bildderivat

Bildderivator kan beräknas genom att använda små faltningsfilter med storleken 2 × 2 eller 3 × 3, såsom Laplician , Sobel , Roberts och Prewitt - operatorerna . En större mask ger dock i allmänhet en bättre approximation av derivatan och exempel på sådana filter är Gaussiska derivator och Gabor-filter . Ibland behöver högfrekvent brus tas bort och detta kan införlivas i filtret så att den Gaussiska kärnan kommer att fungera som ett bandpassfilter. Användningen av Gabor-filter i bildbehandling har motiverats av några av dess likheter med uppfattningen i det mänskliga visuella systemet.

Pixelvärdet beräknas som en faltning

där är derivatans kärna och är pixelvärdena i ett område av bilden och är operatorn som utför faltningen .

Sobel-derivat

Derivatkärnorna, kända som Sobel-operatorn , definieras enligt följande, för riktningarna och

där här betecknar den 2-dimensionella faltningsoperationen .

Denna operator är separerbar och kan dekomponeras som produkterna av en interpolations- och en differentieringskärna, så att till exempel kan skrivas som

Farid och Simoncelli derivat

Farid och Simoncelli föreslår att använda ett par kärnor, en för interpolation och en annan för differentiering (jämför med Sobel ovan). Dessa kärnor, med fasta storlekar 5 x 5 och 7 x 7, är optimerade så att Fouriertransformen approximerar deras korrekta derivatförhållande.

I Matlab -koden är det så kallade 5-tappsfiltret

           
         
          k  =  [  0,030320  0,249724  0,439911  0,249724  0,030320  ];  d  =  [  0,104550  0,292315  0,000000  -  0,292315  -  0,104550  ];  d2  =  [  0,232905  0,002668  -  0,471147  0,002668  0,232905  ]; 

Och 7-tappsfiltret är det

                
             
             k  =  [  0,004711  0,069321  0,245410  0,361117  0,245410  0,069321  0,004711  ];  d  =  [  0,018708  0,125376  0,193091  0,000000  -  0,193091  -  0,125376  -  0,018708  ];  d2  =  [  0,055336  0,137778  -  0,056554  -  0,273118  -  0,056554  0,137778  0,055336  ]; 

Som ett exempel kan första ordningens derivator beräknas i det följande med Matlab för att utföra faltningen

 
       
        Iu  =  conv2  (  d  ,  k  ,  im  ,  'samma'  );  % derivata vertikalt (wrt Y)  Iv  =  conv2  (  k  ,  d  ,  im  ,  'samma'  );  % derivata horisontellt (wrt X) 

Det noteras att Farid och Simoncelli har härlett första derivata koefficienter som är mer exakta jämfört med de som tillhandahålls ovan. De senare överensstämmer dock med andraderivatan interpolator och är därför bättre att använda om både första- och andraderivatan söks. I det motsatta fallet, när endast den första derivatan önskas, bör de optimala första derivatan koefficienter användas; mer information finns i deras tidning.

Har derivat

Derivatfilter baserade på godtyckliga kubiska splines presenterades av Hast. Han visade hur både första och andra ordningens derivator kan beräknas mer korrekt med kubiska eller trigonometriska splines. Effektiva derivatfilter måste ha en udda längd så att derivatan beräknas för den centrala pixeln. Alla kubiska filter är dock monterade över 4 provpunkter, vilket ger ett centrum som faller mellan pixlar. Detta löses genom en dubbelfiltreringsmetod som ger filter i storleken 7 x 7. Tanken är att först filtrera genom interpolation så att det interpolerade värdet mellan pixlar erhålls, varefter proceduren upprepas med hjälp av ett derivatfilter, där mittvärdet nu faller på pixelcentrum. Detta kan lätt bevisas av den associativa lagen för faltning

Därför faltningskärnan för att beräkna derivatan med en interpolerande kärna och en derivata kärna blir

Tänk också på att faltning är kommutativ, så att ordningen på de två kärnorna inte spelar någon roll och det är också möjligt att infoga en andra ordningens derivata såväl som en första ordningens derivata kärna. Dessa kärnor är härledda från det faktum att vilken splineyta som helst kan passas över en kvadratisk pixelregion, jämfört med Bezier-ytor . Hast bevisar att en sådan yta kan utföras som en separerbar veckning

där är splinebasmatrisen, och är vektorer som innehåller variablerna och , såsom

Konvolutionskärnorna kan nu ställas in på

Första ordningens derivator vid den centrala pixeln beräknas därför som

och

På samma sätt, med andra ordningens derivata kärnor är

och

Det kubiska splinefiltret utvärderas i dess mitt och därför

På samma sätt blir första ordningens derivator

Och på ett liknande sätt är andra ordningens derivator

Vilket kubiskt filter som helst kan tillämpas och användas för att beräkna bildderivaten med hjälp av ovanstående ekvationer, såsom Bézier , Hermite eller B-splines .

Exemplet nedan i Matlab använder Catmull-Rom spline för att beräkna derivatorna

 
    00 000  
  
  0
  
  
      
       M  =  [  1  ,  -3  ,  3  ,  -1  ;  _  _  -  1  ,  4  ,  -  5  ,  2  ;  ,  1  ,  ,  -  1  ;  ,  ,  2  ,  ]  *  0,5  ;  u  =  [  0,125  ;  0,25  ;  0,5  ;  1  ];  upp  =  [  0,75  ;  1  ;  1  ;  ];  d  =  upp  '*  M  ;  k  =  u  '*  M  ;  Iu  =  conv2  (  conv  (  d  ,  k  ),  conv  (  k  ,  k  ),  im  ,  'samma'  );  % vertikal derivata (wrt Y)  Iv  =  conv2  (  conv  (  k  ,  k  ),  conv  (  d  ,  k  ),  im  ,  'samma'  );  % horisontell derivata (wrt X) 

Andra tillvägagångssätt

Styrbara filter kan användas för att beräkna derivator. Dessutom föreslår Savitzky och Golay en minsta kvadraters polynomutjämningsmetod, som skulle kunna användas för att beräkna derivator och Luo et al diskuterar detta tillvägagångssätt mer i detalj. Scharr visar hur man skapar derivatfilter genom att minimera felet i Fourier-domänen och Jähne et al diskuterar mer i detalj principerna för filterdesign, inklusive derivatfilter.

externa länkar

  • derivative5.m Farid och Simoncelli: 5-Tap 1:a och 2:a diskreta derivator.
  • derivative7.m Farid och Simoncelli: 7-Tap 1:a och 2:a diskreta derivator
  • kernel.m Hast: 1:a och 2:a diskreta derivator för Cubic splines, Catmull-Rom splines, Bezier splines, B-Splines och Trigonometric splines.