Ne pas débayriser ? comment fait-on ?

Démarré par GBo, Novembre 12, 2011, 12:51:15

« précédent - suivant »

GBo

Bonjour,

La caméra vidéo Canon EOS C300, qui sort de la vidéo en full HD en 1920x1080 pixels très clean à partir de 3840x2160 photosites (à matrice de Bayer) :



J'aurais aimé voir de la même façon à quoi ressemble une image non dématricée issue d'un appareil photo classique à matrice de Bayer. Par curiosité. Car normalement, l'avantage de la manip est de ne pas avoir d'artefacts colorés et autres erreurs de dématriçage sur les hautes fréquences (motifs en labyrinthes etc...). Au détriment du nombre de MPx finaux bien entendu (rapport 1:4). Si ça marche bien, j'y vois peut-être un intérêt en photo quand on aura des FF à 35 MP, pour sortir du 8 MP super clean sans artefacts, à partir des RAWs.

J'ai pris l'exemple du 40D puisque j'en ai un.
Au lieu de faire un pixel par photosite (en dématriçant normalement par le dérawtiseur habituel), ce qui amène à une image de 3888 x 2592 px (10.1 MP) sur un 40D, le jeu consiste donc à produire une image de 1944 x 1296 px (2.5 MP) directement en construisant 1 pixel de sortie à partir d'un carré des 4 photosites suivant :

R G1
G2 B


Donc voilà ma manip :
Avec IRIS*, à partir d'un RAW du 40D (un CR2 d'imaging resource**), j'ai recupéré 4 images de 2.5 MP chacune : R.tif, G1.tif, G2.tif et B.tif. Aucun dématriçage au programme donc, c'est les valeurs, sur 16 bits, telles qu'enregistrés par les photosites, respectivement R, G1, G2 et B.
Pour construire chaque pixel de sortie, je pensais ensuite bêtement fabriquer le rouge à partir du R de mon carré de photosite correspondant, le vert à partir d'une moyenne de G1 et de G2, et le bleu à partir du B. Ce que j'ai fait avec un petit programme Matlab, non sans appliquer les corrections pour balance des blancs et de transformation gamma bien entendu.

J'obtiens un résultat accetable de loin, mais à y voir de près (ici à 600% sous toshop), je constate que chaque trait noir est entouré de liserets rouges et bleus :


Alors que l'image dématricée par DPP et ramené à 2,5 MP par un bicubic classique (photoshop) donne un truc plus clean sur le même crop :


Help, qu'est-ce qu'il fallait faire ?

cdlt,
GBo

(*) http://astrosurf.com/buil/us/iris/iris.htm
(**) http://www.imaging-resource.com/PRODS/E40D/E40DhMULTII0100.CR2.HTM

GBo

#1
Bon ça y est j'ai trouvé une solution.



Ca manque singulièrement de sharpen sinon c'est bien, et ça m'a l'air de régler le moiré et autres artefacts sur les motifs piègeux.

GBo

Citation de: GBo le Novembre 12, 2011, 15:42:44
Ca manque singulièrement de sharpen sinon c'est bien, et ça m'a l'air de régler le moiré et autres artefacts sur les motifs piègeux.
Mouais, c'est moins vrai avec du sharpen pour rattraper la molesse de l'image expérimentale.

A gauche un crop de l'image du 40D après dérawtisation classique plus donwsamplig habituel
à droite le programme expérimental avec du sharpen :


=> Il y a peut-être un peu moins de moiré sur le motif "10" ? mais j'avoue que c'est pas flagrant, il faut que je trouve un exemple plus parlant (des cibles où on dépasse le Nyquist du capteur par exemple.

cdlt,
GBo

GBo

Je continue le monologue ;D

Voilà ce que ça donne sur cible qui qui fait générer du moiré (sur 5D2* cette fois):
A gauche l'image dérawtisé normalement sous DPP et downsamplée en 2808 x 1872 px (bicubic de photoshop) :
A droite le résultat de mon programme, après application de sharpen (radius 0.5, amount 100%) sinon c'est vraiment mou :



=> Il est inédiable que le moiré est moins marqué à droite. Par contre il y a des effets de colorations que je ne comprends pas, à creuser.

cdlt,
GBo

Source du raw CR2 : http://www.imaging-resource.com/PRODS/E5D2/E5D2hMULTI_2X.CR2.HTM

fred134

Bonjour,

Pouvez-vous indiquer le traitement appliqué au deuxième post par rapport au premier ?
J'imagine que quand vous dites balance des blancs, il s'agit du passage des couleurs raw aux couleurs RVB ?
Désolé de rompre le monologue :-)

Cordialement,

GBo

#5
Citation de: fred134 le Novembre 12, 2011, 18:55:37
Bonjour,
Pouvez-vous indiquer le traitement appliqué au deuxième post par rapport au premier ?

