home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 2010 Software/Programs / PCGuia_programas.iso / Software / Utils / SPlayer / SPlayerSetup.exe / splayer.exe / 2052 / FILE / 716 < prev    next >
Encoding:
Text File  |  2009-12-01  |  1.7 KB  |  70 lines

  1. sampler s0 : register(s0);
  2. float4 p1 : register(c1);
  3.  
  4. #define dx (p1[0])
  5. #define dy (p1[1])
  6.  
  7. float4 main( float2 tex : TEXCOORD0 ) : COLOR
  8. {
  9.     // definition des pixels : original, floutΘ, corigΘ, final
  10.     float4 ori;
  11.     float4 flou;
  12.     float4 cori;
  13.     float4 final;
  14.  
  15.     // rΘcuppΘration de la matrice de 9 points
  16.     // [ 1, 2 , 3 ]
  17.     // [ 4,ori, 5 ]
  18.     // [ 6, 7 , 8 ]
  19.  
  20.     ori = tex2D(s0, tex);
  21.     float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
  22.     float4 c2 = tex2D(s0, tex + float2(0,-dy));
  23.     float4 c3 = tex2D(s0, tex + float2(dx,-dy));
  24.     float4 c4 = tex2D(s0, tex + float2(-dx,0));
  25.     float4 c5 = tex2D(s0, tex + float2(dx,0));
  26.     float4 c6 = tex2D(s0, tex + float2(-dx,dy));
  27.     float4 c7 = tex2D(s0, tex + float2(0,dy));
  28.     float4 c8 = tex2D(s0, tex + float2(dx,dy));
  29.  
  30.     // calcul image floue (filtre gaussien)
  31.     // pour normaliser les valeurs, il faut diviser par la somme des coef
  32.     // 1/(1+2+1+2+4+2+1+2+1) = 1/ 16 = .0625
  33.     flou = (c1+c3+c6+c8 + 2*(c2+c4+c5+c7)+ 4*ori)*0.0625;
  34.  
  35.     // soustraction de l'image flou α l'image originale
  36.     cori = 2*ori - flou;
  37.  
  38.     // dΘtection des contours
  39.     float delta1;
  40.     float delta2;
  41.     float value;
  42.  
  43.     // par filtre de sobel
  44.     // Gradient horizontal
  45.     //   [ -1, 0 ,1 ]
  46.     //   [ -2, 0, 2 ]
  47.     //   [ -1, 0 ,1 ]
  48.     delta1 =  (c3 + 2*c5 + c8)-(c1 + 2*c4 + c6);
  49.  
  50.     // Gradient vertical
  51.     //   [ -1,- 2,-1 ]
  52.     //   [  0,  0, 0 ]
  53.     //   [  1,  2, 1 ]
  54.     delta2 = (c6 + 2*c7 + c8)-(c1 + 2*c2 + c3);
  55.  
  56.     // calcul
  57.     value = sqrt( mul(delta1,delta1) + mul(delta2,delta2) ) ;
  58.  
  59.     if( value >.3 ) {
  60.         // si contour, sharpen
  61.         #define Sharpen_val0       2.0
  62.         #define Sharpen_val1       0.125
  63.         final = ori*2 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * 0.125 ;
  64.         //final= float4(1,0,0,0);
  65.         return final;
  66.     }
  67.  
  68.     // sinon, image corrigΘe
  69.     return cori;
  70. }