Modérateurs: Staff Home-Cinéma, Staff Juridique • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

Tout ce qui concerne les logiciels lié au HC sur ordinateur (PC, Mac, Linux...)
Règles du forum
Avant de poster, merci de prendre connaissance des règles du forum : à lire avant de poster

Evaluation mire+image BD simultanément

Message » 19 Jan 2014 18:38

Bonjour,

Evaluer la qualité d'un post-traitement sur une mire tout en ayant l'image d'un BD de son choix également affichée et post-traitée de la même manière permet à la fois d'évaluer objectivement l'impact du traitement sur la mire et de l'évaluer subjectivement sur l'image.

Pour cela il faut donc afficher une mire sur une portion de l'écran et l'image du BD sur le reste.

Ceci peut être fait facilement via un script Avisynth.

Je vais supposer que la mire est dans un fichier .png. Sa dimension sera inférieure à celle du BD pour ne pas occuper tout l'écran. Ceci pose qq difficulté ds avisynth, notamment si on veut utiliser la fonction merge pour fusionner la mire avec l'image du BD, car merge veut des images de même taille...

On peut contourner cette difficulté via la fonction StackHorizontal qui permet de disposer plusieurs images horizontalement. Comme la largeur finale sera supérieure à 1920 pixels, il faudra ensuite cropper. La seule contrainte dans ce cas est que la mire doit être au format XXX x 1080.

Voici un exemple tout simple pour ffdshow. Je suppose que la mire est dans le fichier D:\resolution.png. Dans le snapshot du post suivant, cette mire fait 192 x 1080 pixels et 5000 frames de cette mire sont générées, ce qui laisse un peu de marge à 24 fps.

Code: Tout sélectionner
ImageSource = ("D:\resolution.png",end=5000)
mire=ConvertToYV12()
ffdshow_source()
StackHorizontal(mire,last)
Crop(0,0,1920,1080)

# suite normale du code avec les post-traitements
# ...
Dernière édition par Emmanuel Piat le 19 Jan 2014 19:04, édité 4 fois.
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Annonce

Message par Google » 19 Jan 2014 18:38

Publicite

 
Encart supprimé pour les membres HCFR

Message » 19 Jan 2014 18:41

Image
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 19 Jan 2014 18:48

Vu que la mire est au format RGB initialement, il faut faire attention au fonctionnement de ConvertToYV12 si la mire contient des niveaux de gris ou des couleurs.

Dans ce cas, il faut encoder correctement les niveaux RGB et choisir la bonne matrice de conv (option matrix="..."). Je vous renvoie sur la doc :
http://avisynth.nl/index.php/ConvertToYV12

Enjoy et bons tests :wink:
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 19 Jan 2014 19:50

Merci Emmanuel ;)
HDfever
 
Messages: 1107
Inscription: 12 Mar 2009 10:14
Localisation: Sud Ouest

Message » 03 Fév 2014 19:19

Tu bosses beaucoup toi en ce moment, et moi j'ai pas trop le temps de suivre... :oops:
Création de Cinémas Privés, Calibration Audio/Vidéo, mise au point d'enceintes et PCHC, +d'infos sur le site KazCorporation.
(calibreur officiel HomeCineSolutions/Ciné Privé/Elecson)
Config Kaz 8 disponible (Kodi, MPC, LAVfilters, madvr process to 4k)
Avatar de l’utilisateur
kazuya
Pro-Divers.
Pro-Divers.
 
Messages: 18346
Inscription: 19 Oct 2004 16:37
Localisation: Région Parisienne

Message » 03 Fév 2014 22:59

Houlà c'est chargé aussi de mon côté... Je fais 2 3 bricoles le soir, c'est tout...

Ca serait mieux de mettre la mire au centre... (vu que sur les bords on se mange souvent pas mal d’aberration optique). Je remettrai un autre script dès que je pourrais. Il faudra aussi ajouter la fonction histogramme, c'est trop fun :wink: Et puis une mire spéciale pour ajuster les screens...
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 03 Fév 2014 23:50

En fait, en utilisant la fonction overlay de avisynth, ça devrait être bcp + simple. Je suis un grand débutant...
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 04 Fév 2014 23:35