Appelons les pixels de sortie des "macro-pixels" puisqu'ils font la taille de 2x2 photosites.



Pour le premier post, j'ai généré mes macro-pixels de sortie comme ceci :

Valeur rouge du macro-pixel = valeur du photosite R
Valeur verte du macro-pixel = moyenne des valeurs des photosites G1 et G2
Valeur bleue du macro-pixel = valeur du photosite B

Le résultat n'est pas très bon car comme tu peux le voir ça bave de rouge et de bleu autour de chaque trait noir. Je pense que l'erreur était de considérer qu'une cellule R-G1-G2-B est une bonne approximation d'un pixel de tri-CCD. C'est faux car sur un tri-CCD, le R, le G est le B (grace au système de prisme "beam splitter") sont échantillonnés au même endroit de l'espace. Sur une cellule de Bayer ce n'est pas le cas !
Pour le deuxième post, j'ai donc interpolé les valeurs de couleur en un même point de l'espace pour chaque macro-pixel. J'ai pris arbitrairement l'endroit du photosite B comme lieu de rendez-vous :



Ca donne :
Valeur rouge du macro-pixel = moyenne des valeurs des 4 R autour du photosite B
Valeur verte du macro-pixel = moyenne des valeurs des 4 G autour du photosite B
Valeur bleue du macro-pixel = valeur du photosite B

Et ça a donné le résultat développé ci-dessus.
Mais je ne sais pas du tout si c'était la meilleure chose à faire, ni si c'est ce que fait Canon sur son C300, disons que ça m'a réglé le problème des bavures de façon efficace. Pour le reste je suis déçu car j'ai des effets de colorations sur les motifs trop fins pour être résolus, c'est justement l'un des artefacts que je voulais éviter avec cet exercice puisque le dématriçage classique génère aussi de tels défauts. Il doit y avoir une explication et/ou une meilleure méthode.

Citation de: fred134 le Novembre 12, 2011, 18:55:37
J'imagine que quand vous dites balance des blancs, il s'agit du passage des couleurs raw aux couleurs RVB ?
Oui, j'ai multiplié ensuite les valeurs de chaque couche de couleur par un coefficient différent, de sorte qu'en sortie le blanc soit blanc (R=B=G).
Pour la correction gamma et les niveaux, pour aller plus vite j'ai fait ça au jugé sur photoshop.

Citation de: fred134 le Novembre 12, 2011, 18:55:37
Désolé de rompre le monologue :-)
Cordialement,
Au contraire c'était le but !
cdlt,
GBo

fred134

Bonsoir,

J'aurais peut-être eu tendance à essayer de caler les trois couleurs en prenant le vert comme centre (plus proche de la luminance ?) avec :
vert = 1 vert
bleu = moyenne des 2 bleus adjacents
rouge = moyenne des 2 rouges adjacents
Je ne sais pas si c'est mieux... et ne suis pas trop surpris que ce soit moins bien qu'un dématriçage poussé (heureusement !), mais l'essai est intéressant.

Pour la BdB, les filtres RVB débordent sur les autres couleurs, il faudrait donc pour passer du raw au RVB retirer du vert au rouge, du rouge au vert, etc. Les coefficients se trouvent sur le site dxo. Ca amène des interpolations supplémentaires.

Maintenant, Canon se passe-t-il réellement de dématriçage ? Entre le schéma de principe et l'implémentation réelle il y a peut-être un monde... ?

Cordialement,

Frédéric

GBo

#7
Citation de: fred134 le Novembre 13, 2011, 03:11:40
Bonsoir,
J'aurais peut-être eu tendance à essayer de caler les trois couleurs en prenant le vert comme centre (plus proche de la luminance ?) avec :
vert = 1 vert
bleu = moyenne des 2 bleus adjacents
rouge = moyenne des 2 rouges adjacents
Je ne sais pas si c'est mieux... et ne suis pas trop surpris que ce soit moins bien qu'un dématriçage poussé (heureusement !), mais l'essai est intéressant.
Bonne idée que je viens d'essayer avec :
G2 comme centre du macro-pixel, pris tel quel pour le vert donc, G1 non pris en compte, le rouge moyenné entre les 2 R, le bleu moyenné entre les 2 B.
Ensuite j'ai fait une 2ième essai en rajoutant pour le vert la moyenne des 4 G1 autour du G2.
Aucune de ces tentatives ne se débarrassent totalement des fausses colorations sur la cible noir et blanc du 5D2, donc je laisse tomber pour le moment.

Citation de: fred134 le Novembre 13, 2011, 03:11:40
Pour la BdB, les filtres RVB débordent sur les autres couleurs, il faudrait donc pour passer du raw au RVB retirer du vert au rouge, du rouge au vert, etc. Les coefficients se trouvent sur le site dxo. Ca amène des interpolations supplémentaires.
Merci du tuyau, ce n'était pas trop le but de cette manip de peaufiner cet aspect, mais je creuserai ça si j'avance sur le 1er point !

