[PYTHON] _ 2. Tag bis eine gute Genauigkeit durch Blattklassifizierung erreicht wird

Ich mache ein Tutorial über Tensorflow und fange endlich an, es zu verstehen. Dieses Mal werde ich Tensorflow für die Blattklassifizierung verwenden.

Übrigens werden die ** 192 Merkmalsgrößen, die ich in der vorherigen englischen Veröffentlichung irgendwie verstanden habe, nicht verwendet, sondern als 99-Klassen-Klassifizierungsproblem für 990 Bilder ** behandelt.

Ich habe ** OpenCV ** für die Vorverarbeitung verwendet.

Bildvorverarbeitung

Zuerst lesen

Lesen.py


import cv2
import matplotlib.pyplot as plt

images = []
for i in range(1,1585):
    image = cv2.imread("images/%d.jpg "%i)
    grayed = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    images.append(grayed)

Lesen Sie zunächst jedes Bild aus dem Ordner "image" im selben Ordner, während Sie es in Graustufen erstellen, und speichern Sie es in der Liste "images".

Versuchen wir als nächstes die Vorverarbeitung des vorherigen Artikels. Der erste in Bildern ist ursprünglich fast quadratisch, daher werden wir uns hier Bilder ansehen [1]. Bilder [1] sind das übrigens.

スクリーンショット 2017-07-11 8.17.46.png

Sie können sehen, dass es an der Seite eine längliche Form hat.

Der erste. Es ist eine Methode, das Verhältnis zu (100.100) zu überdenken, ohne zu viel nachzudenken.

Vorbehandlung 1.py


plt.imshow(cv2.resize(images[1], (100, 100)), "gray")
plt.show()

new_image.jpg

Immerhin ist das Merkmal der Schlankheit verschwunden, so dass es nicht gut zu sein scheint.

Dann der zweite. Machen Sie zum Schluss ein Quadrat, während Sie das Verhältnis beibehalten.

Vorbehandlung 2.py


end_size = 100 #Endgültige vertikale und horizontale Größe
max_ = np.maximum(images[1].shape[0], images[1].shape[1]) #Max die größere in vertikaler und horizontaler Richtung_Der Variablen zuweisen.
scale = end_size / max_
height, width = images[1].shape
size = (int(width*scale), int(height*scale)) #Stellen Sie den größeren Wert auf 100 ein, während Sie die Skala beibehalten.

rescale_image = cv2.resize(images[1], size, interpolation=cv2.INTER_CUBIC) #Größe ändern.

height, width = rescale_image.shape #Dann versuchen Sie es erneut.

#Wenn die Breite größer ist,[(Breite Höhe)/2,Breite]Es ist ein Prozess, eine 0-Matrix zu erstellen und sie auf und ab zu addieren.
#Dadurch bleibt das Bild in der Mitte.
if width > height:
    z_pad = np.zeros([int((width-height)/2), width], dtype=np.uint8)
    end_image = np.vstack((z_pad, rescale_image, z_pad))
else:
    z_pad = np.zeros([height, int((height - width)/2)], dtype=np.uint8)
    end_image = np.hstack((z_pad, rescale_image, z_pad))

#Wenn der Wert für Breite und Höhe ungerade ist, beträgt er 99, sodass die Größe auf 100 geändert wird.
end_image = cv2.resize(end_image, (100, 100))
    
print(end_image.shape)
plt.imshow(end_image, "gray")
スクリーンショット 2017-07-11 8.24.55.png

Anscheinend war es erfolgreich.

Übrigens mit einigen Änderungen

Vorbehandlung 2_2.py


if width > height:
    z_pad = np.zeros([width-height, width], dtype=np.uint8)
    attempt_image = np.vstack((z_pad, rescale_image))
    M = np.float32([[1,0,0],[0,1,-(width-height)/2]])
    end_image = cv2.warpAffine(attempt_image, M,(end_size,end_size))
else:
    z_pad = np.zeros([height, height - width], dtype=np.uint8)
    attempt_image = np.hstack((z_pad, rescale_image))
    M = np.float32([[1,0,-(height-width)/2],[0,1,0]])
    end_image = cv2.warpAffine(attempt_image, M,(end_size,end_size))

Sie können auch das gleiche Bild erhalten, indem Sie dies tun. Hier zuerst

new_image2.jpg Nachdem Sie ein solches Bild erstellt haben (try_image), wird es durch paralleles Bewegen in die Mitte gezogen.

Wenden Sie dies auf alle an und die Vorverarbeitung ist beendet.

Eine andere Methode besteht darin, ein mit 0s gefülltes 100x100-Numpy-Array zu erstellen und dann ein Bild mit einer Skalierung zu platzieren, die in $ 100 x K (k ≤ 100) $ geändert wurde.

Die Implementierungsversion wird wahrscheinlich wieder lang sein, daher werde ich sie einmal teilen.

Recommended Posts

_ 2. Tag bis eine gute Genauigkeit durch Blattklassifizierung erreicht wird
_ 3. Tag bis eine gute Genauigkeit durch Blattklassifizierung erreicht wird
1. Tag, bis eine gute Genauigkeit durch Blattklassifizierung erreicht wird
Lernaufzeichnung (2. Tag) Scraping von #BeautifulSoup