[PYTHON] Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image

Aidemy 2020/9/23

introduction

Bonjour, c'est Yope! Je suis un étudiant, mais je suis intéressé par le domaine de l'IA, alors j'étudie à l'école spécialisée en IA "Aidemy". Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le troisième article du nettoyage des données. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ À propos des données d'image ・ Ce que vous pouvez faire avec OpenCV (bibliothèque qui gère les images)

1 À propos des données d'image

"Color" sur l'ordinateur

-Dans les données, la couleur est exprimée sous forme de RGB data en rouge, vert et bleu (255,0,255, etc.). -L'image est constituée d'une collection de points __ (pixels) . -Le nombre d'éléments de couleur pour représenter un pixel est appelé __ numéro de canal («3» car il y a trois couleurs en RVB).

Type de données d'image

・ BMP ne peut pas être compressé et est de grande taille ・ JPG Hautement compressible mais non décompressable ・ Compression et décompression PNG possibles, traitement transparent possible ・ Prend en charge l'animation GIF, traitement transparent possible

2 OpenCV

Charger et afficher des images avec OpenCV

-OpenCV est une bibliothèque utilisée lors de la gestion des images. Importez et utilisez cv2. -Lire avec __cv2.imread ("nom de fichier") __ Affichage avec __cv2.imshow ("nom de la fenêtre", lire les données d'image) __ (le nom de la fenêtre peut être attribué librement)

import cv2
#sample.Chargez une image avec le nom de fichier jpg
img = cv2.imread("./4050_data_cleansing_data/sample.jpg ")
#Img de sortie avec le nom de la fenêtre comme fenêtre
cv2.imshow("window",img)

Création et enregistrement d'images (une seule couleur)

-Pour créer une image, utilisez la fonction _np.array () __ (une fonction qui crée une matrice NumPy). De plus, range () est mis en boucle plusieurs fois sans variables pour définir les informations de pixel vertical et horizontal (l'ordre est bleu, vert et rouge). __ · np.array ([[valeurs B, V, R] pour _ dans la plage (taille horizontale)] pour dans la plage (taille verticale)], dtype = "uint8") __

#(512*512)Un côté vert(0,255,0)Créer une image de
img = np.array([[[0,255,0]for _ in range(512)]for _ in range(512)],dtype="uint8")
#Enregistrer img(Le nom du fichier est "vert".img」)
cv2.imwrite("green.img",img)

Rognage (coupe), redimensionnement (agrandissement / réduction)

-Réglage correspond à __ données d'image [point de départ de l'axe y: point final de l'axe y, point de départ de l'axe x: point final de l'axe x] __ 0 est le coin supérieur gauche -Resize est changé avec __cv2.resize (données d'image, (largeur, hauteur)) __.

#Obtenir la taille de l'image pour le rognage(la taille,largeur,Nombre de couleurs)
size = img.shape #(1000,667,3)
#La hauteur est de 1/2, largeur 1/Coupez à 3 (ne spécifiez pas le point de départ, divisez pour qu'il n'y ait pas de reste)
new_img=img[:size[0]//2,:size[1]//3]
#Redimensionné à double hauteur et triple largeur
new_img=cv2.resize(new_img,(new_img.shape[0]*2,new_img.shape[1]*3))

Rotation / inversion

-La rotation de l'image nécessite une transformation appelée transformation affine, et la matrice de transformation doit être obtenue. -Obtenir la matrice de conversion avec __cv2.getRotationMatrix2D (coordonnées centrales de l'image, angle de rotation, grossissement de l'agrandissement / réduction) __. -Et en fait tourner avec __cv2.warpAffine (image, matrice de conversion, taille de sortie) __.

-L'inversion se fait avec __cv2.flip (image, flipCode) __. Pour le deuxième argument, si "0" est spécifié, il sera inversé verticalement, si un nombre positif est spécifié, il sera inversé horizontalement, et si un nombre négatif est spécifié, il sera inversé verticalement et horizontalement.

#Obtenez la matrice de transformation(Rotation de 90 degrés à un grossissement 2x)
mat=cv2.getRotationMatrix(tuple(np.array([img.shape[1],img.shape[0]])/2),90,2.0)
#En fait tourner
cv2.warpAffine(img,mat,img.shape[::-1][1:3])

Conversion des couleurs / inversion des couleurs

-Jusqu'à présent, seul «l'espace colorimétrique BGR» était utilisé, mais il existe d'autres espaces colorimétriques sur OpenCV. -Vous pouvez changer l'espace colorimétrique avec __cv2.cvtColor (image, code de conversion) __. Le code de conversion est, par exemple, "cv2.COLOR_BGR2LAB" lorsque vous souhaitez convertir l'espace colorimétrique BGR en un espace colorimétrique appelé Lab.

-L'inversion des couleurs peut également être effectuée en retirant chaque pixel à son tour et en définissant la valeur x sur "255-x". Vous pouvez facilement le retourner avec __cv2.bitwise_not (image) __.

#Espace colorimétrique img remplacé par Lab
c_img=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
#Inverser la couleur de l'image
r_img=cv2.bitwise_not(img)

Application d'OpenCV

Traitement des seuils

-Afin de réduire la taille de l'image, seules les données de couleur «blanc» et «noir» sont utilisées. -__ Cv2.threshold (image, seuil, valeur maximale (densité), type de traitement de seuil) __

#Seuil 127, valeur maximale 255, le type est cv2.THRESH_TOZERO(0 sous le seuil, pas de changement au-dessus du seuil)
new_img=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)

masquage

-Si une image de masque en noir et blanc est préparée séparément et combinée avec l'image d'origine à l'aide de la fonction cv2.bitwise_and (), seule la partie blanche de l'image de masque sera sortie de l'image d'origine. C'est ce qu'on appelle le "masquage". -__ Cv2.bitwise_and (image originale 1, image originale 2 (utilisée lors du masquage), masque = image noir et blanc pour le masque) __

#Lisez l'image du masque (image en noir et blanc avec 1 canal) et redimensionnez-la pour qu'elle ait la même taille.
mask=cv2.imread("./4050_cleansing_data/mask.png ", 0)
mask=cv2.resize(mask,(img.shape[1],img.shape[0]))
#Masque
cv2.bitwise_and(img,img,mask=mask)

Brouiller l'image

-Utilisez le "filtre gaussien" pour brouiller l'image. Moyenne et flou n * n (n est un nombre impair) autour d'un pixel. -__ Cv2.GaussianBlur (image, (valeur de n * n), écart type) __

#(51*51)Brouiller
new_img=cv2.GaussianBlur(img,(51,51),0)

Suppression du bruit (rugueux)

・ Utilisez __cv2.fastNlMeansDenoisingColored (image) __. S'il ne s'agit pas d'une image en couleur, le nom de la fonction «Coloré» peut être omis. (Nl Means fait référence à un filtre de suppression de bruit appelé filtre de moyens non locaux, le débruitage signifie l'élimination du bruit)

