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

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

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

Message » 07 Mar 2008 15:42

Sur un ecran de meilleur qualite les bons reglages de mon BlurAndSharp sont (ou semblent etre)

#define seuilFlou (3./255.)
#define seuilLumaSharpen 0.6

rappel: plus vous augmenter les valeurs et plus le filtre est importent (ou floute plus, on accentue plus)

Rappel: mon but est d'etre meilleur que le sharpen a 0.65.
Avec les valeurs ci-dessus ca a l'air d'etre mieux.
chambolle
 
Messages: 628
Inscription Forum: 14 Nov 2006 10:52
  • offline

Message » 07 Mar 2008 16:17

Hum ... et pourquoi pas un sharpen limité aux contours dont l'effet de sharp serait proportionnel à la "force" du contour ? ... ça eviterait déjà au moins les clignotements quand une scène est proche des seuils ... ;)
Seb.26
 
Messages: 3255
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 07 Mar 2008 16:59

Seb.26 a écrit:Hum ... et pourquoi pas un sharpen limité aux contours dont l'effet de sharp serait proportionnel à la "force" du contour ? ... ça eviterait déjà au moins les clignotements quand une scène est proche des seuils ... ;)


Ben c'est ce que j'avais essaye de faire avec l'un de mes premiers filtres.
Et c'est ce que j'essaie toujours de faire (je pourrais moduler le filtrage). Mon idee est distinction de 3 zones: celles qu'on accentue, celles qu'on ne touche pas, celle qu'on floute.

Le probleme des contours est que c'est pas simple dans la realite, parce que les contours sont changeants en video et on detecte mal les contours: le EE est du a l'erreur sur les bords et c'est pas facile de faire un degrade en regardant juste un pixel. Le bord ne fait pas un pixel c'est ca la galere. C'est comme le debanding. On est proche des limites techniques tres locales ici, AMHA

le sharpen simple donne un bon resultat en video et c'est tres simple comme idee.

On a donc du mal a eviter les changements abruptes (je parle visuellement). De tres pres cela peu etre tres visible, de plus loin c'est mieux.
Pour faire un parallele c'est comme le bruit: de loin ca donne de la nettete, de pres c'est nul.
Le probleme de la video est qu'il faut trouver un truc tres tres robuste par rapport aux technos d'image et en plus super rapide.

Si tu y arrive a modifier mon idee alors je suis preneur.
Si ca tient en shader 2 c'est encore mieux.
J'ai un filtre plus complexe en shader 3, mais je perds un peu de fluidite avec et le resultat n'est pas globalement meilleur que mon filtre.

Petite remarque: on n'a pas de vision sensible en dehors de la vision centrale. Faites l'experience suivante: marcher dans un couloir avec des posters sur les murs mais regarder uniquement devant vous: vous ne pouvez pas lire les posters. Pareil en voiture: fixer la voiture devant vous: vous ne pouvez lire ni les pubs ni les panneaux.
Mais notre oeil est sensible au mouvement, donc des que l'on a l'oeil attire on change notre endroit de fixation. Donc les erreurs de detection de contours, les changements de luminosite brutaux nous attire l'oeil, le flou par contre nous va tres bien
chambolle
 
Messages: 628
Inscription Forum: 14 Nov 2006 10:52
  • offline

Message » 07 Mar 2008 18:09

chambolle a écrit:Ben c'est ce que j'avais essaye de faire avec l'un de mes premiers filtres.
Et c'est ce que j'essaie toujours de faire (je pourrais moduler le filtrage). Mon idee est distinction de 3 zones: celles qu'on accentue, celles qu'on ne touche pas, celle qu'on floute.

Bah justement, l'idée c'est de ne pas avoir de seuil, car les seuils, ça fait des escaliers, à la place des seuils, il faudrait mettre des pentes ... :wink:
Seb.26
 
Messages: 3255
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 07 Mar 2008 19:32

chambolle a écrit:J'ai un filtre plus complexe en shader 3, mais je perds un peu de fluidite avec et le resultat n'est pas globalement meilleur que mon filtre.

