IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?


Sujet :

Traitement d'images

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    et utilisés parfois dans des logiciels répandus, comme DoubleCommander (gestionnaire de fichiers écrit en Lazarus) et son "viewer" de fichiers image ?

    Bonsoir,

    Suite à la lecture intéressante d'un petit bout du "Fundamentals of Computer Graphics" que je vous résume ainsi (traduction Google) :
    - Lorsqu'on rétrécit l'image, on dimensionne le filtre en fonction de l'espacement des échantillons de sortie (rayon 3 sur la figure 9.39).
    - Lorsqu'on agrandit l'image, la taille du filtre est déterminée par l'espacement des échantillons d'entrée (rayon 1 de la figure 9.39).
    et la figure 9.39 c'est elle :
    Nom : radius.jpg
Affichages : 627
Taille : 24,8 Ko

    je me suis donc dit que j'allais tester le fonctionnement d'un module écrit en Pascal, qui embarque 7 filtres :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const
      ResampleFilters: array[0..6] of record
        Name  : string;	// Filter name
        Filter: TFilterProc;// Filter implementation
        Width : Single;	// Suggested sampling width/radius
      end = (
        (Name: 'Box';	Filter: BoxFilter;	Width: 0.5),
        (Name: 'Triangle';	Filter: TriangleFilter;	Width: 1.0),
        (Name: 'Hermite';	Filter: HermiteFilter;	Width: 1.0),
        (Name: 'Bell';	Filter: BellFilter;	Width: 1.5),
        (Name: 'B-Spline';	Filter: SplineFilter;	Width: 2.0),
        (Name: 'Lanczos3';	Filter: Lanczos3Filter;	Width: 3.0),
        (Name: 'Mitchell';	Filter: MitchellFilter;	Width: 2.0));
    La seule aide dont on dispose, c'est 4 lignes de commentaires juste avant le prototype de la méthode :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      // Interpolator:
      // Src:	Source bitmap
      // Dst:	Destination bitmap
      // filter:	Weight calculation filter
      // fwidth:	Relative sample radius
      procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single);
    J'ai regardé comment les autres utilisent cette procédure Stretch, ça a l'air un peu pifométrique : j'ai trouvé
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    Stretch(src, dst, ResampleFilters[5].Filter, ResampleFilters[5].Width);
    et aussi
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    Stretch(src, dst, ResampleFilters[2].Filter, ResampleFilters[2].Width);
    ce qui laisse supposer que le codeur de l'appel a estimé que le mieux était d'utiliser la valeur définie par défaut et basta.

    Et comme ce comportement me chagrinait, j'ai essayé de tester avec différentes valeurs pour chaque filtre, et c'est là que les ennuis commencent :
    1- pour me simplifier la vie, j'ai d'abord tenté avec une bête boucle genre
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        for i := 0 to 6 do begin // parcours de la liste des filtres
          for j := 0 to 4 do begin // 5 valeurs de radius
            Stretch(Src, Dst, ResampleFilters[i].Filter, j);
          end; // for j
        end; // for i
    mais ça partait tout de suite en "Access Violation"...
    Je vous la fais courte (car j'y ai passé un certain temps...) : certains filtres ne supportent pas de commencer avec un radius à 0, et c'est même plus vicieux que ça, regardez comment je m'en suis sorti :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        for i := 0 to 6 do begin
          for j := 0 to 4 do begin // 5 valeurs de radius 
            for k := 1 to 2 do begin
              // j=0 radius=0.5 & 1 - j=1 radius=1.5 & 2 - j=2 radius=2.5 & 3 - etc.
              radius := (k * 0.5) + j;
              // les 3 premiers filtres fonctionnent à partir de 0.5
              if i = 3 then radius := radius + 1.0; // démarre à 1.5 et continue
              if i = 4 then radius := radius + 1.5; // démarre à 2.0 et continue
              if i = 5 then radius := radius + 2.5; // démarre à 3.0 et continue
              if i = 6 then radius := radius + 1.5; // démarre à 2.0 et continue
              Stretch(Src, Dst, ResampleFilters[i].Filter, radius);
            end; // for k
          end; // for j
        end; // for i
    On dirait que ce qui est noté dans le code comme "Suggested sampling width/radius" est en fait la valeur minimum à employer. Admettons. Mais alors, si on regarde un filtre en détail,
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function TriangleFilter(Value: Single): Single;
    begin
      if (Value < 0.0) then Value := -Value; // si la valeur est négative on la transforme en positive
      if (Value < 1.0) then Result := 1.0 - Value else Result := 0.0;
    end;
    pourquoi ne puis-je pas lui passer 0 (zéro) ?

    Mais ce n'est pas le plus important. Ce qui l'est,
    2- c'est que une fois ma boucle au point, je l'ai exécutée en générant un fichier pour chaque valeur de chaque filtre, et là, patatras, pour chaque filtre il n'y a aucune différence entre la dizaine de fichiers générés, en contradiction totale avec les "Fondamentals" et la zolie image que je vous ai proposée...

    À partir de là, ça dépasse mon entendement et mes compétences, d'où *ce* post.
    La seule piste que je vois, c'est une incompréhension de ma part de ce commentaire : Suggested sampling width/radius, le signe "/" n'indiquant pas un mot ou l'autre mais vraiment une division de width (quelle width ? De qui de quoi ?) par radius ? Est-ce que ça colle avec l'autre commentaire : Relative sample radius ?

    Un dernier mot : les essais ont été faits en UpSampling et en DownSampling, résultats identiques.
    À vos claviers !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    Bonjour,

    S'emballer sur un sujet à la lecture d'un document, c'est très bien ...

    Citation Envoyé par Jipété Voir le message
    ... Suite à la lecture intéressante d'un petit bout du "Fundamentals of Computer Graphics" ... je me suis donc dit que j'allais tester le fonctionnement d'un module écrit en Pascal ...
    ... encore faut-il au départ se limiter à un projet raisonnable, afin d'identifier et de franchir les obstacles qui ne manqueront pas de se présenter.
    Et là, tu n'y va pas de main morte:

    Citation Envoyé par Jipété Voir le message
    ... je me suis donc dit que j'allais tester le fonctionnement d'un module écrit en Pascal, qui embarque 7 filtres ...
    Connais-tu véritablement chacune des procédures mentionnées (Filter: TFilterProc) ? As-tu toi-même codé leur implémentation, disposes-tu du texte source, ou les as-tu au moins testées sur des images appropriées ?
    Je m'en tiendrais pour commencer à un filtre unique, avant d'introduire en second lieu une liste d'enregistrements de longueur croissante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResampleFilters: array[0..N_Filtre] of record
    Et ce que tu laisses transparaître plus loin de tes errements laisse craindre le pire:

    Citation Envoyé par Jipété Voir le message
    ... La seule aide dont on dispose, c'est 4 lignes de commentaires ...
    ... J'ai regardé comment les autres utilisent cette procédure Stretch, ça a l'air un peu pifométrique ...
    ... ce qui laisse supposer que le codeur de l'appel a estimé que le mieux ...
    ... Et comme ce comportement me chagrinait ...
    L'essentiel est qu'après toutes ces tribulations, tu aies gardé le moral.

    Quelques questions, de la part de quelqu'un qui observe tout cela de Sirius:
    1°) L'allusion à une procédure d'étirement (procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single)) n'implique-t-elle pas une modification du rapport (Largeur/Hauteur), donc de la forme de l'image ?
    2°) Le rayon (radius) associé à un échantillonnage n'est-il pas obligatoirement positif ? Il faut en revenir à l'algorithme utilisé.
    3°) Peut-on prétendre maîtriser un projet en arrangeant des boîtes noires dont on ne connaît pas le contenu ? C'est bien ce que tu cherches, à moins que je ne me trompe complètement ...
    4°) À quel titre le bricolage d'autrui, dont tu sais peu de choses sinon rien, pourrait-il servir de référence ?
    ... J'ai regardé comment les autres utilisent cette procédure Stretch, ça a l'air un peu pifométrique ...
    Au royaume des aveugles, les borgnes sont rois.
    Et je suis sûr que tu as déjà eu l'occasion de découvrir des algorithmes ineptes.

    Il te faut prendre connaissance des codes sources des divers filtres en cause, pour comprendre véritablement ce qui se passe.

    Donc une meilleure confiance en soi, et un retour à l'excellente documentation disponible sur developpez.com, site pour développeurs-programmeurs pro injustement méconnu .


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Connais-tu véritablement chacune des procédures mentionnées (Filter: TFilterProc) ? As-tu toi-même codé leur implémentation, disposes-tu du texte source, ou les as-tu au moins testées sur des images appropriées ?
    Non
    Non
    Oui
    Oui, la preuve, avec à gauche réduction à 80 %, à droite agrandissement à 150 % et, non, je n'ai pas mis l'original (créé par votre serviteur) pour ne pas encombrer plus -- vous avez le nom des filtres au-dessus des réductions :
    Nom : montage4fofo.jpg