Fonction Overlay apprivoisée :wink:

Voici à titre d'exemple une fonction HistogramY.avsi (à copier ds le dossier plugin de Avisynth) que je me suis amusé à faire.

Elle choppe l'histo ajouté à droite de l'image, le crop en ne gardant que la partie Y' et le blend à gauche de l'image avec un effet de transparence.
Le paramètre à spécifier est la hauteur en pixel des bandes noire de l'image. Ces bandes noires sont enlevées ds un 1er temps pour que l'histo ne les prenne pas en compte puis l'histo est affiché 8 pixels en dessous de l'image croppée. L'image retournée possède par contre les bandes noires d'origine pour ne pas dénaturer ses dimensions ...

Code: Tout sélectionner
function HistogramY(clip image,int blackBorderHeight)
{
  # blackBorderHeight : top and bottom black borders height that will be cropped.
  #                     Necessary to have a correct scale on the Y' histogram.
  # The Y' histogram is plotted eight pixels under the top of the cropped image.
  # The returned image is the complete frame with top and bottom borders.
 
Crop(image,0,blackBorderHeight,0,-blackBorderHeight)
cWidth=last.width
cHeight=last.height
Histogram("Levels")
histo=Crop(cWidth,0,0,68-cHeight)
Overlay(image,histo,x=8,y=8+blackBorderHeight,mode="blend",opacity=0.6)
}


Exemple avec Oblivion et le call HistogramY(138). Cliquez sur l'imagette :

Image
Dernière édition par Emmanuel Piat le 05 Fév 2014 10:16, édité 3 fois.
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 04 Fév 2014 23:48

Attention à bien prendre le "}" à la fin du script...
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 05 Fév 2014 10:03

Avec cet outil, on voit bien que la dynamique sur le BRD français d'Oblivion a été castrée sur certaines scènes.
Très visible sur toutes les scènes à fort IRE (ça manque pas) : la répartition de l'histo se heurte très souvent à un "mur" bien avant Y'=235. Très étonnant.
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 05 Fév 2014 11:12

Oui ça même sans l'histogramme je l'avais déjà remarqué en visionnant le film !
Mais beaucoup de films sont comme ça en fait, au contraire des séries TV qui exploitent systématiquement toute la dynamique de l'image. :wink:

Très sympa ce petit histogramme ! :P
Création de Cinémas Privés, Calibration Audio/Vidéo, mise au point d'enceintes et PCHC, +d'infos sur le site KazCorporation.
(calibreur officiel HomeCineSolutions/Ciné Privé/Elecson)
Config Kaz 8 disponible (Kodi, MPC, LAVfilters, madvr process to 4k)
Avatar de l’utilisateur
kazuya
Pro-Divers.
Pro-Divers.
 
Messages: 18346
Inscription: 19 Oct 2004 16:37
Localisation: Région Parisienne

Message » 05 Fév 2014 13:12

Il faudrait que j'ajoute le format vidéo en param pour que les bandes noires soient automatiquement calculées pour le crop. Ca serait + sympa à utiliser...
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 09 Fév 2014 13:32

Voilà la version finale pour l'histogramme.

Le crop qui permet de ne pas tenir compte des bandes noires pour le calcul de l'histogramme peut être paramétré de 2 manières différentes. Soit via bbHeight qui donne la hauteur en pixel de la zone en haut et bas de l'image à cropper. Soit via ratio qui indique le format du film (voir commentaire).

Comme tous les films ne sont pas tous exactement au même format après authoring, on peut ajuster le crop via un offset en pixels.

