Modérateurs: Modération Forum Home-Cinéma, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Driggs et 37 invités

Toutes les solutions à base d'ordinateur (PC, Mac, Linux...)

[MPC] Filtre(s) Pixels shaders ...

Message » 14 Mar 2006 18:25

Ok, donc c'est le DVD qui "fait l'erreur", en gros : il ne devrait pas utiliser les valeurs 0->16 ... Mais il les utilise ...
Donc ne risque t'on pas de deterriorer l'image si on remappe sur 0-255 ?!
( Heureusement que c'est moi qui ai commencé ce post, on est en train de bien le faire derriver ... lol ;) )
Seb.26
 
Messages: 3256
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 14 Mar 2006 19:05

Je suis pas assez à fond pour suivre, mais bon courage. En espérant que tu es des réponses sur Doom9 :wink:

A+
artefact
 
Messages: 676
Inscription Forum: 18 Mai 2003 10:24
  • offline

Message » 14 Mar 2006 19:08

artefact a écrit:Je suis pas assez à fond pour suivre, mais bon courage. En espérant que tu es des réponses sur Doom9 :wink:
A+

@++ ... J'espère arriver à mener à bien mon projet ... :wink: :wink:
Seb.26
 
Messages: 3256
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 14 Mar 2006 19:48

Seb.26 a écrit:Ok, donc c'est le DVD qui "fait l'erreur", en gros : il ne devrait pas utiliser les valeurs 0->16 ... Mais il les utilise ...

Les valeurs <16 et >235 servent à masquer des artéfacts de compression et ne doivent pas apporter d'informations visuelles. Elles sont visibles uniquement si on ne fait pas de remapping car le PC est en 0-255. Pour le lecteur de DVD de salon, soit il fait tout seul le remapping sur 0-255, soit il faut modifier la luminosité/contraste du diffuseur. Sur le PC, on lui fait faire le remapping en sortant du RVB32.
Si j'ai bien compris :)
Halfcat fr
 
Messages: 210
Inscription Forum: 05 Déc 2002 12:03
  • offline

Message » 15 Mar 2006 12:02

Ok ... Merci pour les infos ... :P

Halfcat fr a écrit:Sur le PC, on lui fait faire le remapping en sortant du RVB32.
Si j'ai bien compris :)

Ou avec le filtre en PixelsShaders en YU2 ... :wink:
Seb.26
 
Messages: 3256
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 16 Mar 2006 18:58

Hello !
Je me suis permis de partir de ton filtre EdgeSharpen :oops: .
J'ai simplement implémenté pour la détection de contour un filtre de Prewitt a la place du filtre de Roberts (théoriquement moins sensible au bruit) et mettre qq explications (ça motivera peut-être qq vocation :wink:).
Tip : Passer de EdgeSharpen à EdgeSharpen2 (avec rouge activé) permet de voir la différence de détection :P .
EdgeSharpen2 v1.1
Code: Tout sélectionner
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

#define NbPixel      1

#define Edge_threshold       0.2

#define Sharpen_val0       2.0
#define Sharpen_val1       0.125

float4 main(float2 tex : TEXCOORD0) : COLOR
{
// taille de NbPixel pixels
float dx = NbPixel/width;
float dy = NbPixel/height;
float4 Res = 0;

// Détection de contour par Prewitt
   // récuppération des 9 points
   //   [ 1, 2, 3 ]
   //   [ 4, 0, 5 ]
   //   [ 6, 7, 8 ]
   float4 c0 = tex2D(s0, tex);
   float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
   float4 c2 = tex2D(s0, tex + float2(0,-dy));
   float4 c3 = tex2D(s0, tex + float2(dx,-dy));
   float4 c4 = tex2D(s0, tex + float2(-dx,0));
   float4 c5 = tex2D(s0, tex + float2(dx,0));
   float4 c6 = tex2D(s0, tex + float2(-dx,dy));
   float4 c7 = tex2D(s0, tex + float2(0,dy));
   float4 c8 = tex2D(s0, tex + float2(dx,dy));

   // Calcul des 3 vecteurs dérivé (hor,vert, diag1, diag2)
   float4 delta1 = (c6+c4+c1-c3-c5-c8);
   float4 delta2 = (c4+c1+c2-c5-c8-c7);
   float4 delta3 = (c1+c2+c3-c8-c7-c6);
   float4 delta4 = (c2+c3+c5-c7-c6-c4);

   // calcul du Prewitt
   float value = length(abs(delta1) + abs(delta2) + abs(delta3) + abs(delta4))/6;

// Si c'est un contour (vector lenght > Edge_threshold) => filtre de sharpen
   if(value > Edge_threshold )
   {
      Res = c0 * Sharpen_val0 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * Sharpen_val1 ;
      // Pour voir les contour en rouge ...
      //Res = float4( 1.0, 0.0, 0.0, 0.0 );

      return Res;
   }
   else
      return c0;
}

Rem : çà parait évident mais le nbpixel est un nombre entier (1 ou 2 à priori).
Rem2 : je suis en train de tester d'autre algo mais pas facile de bien voir le résultat (cad si çà va être mieux en visiopnnage ou pas) juste sur un écran de PC (mon HTPC est en plein redesign)...

Edit : petite modif du code sinon passe pas en PS2.0 si nbpixel = 2 :roll: !!!!
Dernière édition par jim.ro le 31 Mar 2006 9:46, édité 1 fois.
jim.ro
 
Messages: 204
Inscription Forum: 14 Jan 2003 14:57
Localisation: Pas loin de Disney !
  • offline

Message » 16 Mar 2006 23:15

Merci pour la communauté :D

Ca parrait pas compliqué avec les commentaires et je m'y mettrais bien, mais y-a-t-il un tuto qui traine avec des explcations de bases et où trouvez-vous les algo de calcul ?

Merci encore A+
artefact
 
Messages: 676
Inscription Forum: 18 Mai 2003 10:24
  • offline

Message » 17 Mar 2006 11:19

jim.ro a écrit:Hello !
Je me suis permis de partir de ton filtre EdgeSharpen :oops: .


Excellente initiative ... de plus, je serais bien mal placé pour dire quoi que ce soit, je suis moi même parti des filtres inclus avec MPC ... :wink: :oops:

jim.ro a écrit:J'ai simplement implémenté pour la détection de contour un filtre de Prewitt a la place du filtre de Roberts (théoriquement moins sensible au bruit) et mettre qq explications (ça motivera peut-être qq vocation :wink:).

Oui, je commencais un peu à deseperer d'être le seul interressé par les PS ... :cry:

PS: Question subsidiaire : Tu code ? ... En C++ ? ... Tu connais Direct/X ? ... :wink:
Seb.26
 
Messages: 3256
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 17 Mar 2006 11:37

Salut,

Je suis encore novice dans le domaine, j'ai démarré pour la première fois mon PCHC hier, installé WXP + SP2 + pack post-SP2 fr ainsi que MPC dernière version.

Pour le reste :

A7N8X-E Deluxe
CPU 2400+ à 45°C max
2 x 512 Infineon @ 166 Mhz en dual channel, 3-3-3-8
Nvidia GF6200 fanless + drivers 84.20 + Purevideo dernière version
Carte son Trust 714DX en sortie coax vers Rotel RSP-1068 + RMB 1075

La carte graphique envoie le bureau Windows vers un 17" et comme deuxième moniteur, un VP Sharpvision Z9000 1280 x 720 en 60Hz.

MPC est configuré en WM9 renderless, bicubic a=-0.6 (PS2.0).


J'ai ajouté les shaders proposés par ce thread, via le menu edit, ensuite j'ai utilisé combine et mis le edgesharpen suivi du remap. L'image est superbe, par contre mon gros souci, c'est que ça saccade avec le edgeshapen, la charge processeur est donnée pour 80% !!!!

C'est là que je ne comprends rien car les autres utilisateurs donnent des valeurs de 15-30%. Si j'enlève les shaders complètement je tombe à 50% de charge, et lorsque je passe en fenêtré sans resize c'est 30-40%. Bref on dirait qu'il n'y a pas de prise en charge matérielle des shaders. Pourtant dans les propriétés de Purevideo, lorsque ça streame, j'ai bien la case "accélération matérielle" qui est cochée et je vois un débit de +/- 6 Mops.

Lorsqu'enfin je quitte MPC, le PC plante avec un écran bleu "bad pool caller" ou autres. J'ai aussi parfois le son qui d'un seul coup déconne complètement, les dialogies sont robotisés et étriqués et il y a plein de basses.


Donc si qqn avait une idée pour moi ce serait sympa. Je précise que j'ai tout fraîchement installé, donc c'est nickel de ce côté.

Merci pour vos lumières !!! :wink:
arjcorms
 
Messages: 405
Inscription Forum: 13 Aoû 2002 12:00
Localisation: Genappe
  • offline

Message » 17 Mar 2006 11:38

Merci!
Pour les algos, c'est "cours de traitement d'image" :wink:
Le problème c'est que les shader 2.0 sont limité à 64 opérations de calcul... et on va vite au bout.
Autrement, oui, je code (C, C++, C#, ASP : 13 ans dans une SSII :mdr: ) mais de moins en moins :cry:

Sinon, qq à comparé le résultat ??
jim.ro
 
Messages: 204
Inscription Forum: 14 Jan 2003 14:57
Localisation: Pas loin de Disney !
  • offline

Message » 17 Mar 2006 11:58

Autre algo :wink: : on soustrait une version floutée à l'image originale !
SharpenFlou v1.0 :
Code: Tout sélectionner
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

float4 main( float2 tex : TEXCOORD0 ) : COLOR
{
float dx = one_over_width;
float dy = one_over_height;

// récuppération de la matrice de 9 points
//   [ 1, 2 , 3 ]
//   [ 4,ori, 5 ]
//   [ 6, 7 , 8 ]

   float4 ori = tex2D(s0, tex);
   float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
   float4 c2 = tex2D(s0, tex + float2(0,-dy));
   float4 c3 = tex2D(s0, tex + float2(dx,-dy));
   float4 c4 = tex2D(s0, tex + float2(-dx,0));
   float4 c5 = tex2D(s0, tex + float2(dx,0));
   float4 c6 = tex2D(s0, tex + float2(-dx,dy));
   float4 c7 = tex2D(s0, tex + float2(0,dy));
   float4 c8 = tex2D(s0, tex + float2(dx,dy));

// calcul image floue (filtre gaussien)
float  multipliers[9]=
            {1,2,1,
             2,4,2,
             1,2,1};

float4 total=0;
   total +=  c1 * multipliers[0];
   total +=  c2 * multipliers[1];
   total +=  c3 * multipliers[2];
   total +=  c4 * multipliers[3];
   total +=  ori * multipliers[4];
   total +=  c5 * multipliers[5];
   total +=  c6 * multipliers[6];
   total +=  c7 * multipliers[7];
   total +=  c8 * multipliers[8];

   // 1/(1+2+1+2+4+2+1+2+1) = 1/ 16 = .0625
   total *= 0.0625f;

// soustraction de l'image flou à l'image originale
   total = 2*ori - total;
//return ori;
   return total;
}


A vos tests !!
jim.ro
 
Messages: 204
Inscription Forum: 14 Jan 2003 14:57
Localisation: Pas loin de Disney !
  • offline

Message » 17 Mar 2006 22:14

Personne pour mon problème ? On dirait que la GF6200 ne s'occupe pas en hard des PS, ce n'est pas normal je pense ?
arjcorms
 
Messages: 405
Inscription Forum: 13 Aoû 2002 12:00
Localisation: Genappe
  • offline

Message » 17 Mar 2006 22:37

Salut, j'ai pas trop testé mais ca fonctionne chez moi.
J'ai quand meme une question serait il possible de faire un Lanczos par le PS ?
Vanessam
 
Messages: 399
Inscription Forum: 18 Mai 2004 16:38
Localisation: Eure
  • offline

Message » 17 Mar 2006 23:10

J'ai commencé a regarder le resize (surtout pour le lume sharpen) mais c'est beaucoup plus compliqué :(
Ca peut pas être fait par les scripts comme ceux là (ici 1 pixel destination=1 pixel source + calcul) mais c'est à intégrer comme le bicubic dans les sources (donc recompiler une version).
Je vais essayer de voir avec les source de ffdshow....(si j'arrive à trouver assez de temps :wink: ).
pour arjcorms
Pour la 6200, elle a normalement 3 vertex et 4 pixel shader et même des shader version 3.0 donc normalement pas de problèmes. (même si c'est en AGP ??? Tu as bien installé les drivers nforce2???) Tu as bien la DLL dx9_27.dll dans le dossier de MPC ??
Si les shader se charge bien, (mpc en fenêtre, shader->edit) quand tu choisi un script il y a un petit message en dessous de la video qui dit "xxx bien chargé"...
jim.ro
 
Messages: 204
Inscription Forum: 14 Jan 2003 14:57
Localisation: Pas loin de Disney !
  • offline

Message » 18 Mar 2006 14:24

Lorsque je décomprime le zip de MPC je n'obtiens rien d'autre qu'un fichier .exe et par la suite un .ini après un premier démarrage. Pas de .dll Ma carte est en effet en AGP.

Je n'obtiens pas de message lorsque les PS chargent ... :cry:
arjcorms
 
Messages: 405
Inscription Forum: 13 Aoû 2002 12:00
Localisation: Genappe
  • offline


Retourner vers Matériel PC Home-cinéma