Affichages : 700
Taille : 610,9 Ko

    Citation Envoyé par wiwaxia Voir le message
    L'essentiel est qu'après toutes ces tribulations, tu aies gardé le moral.
    Bah, je sais qu'ici je vais trouver de quoi me le remonter, en cas de défaillance passagère

    Citation Envoyé par wiwaxia Voir le message
    Quelques questions, de la part de quelqu'un qui observe tout cela de Sirius:
    1°) L'allusion à une procédure d'étirement (procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single)) n'implique-t-elle pas une modification du rapport (Largeur/Hauteur), donc de la forme de l'image ?
    Non, c'est pris en compte dans la procédure (on étire [ou on compresse] dans les deux directions).

    Citation Envoyé par wiwaxia Voir le message
    2°) Le rayon (radius) associé à un échantillonnage n'est-il pas obligatoirement positif ? Il faut en revenir à l'algorithme utilisé.
    Peu importe : s'il est négatif il est converti.

    Citation Envoyé par wiwaxia Voir le message
    3°) Peut-on prétendre maîtriser un projet en arrangeant des boîtes noires dont on ne connaît pas le contenu ? C'est bien ce que tu cherches, à moins que je ne me trompe complètement ...
    Est-ce que le fait de ne rien comprendre à la pignonnerie d'une boîte de vitesse empêche de conduire un véhicule ? Même remarque en ce qui concerne une espèce de gros bloc de ferraille suintant l'huile quand les joints ne sont plus tout jeunes, avec des tuyaux, des fils électriques, des machins dessus des bidules dessous et que des hommes en combinaison bleue et avec les mains sales nomment pompeusement "bloc moteur"...

    Citation Envoyé par wiwaxia Voir le message
    4°) À quel titre le bricolage d'autrui, dont tu sais peu de choses sinon rien, pourrait-il servir de référence ?
    Pas de référence, mais au moins de (début de) piste pour voir où ça va mener.

    Citation Envoyé par wiwaxia Voir le message
    Il te faut prendre connaissance des codes sources des divers filtres en cause, pour comprendre véritablement ce qui se passe.
    Je les ai, donc je les ai regardés, muni d'un tube d'aspirine car la théorie c'est quelque chose à tomber par terre : http://avisynth.nl/index.php/Resampling

    Ceci étant dit, j'arrive quand même à les mettre en œuvre et je vois bien les différences de rendus entre les différents filtres, nonobstant le fait que comme je le disais en début du premier post, quid du pdf "Fundamentals..." qui parle de valeurs différentes pour le radius, selon qu'on veut agrandir ou réduite l'image-source ?
    En fait la vraie question c'est elle.
    Content de te retrouver sur ce sujet

    Citation Envoyé par wiwaxia Voir le message
    Donc une meilleure confiance en soi, et un retour à l'excellente documentation disponible sur developpez.com, site pour développeurs-programmeurs pro injustement méconnu .
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    1°) Mettons les mains dans le cambouis.
    Citation Envoyé par Jipété Voir le message
    ... Est-ce que le fait de ne rien comprendre à la pignonnerie d'une boîte de vitesse empêche de conduire un véhicule ? ...
    Non bien sûr ... cependant si un bricoleur aussi motivé que toi entreprend de construire un véhicule à partir de pièces détachées, il lui faudra bien les examiner toutes avec soin pour comprendre leur fonctionnement, et rassembler une bonne documentation technique afin de s'assurer de la sécurité et de la viabilité de l'ensemble ...
    Il ne lui sera cependant pas nécessaire - je le reconnais - d'aborder la théorie des engrenages.

    2°) Voilà donc la mire idéale , à laquelle tu faisais allusion au mois d'avril ...
    Citation Envoyé par Jipété Voir le message
    Connais-tu véritablement chacune des procédures mentionnées ? ... les as-tu au moins testées sur des images appropriées ?
    ... Oui, la preuve, avec à gauche réduction à 80 %, à droite agrandissement à 150 % ...
    Tests d'images très soignés, comme toujours.

    3°) Abordons la question du "rayon" (traduction hâtive et probablement incorrecte de radius dans le cas présent): Nom : Im = Attention au troll_065x052.gif