J'ai lu quelque part que quand on programme des PS, il faut éviter d'allouer trop de variables sous peine de pénalités en terme de perf.

Exemple tiré d'un de tes derniers codes:

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));

float4 sumabs2=((ori-c1)*(ori-c1) + (ori-c2)*(ori-c2) + (ori-c3)*(ori-c3) +(ori-c4)*(ori-c4) + (ori-c5)*(ori-c5) + (ori-c6)*(ori-c6) + (ori-c7)*(ori-c7) + (ori-c8 )*(ori-c8 ))/8.;

Qu'il faudrait modifier en :

float4 sumabs2=((tex2D(s0, tex)-tex2D(s0, tex + float2(-dx,-dy)))*(tex2D(s0, tex)-tex2D(s0, tex + float2(-dx,-dy))) + etc., etc.

Parait-il, les gains sont spectaculaires. A voir sur ton shader3 ?
oli2
 
Messages: 1038
Inscription Forum: 09 Oct 2004 19:55
Localisation: Dijon
  • offline

Message » 07 Mar 2008 22:49

Hello les codeurs oufs :wink:

L'un d'entre-vous peut-il m'insérer une condition de hauteur sur ce script ?

Je ne veux l'appliquer que si la hauteur est <720

J'imagine qu'il y a un
Code: Tout sélectionner
if (height < 720)
else


à mettre qque part beut ouère ?

Code: Tout sélectionner
sampler s0 : register(s0);

float4 main(float2 tex : TEXCOORD0) : COLOR
{
float4 c0=tex2D(s0,tex);
// r=c0[0], g=c0[1], b=c0[2]
// RGB [16,235] to YUV: 601 mode (128 is not added to Cb and Cr)
float y=0.299*c0[0] + 0.587*c0[1] + 0.114*c0[2];
float Cb=-0.172*c0[0] -0.339*c0[1] +0.511*c0[2];
float Cr=0.511*c0[0] -0.428*c0[1] -0.083*c0[2];

// YUV to RGB [16,235]: 709 mode (Cb and Cr are 128 less)
float r=y+1.540*Cr;
float g=y-0.459*Cr-0.183*Cb;
float b=y+1.816*Cb;

float4 ret=float4(r,g,b,0);

return ret;
}


Merci d'avance.

@+,
Xavier.

PS: chambolle je vais tester ton sharpen/deconvolution
tobal
 
Messages: 6118
Inscription Forum: 13 Sep 2001 2:00
Localisation: Niort
  • offline

Message » 08 Mar 2008 0:03

chambolle a écrit:L'idee est d'avoir un faible sharpen qui ne fait pas de EE et d'eviter les probblemes du type banding. Je reste sur mon idee: je floute les trucs tres tres proche, j'ameliore les contours mais legerement et pas tous.


je viens de tester avec des mires .BMP avec EVR(sans lockback pour que ce soit en temps reel)

bah......errrrr, quel interet de FLOUTER des pixels ? :D

j'ai un peu joue avec les 2 valeurs, le sharpen 0.65 est tjs mieux je trouve.

meme avec 0/50000 comme valeur c'est tjs pas trop ca.

a vrai dire l'idee ca serait -je pense- d'ameliorer l'algo en le passant en PS3 avec des calculs dans tous les sens pour ameliorer son rendu...mais bon apparemment c'est Haali qui l'a code ce script, et Haali c'est juste lui qui a code une bonne partie du renderer VMR9 et les resizes PS de MPC :o

mais flouter des trucs, rendre des trucs "dynamiques" par rapport au film......je doute que ca puisse etre naturel...ou faudrait que le script bosse avec un cache de frames en avance.

c'est comme le plugin anti-flicker de VDub.

il marche tres bien si on prend le temps de le regler, ca fait des miracles meme :o

MAIS a chaque changement de scene c'est la cata, et un gars l'a modde depuis pour qu'il detecte les changements de scenes.....je ne l'ai pas reteste.

tout ca pour dire que les trucs variables, c'est rare que ce soit naturel quand on est en temps reel pur ?!

ou alors faut regler un compresseur/limiteur comme en audio :mdr:
leeperry
 
Messages: 7025
Inscription Forum: 06 Jan 2007 19:44
  • offline

Message » 08 Mar 2008 3:19

tobal a écrit:Hello les codeurs oufs :wink:

L'un d'entre-vous peut-il m'insérer une condition de hauteur sur ce script ?

Je ne veux l'appliquer que si la hauteur est <720

J'imagine qu'il y a un
Code: Tout sélectionner
if (height >= 720)
else


à mettre qque part beut ouère ?

Code: Tout sélectionner
sampler s0 : register(s0);

float4 main(float2 tex : TEXCOORD0) : COLOR
{
float4 c0=tex2D(s0,tex);
// r=c0[0], g=c0[1], b=c0[2]
// RGB [16,235] to YUV: 601 mode (128 is not added to Cb and Cr)
float y=0.299*c0[0] + 0.587*c0[1] + 0.114*c0[2];
float Cb=-0.172*c0[0] -0.339*c0[1] +0.511*c0[2];
float Cr=0.511*c0[0] -0.428*c0[1] -0.083*c0[2];

// YUV to RGB [16,235]: 709 mode (Cb and Cr are 128 less)
float r=y+1.540*Cr;
float g=y-0.459*Cr-0.183*Cb;
float b=y+1.816*Cb;

float4 ret=float4(r,g,b,0);

return ret;
}


Merci d'avance.

@+,
Xavier.

PS: chambolle je vais tester ton sharpen/deconvolution


Je pense que ça devrait donner :

Code: Tout sélectionner
sampler s0 : register(s0);

// Hauteur de la frame
#define height (p0[1])

float4 main(float2 tex : TEXCOORD0) : COLOR
{
// c0 = pixel original
float4 c0=tex2D(s0,tex);

if(height <720 )
{
  return c0;
}

// r=c0[0], g=c0[1], b=c0[2]
// RGB [16,235] to YUV: 601 mode (128 is not added to Cb and Cr)
float y=0.299*c0[0] + 0.587*c0[1] + 0.114*c0[2];
float Cb=-0.172*c0[0] -0.339*c0[1] +0.511*c0[2];
float Cr=0.511*c0[0] -0.428*c0[1] -0.083*c0[2];

// YUV to RGB [16,235]: 709 mode (Cb and Cr are 128 less)
float r=y+1.540*Cr;
float g=y-0.459*Cr-0.183*Cb;
float b=y+1.816*Cb;

float4 ret=float4(r,g,b,0);

return ret;
}


:wink:
Dernière édition par Seb.26 le 08 Mar 2008 14:18, édité 1 fois.
Seb.26
 
Messages: 3255
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 08 Mar 2008 9:56

Merci tonton Seb :mdr:.

@Chambolle : j'ai essayé ton sharp&blur, c'est euh... pas top :oops: .

J'ai modifié plusieurs seuils mais le résultat sur du H.264 est quand même très loin du rendu du combo PS sharpen @0.6/ffdshow deband @1.2.

En fait ça perd en netteté tout en pixellisant, c'est zarb comme effet :o .

@+,
Xavier.
tobal
 
Messages: 6118
Inscription Forum: 13 Sep 2001 2:00
Localisation: Niort
  • offline

Message » 08 Mar 2008 13:04

Seb.26 a écrit:
chambolle a écrit:Ben c'est ce que j'avais essaye de faire avec l'un de mes premiers filtres.
Et c'est ce que j'essaie toujours de faire (je pourrais moduler le filtrage). Mon idee est distinction de 3 zones: celles qu'on accentue, celles qu'on ne touche pas, celle qu'on floute.

Bah justement, l'idée c'est de ne pas avoir de seuil, car les seuils, ça fait des escaliers, à la place des seuils, il faudrait mettre des pentes ... :wink:


Seb: l'idee d'avoir flou-neutre-accentue c'est l'idee de la pente en fait. Parce que la vision d'un pixel limite la possibilite de comprehension du bord reel d'un contour (l'effet EE vient d'une accentuation de ce qui n'est pas le contour mais un exces de luminosite a cote du contour) donc avec une vision si locale il est difficile de ponderer autrement

Aux autres (tobal, lee): merci pour les tests. Chez moi, le flou n'est pas genant et pas si flou. C'est pour cela que j'ai demande: j'ai une grande TV LCD et sur une TV il y a toujours un traitement de l'image de realiser
chambolle
 
Messages: 628
Inscription Forum: 14 Nov 2006 10:52
  • offline

Message » 08 Mar 2008 13:53

ouh, le deinterlace en script PS il marche mieux que ffdshow je trouve :o

peut-etre encore un peu trop de lignes restantes apres....mais ffdshow blend ca floute vraiment, alors que la pas du tout.

ptet des ameliorations possibles a apporter ?

un deinterlacer top qualite qui floute pas, ca serait bien cool :mdr:
leeperry
 
Messages: 7025
Inscription Forum: 06 Jan 2007 19:44
  • offline

Message » 08 Mar 2008 14:17

tobal a écrit:Merci tonton Seb :mdr:.

De nada ... par contre, je sais pas si je l'ai pas fait à l'envers ( là, il renvoit le pixel non modifié si height<720 :oops: ) ...
Seb.26
 
Messages: 3255
Inscription Forum: 04 Mar 2004 16:43
  • offline

Message » 08 Mar 2008 17:50

Seb.26 a écrit:
tobal a écrit:Merci tonton Seb :mdr:.

De nada ... par contre, je sais pas si je l'ai pas fait à l'envers ( là, il renvoit le pixel non modifié si height<720 :oops: ) ...


Bah pas grave si ça le fait à l'envers, j'ai qu'à tourner l'opérateur logique non ?

genre
Code: Tout sélectionner
height>720


@+,
Xavier.
tobal
 
Messages: 6118
Inscription Forum: 13 Sep 2001 2:00
Localisation: Niort
  • offline

Message » 08 Mar 2008 19:43

tobal a écrit:Bah pas grave si ça le fait à l'envers, j'ai qu'à tourner l'opérateur logique non ?

genre
Code: Tout sélectionner
height>720


@+,
Xavier.
Oui.
oli2
 
Messages: 1038
Inscription Forum: 09 Oct 2004 19:55
Localisation: Dijon
  • offline

Message » 08 Mar 2008 22:06

Seb.26 a écrit:
tobal a écrit:Merci tonton Seb :mdr:.

De nada ... par contre, je sais pas si je l'ai pas fait à l'envers ( là, il renvoit le pixel non modifié si height<720 :oops: ) ...


Hello Seb,

Il m'envoie ch.ier ton code il me dit "undeclared identifier 'p0'"

Faut déclarer la variable c'est ça ?

J'ai rajouté :

Code: Tout sélectionner
sampler s0 : register(s0);
float4 p0 : register(c0);

// Hauteur de la frame
#define height (p0[1])

float4 main(float2 tex : TEXCOORD0) : COLOR
{
// c0 = pixel original
float4 c0=tex2D(s0,tex);

if(height >719 )
{
  return c0;
}

// r=c0[0], g=c0[1], b=c0[2]
// RGB [16,235] to YUV: 601 mode (128 is not added to Cb and Cr)
float y=0.299*c0[0] + 0.587*c0[1] + 0.114*c0[2];
float Cb=-0.172*c0[0] -0.339*c0[1] +0.511*c0[2];
float Cr=0.511*c0[0] -0.428*c0[1] -0.083*c0[2];

// YUV to RGB [16,235]: 709 mode (Cb and Cr are 128 less)
float r=y+1.540*Cr;
float g=y-0.459*Cr-0.183*Cb;
float b=y+1.816*Cb;

float4 ret=float4(r,g,b,0);

return ret;
}


J'ai bon ? :oops:

Ca a l'air de marcher en tout cas !

@+,
Xavier.
tobal
 
Messages: 6118
Inscription Forum: 13 Sep 2001 2:00
Localisation: Niort
  • offline


Retourner vers Matériel PC Home-cinéma