new_img=cv2.fastNlMeansDenoisingColored(img)

Rétrécissement / expansion

-Une autre méthode de traitement du bruit consiste à réduire l'image une fois, puis à l'agrandir à nouveau. Cette méthode est souvent utilisée pour l'élimination du bruit par «traitement de seuil». -Agrandir avec __cv2.dilate (image, filtre) __, contrat avec __cv2.erode (image, filtre) __.

#Traitement des seuils d'img
new_img=cv2.threshold(img,127,255,cv2.THRESH_BYNARY)
#Définition du filtre
filter=np.array([[0,1,0],[1,0,1],[0,1,0]],np.uint8)
#Réduisez et développez
new_img=cv2.erode(new_img,filter)
new_img=cv2.dilate(new_img,filter)

Résumé

-Les données d'image sont traitées par OpenCV. -Dans OpenCV, vous pouvez lire des images avec __imread () __, afficher des images avec __imshow () __, redimensionner avec __resize () __, inverser avec __flip () __ et inverser les couleurs avec ** bitwise_not **. De plus, vous pouvez créer des images, rogner et faire pivoter. -En tant qu'application, utilisez __threshold () __ pour le traitement des seuils, ** bitwise_and () ** pour le masquage et __GaussianBlur () __ pour le flou. De plus, le bruit peut être supprimé.

Recommended Posts

Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image
Application de Python: Nettoyage des données Partie 3: Utilisation d'OpenCV et prétraitement des données d'image
Pré-traitement des données préfectorales
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Histoire de l'analyse d'image du fichier PDF et de l'extraction de données
Vue d'ensemble du traitement du langage naturel et de son prétraitement des données
Utilisation et intégration de "Shodan"
Construction d'environnement de python et opencv
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Prétraitement des fichiers de vidage Wikipedia et partage de grandes quantités de données avec MeCab
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
Séparation de la conception et des données dans matplotlib
Introduction facile de la série python3 et d'OpenCV3
Nettoyage des données des données ouvertes de la situation d'occurrence du ministère de la Santé, du Travail et des Affaires sociales
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Utilisez Pillow pour rendre l'image transparente et en superposer une partie seulement
[Kaggle] De la lecture des données au prétraitement et au codage
Générer et publier des données d'image factice avec Django
Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)
environnement de développement python -utilisation de pyenv et virtualenv-
Utilisation des données météorologiques passées 1 (affichage des points Amedas)
Conversion en ondelettes d'images avec PyWavelets et OpenCV
J'ai essayé d'utiliser le filtre d'image d'OpenCV
fonctions cv2 et types de données (liaison python OpenCV)
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Quoi utiliser pour les piles et les files d'attente Python (comparaison de vitesse de chaque structure de données)
Image de fermeture
Analyse des données financières par pandas et leur visualisation (2)
Traitement pleine largeur et demi-largeur des données CSV en Python
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Analyse des données financières par pandas et leur visualisation (1)
Générer une image verticale d'un roman à partir de données textuelles
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Capture d'image / comparaison de la vitesse OpenCV avec et sans GPU
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Utilisons les données ouvertes de "Mamebus" en Python
EP 7 Utiliser les compréhensions de liste au lieu de carte et de filtre
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.