Affichages : 530
Taille : 2,0 Ko
    lors d'une reproduction d'image avec changement de taille, on transfère la moyenne pondérée du pixel central et d'un certain nombre de ses voisins, les coefficients affectés à ces derniers étant d'autant plus faibles qu'ils sont plus éloignés; la distribution des valeurs est représentée par une courbe paire, maximale à l'origine, nulle au-delà d'un certain seuil (±1) et dont le contour influe sur l'aspect de l'image obtenue.

    Tu en as toi-même rapporté l'exemple du pic triangulaire:
    Citation Envoyé par Jipété Voir le message
    ... Mais alors, si on regarde un filtre en détail,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function TriangleFilter(Value: Single): Single;
    begin
      if (Value < 0.0) then Value := -Value; // si la valeur est négative on la transforme en positive
      if (Value < 1.0) then Result := 1.0 - Value else Result := 0.0;
    end;
    pourquoi ne puis-je pas lui passer 0 (zéro) ?
    qui correspond très simplement à la fonction linéaire par morceaux: F(x) = 0 si (│x│>1) sinon F(x) = 1 - │x│ .
    Le commentaire que tu a laissé, ainsi que l'une de tes réponses ultérieures
    Citation Envoyé par Jipété Voir le message
    Le rayon (radius) associé à un échantillonnage n'est-il pas obligatoirement positif ?
    Peu importe : s'il est négatif il est converti.
    révèle l'ambiguïté qui s'est glissée dans ton esprit.

    Dans le graphe de la courbe précédente, l'abscisse (x) représente une distance sans unité; l'écart de position correspondant, exprimé en pixels, est donné par le produit D = R * x , où (R) représente la demi-largeur à la base du pic et mesure l'étalement de ce dernier sur l'image initiale.
    C'est une grandeur strictement positive, qui ne peut s'annuler parce qu'alors le filtre, infiniment sélectif, ne laisserait plus rien passer.
    Elle s'évalue sur l'axe horizontal, et non sur celui des ordonnées.
    Désolé de rester dans le vague, mais je ne peux être plus précis au sujet du terme radius, faute de documents mentionnant la notation employée.
    Si je trouve de nouvelles sources, je reviendrai sur ce point.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    2°) Voilà donc la mire idéale , à laquelle tu faisais allusion au mois d'avril ...
    Non, je pense qu' il manque encore un damier ainsi qu'une image pleine de couleurs genre bonbons ou lâcher de ballons, mais je ne voulais pas non plus une image monstrueusement grande (la v1 faisait 800x600, ça devient compliqué à gérer quand il faut en comparer plusieurs).

    Citation Envoyé par wiwaxia Voir le message
    Tests d'images très soignés, comme toujours.
    Merci.
    Et ça m'aide aussi à comprendre (tout sert à tout).

    Citation Envoyé par wiwaxia Voir le message
    3°) Abordons la question du "rayon" (traduction hâtive et probablement incorrecte de radius dans le cas présent):
    C'est pourtant la première qui tombe des traducteurs du web.

    Citation Envoyé par wiwaxia Voir le message
    Le commentaire que tu as laissé, ainsi que l'une de tes réponses ultérieures révèle l'ambiguïté qui s'est glissée dans ton esprit.
    Explique, parce que quand j'écris "si la valeur est négative on la transforme en positive" c'est juste écrire en français ce que je lis là : if (Value < 0.0) then Value := -Value;.

    Citation Envoyé par wiwaxia Voir le message
    Désolé de rester dans le vague, mais je ne peux être plus précis au sujet du terme radius, faute de documents mentionnant la notation employée.
    Si je trouve de nouvelles sources, je reviendrai sur ce point.
    Ne te prends pas la tête, je n'ai pas envie de me palucher la théorie des engrenages et avant ça la théorie et la pratique de la fonte du minerai métallique : j'ai jeté un œil curieux aux pages qui précèdent celle qui ressort en suivant le lien que j'ai donné vers "Fundamentals...", je n'ai pas le niveau.
    Pour moi le souci n'est pas là mais plutôt, dans la mesure du possible, de faire fonctionner un filtre avec différents paramètres pour comparer (voir avec mes yeux attentifs) les différents résultats.

    Arriver à reproduire la figure 9.39 avec Lena, un seul filtre et ses paramètres : après tout, quand par exemple je trafique la netteté avec The Gimp, je peux jouer sur le rayon, la quantité et le seuil, ça doit donc être possible (mais je n'ose pas publier le code qui utilise les filtres, c'est une abomination de prise de tête : je le ferai uniquement si on m'en prie à genoux ).

    Maintenant, s'il n'est pas possible d'atteindre ce but, je me contenterai de faire un tri dans les images publiées cet après-midi pour savoir quel filtre est le meilleur en agrandissement et lequel est le meilleur en réduction (j'ai bien compris que certains avaient un domaine de prédilection, et que d'autres ["box", le dernier tout en bas] ne sont bons à rien, jusqu'à preuve du contraire), mais je ressentirai une grande frustation, et ça c'est pas bon pour la santé !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    Je tente de répondre à deux de tes remarques.

    1°)
    Citation Envoyé par Jipété Voir le message
    ... Abordons la question du "rayon" (traduction hâtive et probablement incorrecte de radius dans le cas présent) ...
    C'est pourtant la première qui tombe des traducteurs du web ...
    C'est effectivement la traduction immédiate; mais ce terme représente ici la "demi-largeur" du pic, et son "étalement" ... d'autres synonymes ne sont pas exclus.
    Un document en français traitant à fond de ce sujet permettra de trancher.

    2°)
    Citation Envoyé par Jipété Voir le message
    ... Le commentaire que tu as laissé, ainsi que l'une de tes réponses ultérieures révèle l'ambiguïté qui s'est glissée dans ton esprit.
    Explique, parce que quand j'écris "si la valeur est négative on la transforme en positive" c'est juste écrire en français ce que je lis là : if (Value < 0.0) then Value := -Value; ...
    Tu parais confondre deux termes, comme le montrent deux remarques étroitement apparentées (#4 , texte en rouge) que tu as faites:
    a) l'une concernant l'abscisse (Value) de la fonction filtre triangulaire (function TriangleFilter(Value: Single): Single;) évoquée dans le message (#1), et que j'ai commentée sous la forme simplifiée F(x): il s'agit d'une variable réelle, admettant pour valeurs critiques (0) et (±1), et qui correspond au quotient (Dpixels/Rseuil), rapport de l'écart (horizontal ou vertical) entre deux pixels de l'image de départ au seuil choisi (lui aussi exprimé en pixels);
    b) l'autre concernant le rayon (radius) associé à l'échantillonnage; il s'agit d'une constante strictement positive, probablement assimilable au Rseuil précédent, sous réserve de confirmation sur documents.
    La confusion est confirmée par l'un de tes commentaires:
    pourquoi ne puis-je pas lui passer 0 (zéro) ?
    Ne vois pas un procès d'intention dans ces remarques appuyées.

    # Où trouve-t-on le code des filtres utilisés dans ton arsenal, ainsi que celui de la procédure concernée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        (Name: 'Box';	Filter: BoxFilter;	Width: 0.5),
        (Name: 'Triangle';	Filter: TriangleFilter;	Width: 1.0),
        (Name: 'Hermite';	Filter: HermiteFilter;	Width: 1.0),
        (Name: 'Bell';	Filter: BellFilter;	Width: 1.5),
        (Name: 'B-Spline';	Filter: SplineFilter;	Width: 2.0),
        (Name: 'Lanczos3';	Filter: Lanczos3Filter;	Width: 3.0),
        (Name: 'Mitchell';	Filter: MitchellFilter;	Width: 2.0));
     
    procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single);
    Cela me permettra peut-être de mieux comprendre la documentation.

    S'agit-il du même code pour Gimp ?
    ... quand par exemple je trafique la netteté avec The Gimp, je peux jouer sur le rayon, la quantité et le seuil, ça doit donc être possible (mais je n'ose pas publier le code qui utilise les filtres, c'est une abomination de prise de tête ...


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Bonjour,

    Citation Envoyé par wiwaxia Voir le message
    1°) C'est effectivement la traduction immédiate; mais ce terme représente ici la "demi-largeur" du pic, et son "étalement" ... d'autres synonymes ne sont pas exclus.
    Un document en français traitant à fond de ce sujet permettra de trancher.
    Pas trouvé.
    Et c'est vrai que ce mot est absent dans la page d'Avisynth.

    Citation Envoyé par wiwaxia Voir le message
    2°) Ne vois pas un procès d'intention dans ces remarques appuyées.
    Pas de souci. Je sais que c'est pour mon bien

    Citation Envoyé par wiwaxia Voir le message
    # Où trouve-t-on le code des filtres utilisés dans ton arsenal, ainsi que celui de la procédure concernée ?
    Là : resampling.zip

    Tu noteras qu'il y a deux versions dans le zip :
    • une 1.02 qui s'appelle "resample.pas" et avec comme "Target: Win32, Delphi 2 & 3"
    • une 1.03, celle trouvée dans DoubleCommander avec comme "Target: Free Pascal 2.2.4, Lazarus 0.9.29" mais qui fonctionne bien jusqu'à FPC 3.0 Laz 1.6.2 (pas testé au-delà). Tu trouveras dans cette version, au début de la procédure Stretch, une microscopique modification que je me suis permise, repérée par "jpt". Je n'ai pas remarqué de différences entre avant et après ma modif, pour le moment.


    Citation Envoyé par wiwaxia Voir le message
    S'agit-il du même code pour Gimp ?
    Soyons honnête : je n'en sais rien.

    Tiens, en avant-première ('tention, jpg, donc déjà des artefacts ! Les bitmaps utilisables en prod' ne sont pas encore prêts), un ch'tit cadeau :
    Nom : 400x300_v3_96.jpg