Citation de: fred134 le Novembre 13, 2011, 03:11:40
Maintenant, Canon se passe-t-il réellement de dématriçage ? Entre le schéma de principe et l'implémentation réelle il y a peut-être un monde... ?
Cordialement,
Frédéric
Oui, je ne sais rien d'autre que ce schéma du premier post, et ce texte de Canon :

"This 8.3 million pixel sensor combines information from four actual pixels on the sensor (two green, one red, one blue) to produce final output for one Full HD pixel, enhancing output quality and color rendition. Thus, it is able to produce full RGB output, without the quality losses that might occur from "de-bayering" at the imaging sensor."

Source: http://learn.usa.canon.com/resources/articles/2011/c300_for_cinematographers.shtml

cdlt,
GBo

fred134

Une dernière petite idée, tu pourrais tenter d'appliquer un passe-bas sur l'image de départ, pour tenir compte de l'échantillonnage final.

Ceci dit, en principe je ne vois pas comment il pourrait y avoir un avantage de qualité avec un traitement "rustique" par rapport à un traitement évolué de la même image de départ.
Le principal avantage d'un dé-bayer simple devrait plutôt être en termes de "qualité pour une puissance de calcul donnée", mais là, pour les essais, il faudrait l'accès au code d'un dématriceur embarqué :-)

Eventuellement, dans le genre curiosité intellectuelle, tu pourrais tester "est-ce que ça vaut le coup de mettre 4x plus de pixels pour appliquer un traitement simple, par rapport au traitement évolué d'un capteur bayer à la résolution de l'image finale" (d'une certaine façon c'est un peu ça que dit Canon). Idéalement avec deux boitiers dont la taille des pixels se rapproche d'un facteur 2, pour éviter l'influence de la résolution de l'objectif... (genre 5D1 et 600D)
Peut-être que là, le traitement simplifié a ses chances ?

Bon we,

Frédéric

GBo

#9
Mon but initial était d'obtenir le plus simplement et directement possible des macro-pixels RGB qui font la taille de 2x2 photosites du capteur, de sorte à obtenir une image de faible définition (= 4 fois moins de pixels que le dématriçage classique) en évitant justement la difficulté qui consiste à essayer de reconstituer les informations RGB pour chaque photosite, donc des détails trop fins.
Ce n'est donc pas un test "rustique" contre "raffiné", mais plutot  "rustique modeste" (max : Nyquist du capteur/2) contre "raffiné ambitieux" (max : Nyquist du capteur) ré-echantillonné ensuite pour Nyquist/2. Sachant que l'ambition du dématriçage classique nous coute quelques artefacts au voisinage de Nyquist, on le sait tous; ces artefacts pouvant se propager au ré-échantillonnage, je l'ai déjà constaté. Donc si on n'a besoin que d'une faible définition, comme en vidéo, il y a peut-être une solution plus simple et meilleure que l'usine à gaz, c'est ça que je cherche.

GBo

Citation de: fred134 le Novembre 13, 2011, 14:48:47
Une dernière petite idée, tu pourrais tenter d'appliquer un passe-bas sur l'image de départ, pour tenir compte de l'échantillonnage final.
Je vais réfléchir à ceci, bonne idée a priori.

fred134

Citation de: GBo le Novembre 13, 2011, 15:10:25
Ce n'est donc pas un test "rustique" contre "raffiné", mais plutot  "rustique modeste" (max : Nyquist du capteur/2) contre "raffiné ambitieux" (max : Nyquist du capteur) ré-echantillonné ensuite pour Nyquist/2. Sachant que l'ambition du dématriçage classique nous coute quelques artefacts au voisinage de Nyquist, on le sait tous; ces artefacts pouvant se propager au ré-échantillonnage, je l'ai déjà constaté. Donc si on n'a besoin que d'une faible définition, comme en vidéo, il y a peut-être une solution plus simple et meilleure que l'usine à gaz, c'est ça que je cherche.
Je comprends. L'essai est intéressant, même si la solution est peut-être "raffiné modeste"...:-)
Peut-être en s'inspirant d'un algo de dématriçage "raffiné" de résolution/4, afin de reconstituer les macro-pixels ? Mais on s'éloignerait de la simplicité que tu recherches (et il y a sans doute des papiers sur ce sujet ou des sujets suffisamment proches).

Cordialement,

Frédéric

Roland89

dans les logiciels dédié à l'astronomie, tu trouvera ton bonheur.

cependant, c'est loin d'être aussi simple, il semblerais notamment que lors du derawtisation il n'y a pas que les pixels directement adjacent qui servent mais même ceux 2 voir 3 rangs plus loin, et que les valeurs exactes des filtres ne soit pas toujours très claires. (avec deux verts différents par exemple chez certains constructeurs)