[PYTHON] Suppression du bruit et transparence de l'arrière-plan des images binarisées

introduction

Plus tôt, j'ai écrit un article Bases du traitement d'image binarisé par Python. C'est le développement de cet article.

À propos du traitement de l'exécution

Cette fois, comme le nom de l'article l'indique, __ · Suppression du bruit __ __ ・ Transparence du fond __ en plus, __ ・ Traitement d'image inversé __ Exécutez également

Code source


import cv2
import numpy as np

#Chargement des images
img = cv2.imread('sample2-1.png')

#Conversion de l'échelle de gris
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

#Définition du seuil
threshold_value = 110

#Créer un tableau (pour la sortie)
threshold_img = gray.copy()

#la mise en oeuvre(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255

#Output:sample2-2
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)

#Importation d'images converties en niveaux de gris
img = cv2.imread("sample2-2.png ")
#Traitement d'élimination du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)
#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)

#output:sample2-3,2-4
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)

#Transparence d'arrière-plan

from PIL import Image

#Chargement des images
org = Image.open( 'sample2-3.png' )

#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Pas de traitement blanc
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Écriture autre que blanche
        trans.putpixel( (x, y), pixel )
        
# output:sample2-5
trans.save('sample2-5.png')

instructions

De l'instruction d'importation à la sortie: sample2-2

C'est presque le même que le code de Bases du traitement d'images binarisées par Python décrit ci-dessus. Seul le seuil est modifié sur l'image.

Suppression du bruit

#Suppression du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)

Cette partie est un endroit pour définir la taille du voisinage où le traitement d'image est effectué.

Traitement d'inversion noir et blanc

#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)

Le traitement d'inversion est intégré à opencv, et le traitement d'inversion n'est possible qu'avec cette instruction. Au fait, cette fois. Bien qu'il soit en noir et blanc, il peut également être exécuté avec une image couleur.

Création d'image transparente

#Chargement des images
org = Image.open( 'sample2-3.png' )

#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Pas de traitement blanc
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Écriture autre que blanche
        trans.putpixel( (x, y), pixel )

Puisque le processus est tel que décrit dans # ci-dessus, la description est omise.

Mettez ces résultats sample2-1 ~ 2-5.

Image originale (sample2-1.png)

sample2-1.png Cette image est souvent utilisée dans le traitement d'image, donc je pense que beaucoup de gens la connaissent. Cela fait partie d'une image nue d'une femme appelée Lena. [Explication sur Lena de Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%8A_(%E7%94%BB%E5%83%8F%E3%83] % 87% E3% 83% BC% E3% 82% BF)

Traitement d'images binarisées (sample2-2.png)

sample2-2.png

Traitement de suppression du bruit (sample2-3.png)

sample2-3.png

Traitement d'inversion noir et blanc (sample2-4.png)

sample2-4.png

Traitement de transparence autre que le blanc (sample2-5.png)

sample2-5.png C'est difficile à comprendre dans cet article, vous pouvez donc l'essayer vous-même en copiant le code.

Simplification du code source

Le code précédent rendait chaque processus plus facile à voir. Cependant, en modifiant l'ordre, le nombre d'étapes peut être réduit.


import cv2
import numpy as np
from PIL import Image

#Chargement des images
img = cv2.imread('sample2-1.png')
#Conversion de l'échelle de gris
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Définition du seuil
threshold_value = 110
#Créer un tableau (pour la sortie)
threshold_img = gray.copy()
#la mise en oeuvre(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255

#Traitement d'élimination du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)

#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)

#Transparence d'arrière-plan
#Chargement des images
org = Image.open('sample2-3.png')

#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Pas de traitement blanc
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Écriture autre que blanche
        trans.putpixel( (x, y), pixel )
        
#Output:sample2-2~2-5
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)
trans.save('sample2-5.png')

Lorsqu'il s'agit d'un traitement par lots, une erreur peut survenir, mais c'était possible avec jupyter notebook. Étant donné que l'image dans le processus peut être lue directement sans lecture, elle sera proche de l'erreur mais plus rapide.

Recommended Posts

Suppression du bruit et transparence de l'arrière-plan des images binarisées
Générez automatiquement des images de koala et d'ours
Conversion en ondelettes d'images avec PyWavelets et OpenCV
Afficher des images intégrées de mp3 et flac avec mutagène
Créez un lot d'images et gonflez avec ImageDataGenerator
Recherchez et enregistrez l'image de Tomono Kafu depuis Twitter
Collecte et automatisation d'images érotiques à l'aide du deep learning