Affichages : 555
Taille : 54,5 Ko

    Z'ont intérêt à bien se tenir et à assurer, les filtres de resampling !
    Bonne journée,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Bonsoir,

    Citation Envoyé par wiwaxia Voir le message
    Un document en français traitant à fond de ce sujet permettra de trancher.
    J'ai trouvé ça, c'est sympathique même si très compliqué pour moi, d'autant plus que je n'y trouve pas la réponse à ma question (comment appliquer radius 1, 2, 3 tel que montré dans le "Fundamentals"), mais c'est peut-être une mauvaise question : personne ne passe de paramètres aux filtres.

    Les bitmaps version 3 (définitive, j'espère) : fics_4_tests.zip
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    pourquoi se prendre la tete alors que la pluspart des algo sont deja implementé
    regarde l'unite extinterpolation ici


    L'utilisation en est assez simple
    il suffit d'affecter au canvas le type d'interpolation que tu veut utiliser
    en ensuite il suffit de dessiner
    si tu regarde les source tu vois que par defaut il utilise la methode Mitchel tans que tu n'as pas changé de methode
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par anapurna Voir le message
    pourquoi se prendre la tête alors que la plupart des algo sont déjà implémentés.
    1- pour essayer de comprendre un peu tout ça ;
    2- encore faut-il tomber dessus...

    Citation Envoyé par anapurna Voir le message
    L'utilisation en est assez simple
    Un exemple aurait été le bienvenu.

    Citation Envoyé par anapurna Voir le message
    si tu regardes les sources tu vois que par défaut il utilise la méthode Mitchel tant que tu n'as pas changé de méthode
    Mais où as-tu trouvé ça ? Le mot Mitchel, même avec deux "L" (comme un oiseau ou mieux, un ange ), n'existe pas dans ton lien !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Un exemple aurait été le bienvenu.
    Laisse tomber, j'ai trouvé comment mettre ça en œuvre, mais d'une manière un peu empirique puisque je ne sais pas où les filtres prennent leur valeur de travail, je ne leur passe rien !

    Regarde : dans la source (ton lien), tous les prototypes sont construits ainsi :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TCubicInterpolation = class (TFPBaseInterpolation)
      protected
        function Filter (x : double) : double; override;
        function MaxSupport : double; override;
      end;
    mais l'utilisation se résume à DestCanvas.Interpolation := TCubicInterpolation.Create;, et ça fonctionne.

    Bizarrement, mais ça fonctionne : j'ai essayé les 13 filtres dans le fichier que tu as indiqué, + le TMitchell que j'avais trouvé de mon côté, ça en fait 14, j'ai testé avec un bmp de 400x300 que j'ai réduit de 80 % et je n'ai vu aucune différence entre ces 14 fichiers ! Aucune !
    Et pour bien voir j'utilise une loupe numérique, grossissement environ 10 à 20 fois (pas le code sous la main) et j'ai un outil pour passer d'une image à l'autre au clavier (tu sais, le TCheckListBox, ) donc la souris ne bouge pas, ça me permet d'examiner toujours la même zone des images réduites, et tout est identique.

    Et il n'y a pas de sacs de nœuds au niveau de mon outil de visionnage car, en mode augmentation (150 %), là je vois des différences. Très moches, d'ailleurs, avec de sales effets d'aliasing.

    Demain je comparerai avec les filtres utilisés pour générer les images postées ici il y a quelques jours, que je vais refaire puisque les fichiers source ont évolué.

    Pi faudra que je teste la fonction MaxSupport, manière de faire le tour du truc.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    Citation Envoyé par Jipété Voir le message
    ... Mais où as-tu trouvé ça ? Le mot Mitchel, même avec deux "L" (comme un oiseau ou mieux, un ange ), n'existe pas dans ton lien !
    Il se trouve au moins dans celui que tu as donné
    https://clouard.users.greyc.fr/Panth.../index-fr.html
    III.9. Ré-échantillonnage de Mitchell (B-Spline d'ordre 3)
    La perte d'une aile n'invalide pas l'information fournie par anapurna.

    Merci pour tes infos, et le lien qui conduit à l'un des meilleurs articles sur le sujet. J'ai moi-même cherché, et la documentation triée est rassemblée ci-dessous.
    Je l'ai envoyée à une autre personne intéressée par le traitement des images.

    Je n'ai pas compris la présence simultanée du paysage et de l'avion sur ton image-test: peut-être souhaitais-tu mettre en comparaison des objets naturels et artificiels ?

    # Généralités, initiation

    Images / généralités
    http://rea.ccdmd.qc.ca/ri/numerixel/

    Le traitement numérique des images
    http://images.math.cnrs.fr/Le-traite...es-images.html

    Traitement d'images
    https://fr.wikipedia.org/wiki/Traitement_d%27images

    # Calculs bien expliqués

    Les filtres usuels en traitement d'images
    http://xphilipp.developpez.com/articles/filtres/

    Tutoriel : Le redimensionnement d'images HHHHHHHHHHHHH (il s'agit de ton lien)
    https://clouard.users.greyc.fr/Panth.../index-fr.html

    Quelques méthodes de filtrage en Traitement d'Image
    https://hal.archives-ouvertes.fr/hal...280v1/document

    # Logiciels

    PhotoFiltre
    http://www.photofiltre-studio.com/doc/

    Manipulation d'images
    https://docs.gimp.org/fr/

    Matrices de convolution
    https://docs.gimp.org/fr/plug-in-convmatrix.html

    Logiciels gratuits
    http://bastas.pagesperso-orange.fr/d...aire.htm#photo

    # Théorie ***** calculs difficiles

    Quelques méthodes de filtrage en Traitement d'Image
    https://hal.archives-ouvertes.fr/hal...280v1/document

    Détection des contours
    http://www.optique-ingenieur.org/fr/...ontenu_02.html


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    La perte d'une aile n'invalide pas l'information fournie par anapurna.
    Oui, mais pour voler ça devient tout de suite plus compliqué,

    Citation Envoyé par wiwaxia Voir le message
    Merci pour tes infos, et le lien qui conduit à l'un des meilleurs articles sur le sujet. J'ai moi-même cherché, et la documentation triée est rassemblée ci-dessous.
    Je l'ai envoyée à une autre personne intéressée par le traitement des images.
    Content que cet article t'ait plu.
    J'attends maintenant que l'auteur veuille bien intégrer les cinq corrections que je lui ai signalées...

    Citation Envoyé par wiwaxia Voir le message
    Je n'ai pas compris la présence simultanée du paysage et de l'avion sur ton image-test: peut-être souhaitais-tu mettre en comparaison des objets naturels et artificiels ?
    Parce que dans l'image de l'avion il y a des difficultés pour les filtres : les lignes droites inclinées, hé hé hé...
    Tu me diras, rien qu'avec le damier et les textes ils ont de quoi faire, c'est vrai, mais bon, on va dire que sa présence est maintenant "historique".


    Merci pour tous ces liens (j'en connaissais certains, mais d'autres lecteurs seront intéressés, j'en suis sûr).

    Quant à moi, je suis face à un problème hallucinant, qui a l'air de venir de Lazarus ou je ne sais pas, mais depuis ce matin il m'est impossible de recréer les fichiers que j'ai générés hier soir en testant les filtres : les résultats sont systématiquement pourris, même avec des filtres testés il y a plusieurs jours (j'ai retrouvé de vieux fichiers de tests), un truc de malade.


    Bah, je vais lâcher l'affaire quelques heures, histoire que la tempête se calme.

    Bon wik,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    Citation Envoyé par Jipété Voir le message
    ... Oui, mais pour voler ça devient tout de suite plus compliqué,
    Oh, mais on n'arrête pas le progrès ! Voir le lien récemment proposé sur un autre forum ...

    Citation Envoyé par Jipété Voir le message
    ... Quant à moi, je suis face à un problème hallucinant ... mais depuis ce matin il m'est impossible de recréer les fichiers que j'ai générés hier soir en testant les filtres : les résultats sont systématiquement pourris ... un truc de malade.
    Bah, je vais lâcher l'affaire quelques heures, histoire que la tempête se calme ...
    Rien de tel qu'un peu de détente pour y voir plus clair ! (1)

    Citation Envoyé par Jipété Voir le message
    ... J'ai trouvé ça, c'est sympathique même si très compliqué pour moi, d'autant plus que je n'y trouve pas la réponse à ma question (comment appliquer radius 1, 2, 3 tel que montré dans le "Fundamentals"), mais c'est peut-être une mauvaise question ...
    Voilà comment je vois le problème, d'un point de vue qualitatif et tout à fait extérieur: les matheux spécialistes apporteront les précisions (ou les rectifications) nécessaires.
    Le filtre fait le lien entre deux ensembles discrets, les images de départ (A) et d'arrivée (B) par l'intermédiaire d'une fonction réelle d'une variable réelle, continue, paire, maximale au centre (x = 0) et nulle au-delà d'un seuil (x = ± 1); par exemple la fonction triangle F(x) définie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF Abs(x)<1 THEN F:= 1 - Abs(x) ELSE F:= 0;
    Soit par ailleurs une image (A) unidimensionnelle, réduite à une ligne de 100 pixels [0 <= i < 100] et sa transformée (B) trois fois plus grande, et comportant par conséquent 300 pixels [0 <= j < 300].
    Une correspondance rudimentaire entre les 2 indices (i:= j DIV 3) conduirait à un résultat grossier, ensemble de 100 agrégats unicolores de largeur (3); il faut donc, dans la nouvelle image, calculer 200 nouveaux pixels dont la couleur s'accorde à celle de leurs voisins exactement définis, et dont les rangs sont multiples de 3: (j = 3*i).

    On peut s'en sortir par l'introduction des conventions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     CONST R = 3;    // valeur du rayon (radius ?) définie en constante
     a:= Round(j/3); i:= a + k; x:= (j - 3*i)/R;
    et envisager la couleur obtenue (provisoirement réelle, puis ramenée à une entier de format Byte): Cb = Sk=-2+2(Ca[a+k]*F(xk)) ;
    on obtient dans ces conditions, pour 4 valeurs consécutives de l'indice (j):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      j         a        Cb
     99        33        Ca[31]*F(2)  +  Ca[32]*F(1)  +  Ca[33]*F(0)  +   Ca[34]*F(-1)  +  Ca[35]*F(-2)   = Ca[33]
    100        33        Ca[31]*F(7/3) + Ca[32]*F(4/3) + Ca[33]*F(1/3)  + Ca[34]*F(-2/3) + Ca[35]*F(-5/3) = (2/3)*Ca[33] + (1/3)*Ca[34]
    101        34        Ca[32]*F(5/3) + Ca[33]*F(2/3) + Ca[34]*F(-1/3) + Ca[35]*F(-4/3) + Ca[36]*F(-7/3) = (1/3)*Ca[33] + (2/3)*Ca[34]
    102        34        Ca[32]*F(2)  +  Ca[33]*F(1)  +  Ca[34]*F(0)  +   Ca[35]*F(-1)  +  Ca[36]*F(-2)   = Ca[34]
    Ainsi lorsque (j) varie de (99) à (102), la couleur (Cb) des pixels passe progressivement de celle du premier pixel antécédent (33) à la suivante.

    Un plus grand rayon (R>3) ferait apparaître un plus grand nombre de termes non-nuls, donc un flou plus marqué par lissage de couleur sur une zone plus étendue de l'image initiale (A).
    Un rayon plus faible estomperait aussi les détails par création d'irrégularités quasi-périodiques, la somme pouvant alors présenter des valeurs plus dispersées; un rayon très faible (R<0.1) conduirait dans le cas présent à une image lacunaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (j MOD 3 = 0) THEN Cb[j]:= Ca[j DIV 3] ELSE Cb[j]:= 0;
    Il existe donc bien, pour un filtre donné, une valeur optimale du rayon (R = g ?) pour laquelle la résolution de l'image agrandie est maximale.

    Voilà le principe simple (ou simpliste ?) du calcul, pour un agrandissement entier supérieur à l'unité; une valeur quelconque (g = LB / LA > 1) du rapport conduirait à des résultats analogues, mais plus lourds à formaliser.
    La notation est volontairement personnelle, afin d'éviter toute interférence avec celle de ton code.

    (1) J'ai connu mésaventure semblable : tu as sans doute oublié de reporter une modification dans l'une des unités, procédures ou fonctions concernées. Cafouillage assuré !
    J'en suis venu à indexer tous les versions successives des mes unités encore en évolution: Bitmap_01, Bitmap_02, ... etc. afin de connaître laquelle est appelée par un programme donné.
    Il faut même détruire toute ancienne version devenue inutile, incompatible avec les programmes conservés.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  15. #15
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Bonjour,

    J'ai réglé mon cafouillage d'hier, j'ai mis en place de nouveaux filtres (en m'appuyant sur le lien d'anapurna [bon, il y en a deux qui plantent violemment et deux autres que je ne peux pas mettre en service pour une raison qui m'échappe]), j'ai quand même maintenant une belle collection de filtres, avec des doublons qu'il va falloir trier, et maintenant je vais m'atteler à vérifier ce qu'on trouve sur d'autres sites, par exemple :
    I have suggested that it is best to use Bilinear to shrink images and Bicubic to enlarge them. In fact I believe it is a rule that shouldn't be broken. But then again there is mixed opinion even among experts on this matter. Digital photo experts JASC (makers of Paint Shop Pro) comment: "Use the Bilinear Resampling method for shrinking these images and Bicubic for enlarging them".
    source

    De ce que j'en ai vu, l'agrandissement est bien avec BiLinear et la réduction avec Lanczos ou Mitchell.
    Mais notez-le (et faites vos propres essais), les résultats ne sont pas les mêmes avec des sources Jpeg !

    Et surtout, surtout, certains filtres sont adaptés au traitement de lignes et ne valent rien pour la vraie vie, je pense entre autres à Box (réduction à 80 %) :
    Nom : Box.jpg