Enfin showline trace 2 lignes rouges qui matérialisent les limites du crop (ça bouffe pas mal de ressources, donc à utiliser juste pour vérifier que la zone croppée est ok. L'idéal est que les 2 lignes rouges soient un poil ds l'image.

L'image retournée est la frame d'origine avec l'histogramme intégré avec un effet de transparence.

Exemple d'appel : HistogramY(ratio=2, offset=10, showline=true)

Code: Tout sélectionner
# Display an histogram of Y' inside the frame.

# Top and bottom black borders need to be cropped to have a correct scale on the Y' histogram.
# This cropping can be done by specifying either ratio or bbHeight parameters.

# if defined, ratio specifies a predefined value for bbHeight
# ratio = 0 => bbHeight set for a 1.77:1 format movie
# ratio = 1 => bbHeight set for a 1.85:1 format movie
# ratio = 2 => bbHeight set for a 2.35:1 format movie
 
# bbHeight : if defined, gives the top and bottom black borders height that will be cropped.

# offset : value added to bbHeight to define the number of lines to crop.
#          Usefull if ratio is used with a movie that don't exactly respect the predefined format.

# showline flag controls the plot of 2 red lines to show the limit of the cropping.

# The Y' histogram is plotted at the top of the cropped image.
# The returned frame is the complete frame with original top and bottom black borders.

function HistogramY(clip clp, int "ratio", int "offset", int "bbHeight", bool "showline")
{
ratio = default( ratio, -1)
offset = default( offset, 0)/2*2
bbHeight = default( bbHeight, 0)/2*2
showline = default( showline, false)

bbHeight = ratio==0 ? 0 : ratio==1 ? 22 : ratio==2 ? 132 : bbHeight

Crop(clp,0,bbHeight+offset,0,-bbHeight-offset)
cWidth=last.width
cHeight=last.Height
Histogram("Levels")
histo=Crop(cWidth,0,0,66-cHeight)
Overlay(clp,histo,x=4,y=bbHeight+offset,mode="blend",opacity=0.6)

showline ? Crop(0,bbHeight+offset,0,-bbHeight-offset).AddBorders(0,2,0,2,$800000) : last
showline ? Overlay(clp,last,x=0,y=bbHeight+offset-2,mode="blend") : last
return last
}
Dernière édition par Emmanuel Piat le 09 Fév 2014 17:04, édité 3 fois.
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 09 Fév 2014 13:43

Avec cette fonction, je me suis rendu compte que le BRD de Samsara a un niveau de BTB assez phénoménal. En fait j'ai jamais vu de telles excursions ds le BTB sur un BRD sur un nombre aussi important de pixels... C'est presque à se demander s'il n'y a pas eu une erreur de mapping de niveaux pdt la création du master numérique du BRD...

Pour rendre correctement ce BRD, il faut pratiquement un mapping 6-235 vers 0-255 (ou 16-235 selon votre niveau de sortie).
Donc il faut soit utiliser la fonction level de avisynth ou ffdshow, ou sortir en RGB32 de ffdshow avec un custom mapping...
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online

Message » 09 Fév 2014 13:56

Voici un début de script pour intégrer une petite mire au centre de l'image d'un film (là ou les perfs de l'optique sont les meilleures), du style une mire de réso pour évaluer à la fois objectivement et subjectivement une chaine de upsampling/sharpen/downsampling.

pattern permet d'indiquer le chemin et le nom de la mire (par défaut c'est "C:\reso.png")
Exemple d'appel : Mire(pattern="D:\chemin\nom.png")

Il faut que je complète ce script avec la possibilité d'afficher en plus une mire de niveaux de gris en haut de l'image pour pouvoir faire des screens corrects comme le fait Kaz (cf. son exemple sur le topic des chips 0.95" sur le forum projection).

Code: Tout sélectionner
# Show a pattern in the center of the frame.
# The parameter pattern is the complete path and name of the pattern
 
function Mire(clip clp, string "pattern")
{
pattern = default( pattern, "C:\reso.png")
mire=ImageSource(pattern)
Overlay(clp,mire.ConvertToYV12(),x=(clp.width-mire.width)/2,y=(clp.height-mire.height)/2,mode="blend")
}


Voici un exemple de mire à afficher qui est un bout de la mire de réso de Michel (MLill) :
Ca facilite vraiment le choix des algos d'up/downsampling.
(si le nav fait un scaling autom de l'image, faire un ctrl-C, ctrl-V ds un logiciel d'affichage de bitmap pour la voir en échelle 1, c'est des bouts de mire 1, 2, 3 pixels).

Image
Dernière édition par Emmanuel Piat le 20 Jan 2015 21:53, édité 1 fois.
Emmanuel Piat
Contributeur HCFR 2016
Contributeur HCFR 2016
 
Messages: 10078
Inscription: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • online


Retourner vers Logiciel PC Home-cinéma