Interpolation d'image - interpolation du voisin le plus proche

Base théorique

L'essence de l'interpolation : utiliser des données connues pour estimer des valeurs de position inconnues.

Interpolation du voisin le plus proche : la valeur du pixel d'un point inconnu est égale à la valeur du pixel le plus proche .
Interpolation unidimensionnelle du plus proche voisin

Implémentation du codage (Python)

# coding=utf-8
import cv2
import numpy as np

def Nearest(img, up_height, up_width, channels):
    nearest_img = np.zeros(shape=(up_height, up_width, channels), dtype=np.uint8)
    img_height, img_width, img_channels = img.shape
    for i in range(up_height):
        for j in range(up_width):
            row = int(i * img_height/up_height + 0.5)
            col = int(j * img_width/up_width + 0.5)
            if row == img_height: row -= 1
            if col == img_width: col -= 1

            nearest_img[i][j] = img[row][col]
    return nearest_img

if __name__ == "__main__":
    # 无法处理透明度通道(压根就没读进来)
    img_source = cv2.imread(r"Image_restoration\source\1.png")
    img_height, img_width, img_channels = img_source.shape
    print("height {}, width {}, channels {}".format( img_height, img_width, img_channels))

    times = 3 # 放大3倍
    up_height = int(img_height * times)
    up_width = int(img_width * times)
    print("up_height {}, up_width {}".format(up_height, up_width))
    nearest_img = Nearest(img_source, up_height, up_width, img_channels)

    cv2.imshow("img_source", img_source)
    cv2.imshow("nearest_img", nearest_img)
    cv2.imwrite(r"Image_restoration\result\1_nearest.png", nearest_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

autre

  1. Agrandissement et réduction des images : en plus d'agrandir les images, l'interpolation du plus proche voisin peut également être utilisée pour réduire les images (sous-échantillonnage). Pour une implémentation spécifique, changez simplement les temps en décimales.
  2. Réparer les images : l'interpolation du voisin le plus proche peut également effectuer une réparation d'image simple, ce qui convient aux situations où les pixels sont détruits de manière aléatoire.
  3. Il est facile de former des blocs de couleur après avoir agrandi l'image, ce qui a peu d'effet sur l'amélioration de la haute définition de l'image. (Visuellement, il n'y a aucune différence entre l'image agrandie par la souris)
    Insérer la description de l'image ici
    Le côté droit montre l'agrandissement en cliquant sur la souris, et le côté gauche montre l'agrandissement après traitement par algorithme. Les effets visuels sont presque les mêmes.

Je suppose que tu aimes

Origine blog.csdn.net/2201_75691823/article/details/129625075
conseillé
Classement