Aidemy 2020/9/23
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)
-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).
・ 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
-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)
-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)
-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))
-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])
-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)
-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)
-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)
-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)
・ 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)
-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)
-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é.