Affichages : 495
Taille : 36,3 Ko
    alors qu'on peut lire, dans la doc d'une suite de composants graphiques,
    rfBox, {** Equivalent of simple stretch with high quality (aka Nearest Neighbor) }
    Ah !

    Bon, lecture1 (ça va te plaire) et lecture2, un comparatif intéressant tout en bas de la page.


    Et bonne suite de week-end,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #16
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    bon je vois des que l'on tourne le dos ... les thread s'agrandisse a vitesse grand v

    pour mitchel ici

    http://lazarus-ccr.sourceforge.net/d...rpolation.html

    pour l'interpolation du canvas
    le canvas
    http://lazarus-ccr.sourceforge.net/d...tomcanvas.html
    la propriete qui nous interesse
    http://lazarus-ccr.sourceforge.net/d...rpolation.html
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  17. #17
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    voici d'autres liens plus interessant encore

    https://github.com/graemeg/freepasca...terpolation.pp
    et cerise sur le gateaux
    https://github.com/graemeg/freepasca...c/fpcanvas.inc

    je presente la parti qui nous interesse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure TFPCustomCanvas.StretchDraw(x, y, w, h: integer; source: TFPCustomImage);
    var
        FreeInterpolation : boolean;
        IP : TFPCustomInterpolation;
    begin
      FreeInterpolation := not assigned (FInterpolation);
      if FreeInterpolation then
        IP := TMitchelInterpolation.Create
      else
        IP := FInterpolation;
      try
        with IP do
        begin
          Initialize (source, self);
          Execute (x,y,w,h);
        end;
      finally
        if FreeInterpolation then
          IP.Free;
      end;
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Salut,

    un truc m'échappe dans les liens que tu donnes :
    Citation Envoyé par anapurna Voir le message
    voici d'autres liens plus intéressants encore

    https://github.com/graemeg/freepasca...terpolation.pp
    d'abord extinterpolation.pp tu l'as déjà donné le 2 juin :
    Citation Envoyé par anapurna Voir le message
    pourquoi se prendre la tête alors que la plupart des algo sont déjà implémentés
    regarde l'unite extinterpolation ici
    Ensuite il me semble avoir signalé que j'étais arrivé à tous les faire fonctionner (à part 2, mais c'est pas bien grave), d'ailleurs j'ai cliqué sur , mais surtout je n'ai pas trouvé comment aller modifier leurs paramètres de fonctionnements (chose qui m'intéressait au plus haut point, mais ça n'a pas l'air prévu par les auteurs de filtres) et en outre, tant que je ne peux pas comparer pixel à pixel l'original avec sa copie filtrée, il est illusoire d'espérer avancer ici.

    Donc pour le moment, retour au code Lazarus !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    ça doit être la fatigue le long week-end a été chargé et je suis plus tout jeune mon bon monsieur
    moi aussi les problème de cheveux je connais pas
    bon on va donc se concentrer sur l'autre thread ... mais le truc sympa serait de faire un petit projet simple livré avec les images ou le probleme persiste ...
    parcque dans tout les thread j'ai un peu perdu le fil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Comment fonctionnent les filtres de rééchantillonnage trouvés sur le web ?
    Citation Envoyé par Jipété Voir le message
    ... en outre, tant que je ne peux pas comparer pixel à pixel l'original avec sa copie filtrée, il est illusoire d'espérer avancer ici ...
    Vu la complexité des fonctions en cause, cela n'a rien d'évident !
    Tu peux cependant voir ce qui se passe qualitativement dans le cas:
    - du filtre le plus simple (triangle),
    - d'une image élémentaire (rangée verticale isolée de pixels blancs sur fond noir),
    après agrandissement horizontal de l'image (sa dimension étant multipliée par un facteur entier).

    Les documents consultés sur ce forum m'ont donné une idée sur un tout autre sujet: le tracé des graphes définis par des équations du type F(x, y), sans possibilité d'exprimer d'une façon explicite l'une des coordonnées en fonction de l'autre.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [FLASH 8] Comment fonctionne les clips
    Par steeves5 dans le forum Flash
    Réponses: 3
    Dernier message: 27/01/2006, 11h23
  2. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 19h05
  3. Réponses: 27
    Dernier message: 07/10/2005, 17h17
  4. Réponses: 2
    Dernier message: 18/08/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo