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 :

Sous-échantillonnage d'une image


Sujet :

Traitement d'images

  1. #1
    Candidat au Club
    Homme Profil pro
    astrophysicien
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : astrophysicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Sous-échantillonnage d'une image
    Bonjour à tous,

    je suis un débutant en traitement d'image. Mon problème est le suivant : je cherche à créer une icone à partir d'une image d'origine beaucoup plus imposante. Il me semble donc évident qu'il faut sous-échantillonner cette image c'est à dire prendre un pixel sur "x" de façon à dégonfler cette image.

    L'image de départ à une taille de 2567 * 9280 (largeur * hauteur). Je cherche à obtenir une icone de cette image c'est a dire une image de :
    128 * ((9280/2567)*128) (en respectant les proportions initiales)

    L'image d'origine est un ppm codé sur 12-bits RGB.

    J'avais pensé à l'algo suivant mais ça ne fonctionne pas aussi bien que prévu
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int sampling_factor = 128;
    int step = width / sampling_factor;
    for (i = 0; i < buffer_size; i+= step) {
        flux<< buffer[0][i] <<" "<<buffer[1][i] << " "<<buffer[2][i];
        if ((i>0) && (i % (sampling_factor*step) == 0)){
            flux << "\n";
        } else {
            flux<< " ";
        }
    }


    Précision : "buffer" est un tableau bidimensionnel, pour, respectivement, les couleurs (RGB = 0,1 ou 2) et la valeur des pixels.


    Quelqu'un pourrait-il m'aider à améliorer mon algo afin qu'il fonctionne convenablement ?

    PS : désolé si l’algo n'est pas très lisible ...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Tu dois en effet avoir une icone assez moche (tres pixellisée). Ce que je te conseille, c'est de partir de ton image destination vide (l'icone) et pour chaque pixel, tu regardes dans l'image originale quelle zone ça recouvrerait (si tu réduis par 2, alors la zone originale est un carré de 2x2), et tu calcules la moyenne des pixels dans la zone. Cette valeur moyenne est la valeur que doit avoir le pixel courant dans l'icone.

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    L'image de départ à une taille de 2567 * 9280 (largeur * hauteur). Je cherche à obtenir une icone de cette image c'est a dire une image de :
    128 * ((9280/2567)*128) (en respectant les proportions initiales)
    On parle tout de même de réduire l'image par 20. Du sous-échantillonnage va engendrer beaucoup de perte d'information.

    Il vaut mieux utiliser des techniques de "resampling": Lanczos ou Area-averaging, par exemple.

  4. #4
    Candidat au Club
    Homme Profil pro
    astrophysicien
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : astrophysicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses. Je vais essayer de regarder les méthodes que vous m'avez citées pour essayer de générer une icone qui soit la moins pixelisées possibles.

    Malgré tout, ces méthodes me paraissent assez complexe pour le débutant que je suis ...

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par bjjnerd Voir le message
    Merci pour vos réponses. Je vais essayer de regarder les méthodes que vous m'avez citées pour essayer de générer une icone qui soit la moins pixelisées possibles.

    Malgré tout, ces méthodes me paraissent assez complexe pour le débutant que je suis ...
    L' Area-averaging (moyennage de zone) est assez simple à faire.

    Avec des images de grandes tailles comme les tiennes, on peut même un peu tricher pour le simplifier encore plus:

    - on rogne les bords de l'image de départ pour que ses dimensions soient multiples d'un bloc carré de 128x128. Dans notre cas, c'est un facteur 20.

    (2567 x 9280) --> (2560 x 7680) = (128*20 x 128*20*3)

    - on calcule la moyenne dans chaque zone de 20x20, ce qui nous donne la valeur du pixel resamplé pour cette zone. Au final, on obtient une image resamplé de (128 x 128*3).

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2008, 02h23
  2. Recuperer sous partie d'une image
    Par shinji_rem dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/06/2007, 13h14
  3. Sous échantillonnage dans une liaison serie
    Par riadhz dans le forum C++
    Réponses: 2
    Dernier message: 06/06/2007, 09h40
  4. Réponses: 5
    Dernier message: 03/04/2007, 14h44
  5. comment afficher cursor: hand sous FF pour une image?
    Par Death83 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/09/2005, 09h48

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