Amélioration résolution image; Lanczos resampling [Résolu]
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Amélioration résolution image; Lanczos resampling [Résolu]



  1. #1
    dembelekun

    Amélioration résolution image; Lanczos resampling [Résolu]


    ------

    Bonjour,
    J'essaye de m'intéresser à l'amélioration de la qualité d'image. Je souhaiterais augmenter la résolution / qualité d'une image en utilisant la méthode d'interpolation de Lanczos pour une image en 2D.
    Seulement, lorsque j'exécute mon programme, mon image n'est pas de meilleure qualité. Elle est plus petite ?, je ne comprends pas pourquoi.

    Pour la partie théorie, j'ai utilisé :

    -https://en.wikipedia.org/wiki/Lanczos_resampling
    -https://stackoverflow.com/questions/...rpolation-in-c
    -https://www.youtube.com/watch?v=ijmd6XyG2HA

    L'image initiale ( sentinel2.jpg) et l'image après traitement (Figure 2024-07-08 115751.png)


    Je vous remercie pour votre aide !

    Ps: j'utilise numba d'anaconda pour accélérer le programme.
    Code:
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    from numba import njit
    from math import floor
    
    # Chargement de l'image et conversion en tableau numpy
    img = np.array(Image.open(r"D:\Nouveau dossier\.Icloud\iCloudDrive\Pour le fun\Qualité image\Python\sentinel2.jpg"))
    
    # Fonction Lanczos
    @njit
    def L(x, a):
        if x == 0:
            return 1
        elif -a <= x < a:
            return a * np.sin(np.pi * x) * np.sin(np.pi * x / a) / ((np.pi * x) ** 2)
        else:
            return 0
    
    # Interpolation Lanczos 2D
    @njit
    def lanczos_interpolation(img, a, m):
        nX, nY, _ = img.shape
        nX_f = nX * m
        nY_f = nY * m
        img_hdr = np.zeros((nX_f, nY_f, 3), dtype=np.uint8)
    
        for rgb in range(3):
            for x_f in range(nX_f):
                for y_f in range(nY_f):
                    s = 0
                    x = x_f / m
                    y = y_f / m
                    for i in range(floor(x)-a +1, floor(x)+a+2):
                        for j in range(floor(y)-a +1 , floor(y)+a+2):
                            if 0 <= i < nX and 0 <= j < nY:
                                s += img[i, j, rgb] * L(x-i, a) * L(y-j, a)
                    img_hdr[x_f, y_f, rgb] = s
        return img_hdr
    
    # Appeler la fonction d'interpolation
    img_interpolated = lanczos_interpolation(img, a = 3, m = 3)
    
    # Afficher l'image interpolée
    plt.imshow(img_interpolated)
    plt.axis('off')
    plt.show()

    -----

  2. #2
    Henrix

    Re : Amélioration résolution image; Lanczos resampling

    Qu'appelle-tu "améliorer une image" ?
    Surtout quand celle-ci peut être qualifiée d'excellente
    Dernière modification par Henrix ; 08/07/2024 à 17h45.

  3. #3
    umfred

    Re : Amélioration résolution image; Lanczos resampling

    Est-ce que tu as affiché de la même façon ton image source via matplotlib pour voir si il te l'affiche de la même taille?

  4. #4
    pm42

    Re : Amélioration résolution image; Lanczos resampling

    Citation Envoyé par dembelekun Voir le message
    Bonjour,
    Seulement, lorsque j'exécute mon programme, mon image n'est pas de meilleure qualité. Elle est plus petite ?, je ne comprends pas pourquoi.
    Elle n'est pas plus petite. C'est juste matplotlib qui doit te l'afficher en 640x480.

    Tu peux faire ça à la place :

    Code:
    [B]# Afficher l'image interpolée
    #plt.imshow(img_interpolated, resample=False)
    #plt.axis('off')
    #plt.show()
    image = Image.fromarray(img_interpolated, 'RGB')
    image.show()
    Sur un PC, je ne sais pas comment ça affiche mais sur mon Mac, ça lance Aperçu qui me confirme que l'image fait 3300x2106 donc bien 3 fois l'original.

  5. A voir en vidéo sur Futura
  6. #5
    Ernum

    Re : Amélioration résolution image; Lanczos resampling

    Salut,

    idem sur PC (Debian), j'obtiens le même résultat.

    hs:
     Cliquez pour afficher

  7. #6
    dembelekun

    Re : Amélioration résolution image; Lanczos resampling

    Merci beaucoup, ça fonctionne !

Discussions similaires

  1. Interpolation/resampling d'un signal en python
    Par Yoghourt dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 17/07/2020, 06h36
  2. Canon EOS réglage style d'image pour amélioration de netteté image
    Par invitecb18736d dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 4
    Dernier message: 30/07/2015, 20h17
  3. Conversion d'une vidéo basse résolution en image très haute résolution
    Par invite0f178c4b dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 10
    Dernier message: 28/03/2014, 15h01
  4. Resampling dans les règles de l'art ?
    Par adrienlucca dans le forum Physique
    Réponses: 6
    Dernier message: 29/11/2012, 12h28
  5. logiciel d'amélioration d'image
    Par invitedc8913db dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 13/08/2008, 10h53