69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
from sklearn.preprocessing import LabelEncoder
|
|
import numpy as np
|
|
import mahotas
|
|
import cv2
|
|
import os
|
|
import h5py
|
|
|
|
rozmiar_zdj = tuple((500, 500))
|
|
sciezka_do_zdj = "resources/smieci_stare"
|
|
h5_dane = 'parametry_zdjec.h5'
|
|
h5_etykiety = 'etykiety.h5'
|
|
|
|
|
|
def wyznaczHuMomenty(zdj):
|
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
|
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
|
|
return momenty
|
|
|
|
|
|
def wyznaczHaralick(zdj):
|
|
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
|
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
|
|
return haralick
|
|
|
|
|
|
def wyznaczHistogram(zdj, mask=None):
|
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2HSV)
|
|
hist = cv2.calcHist([zdj], [0, 1, 2], mask, [8, 8, 8], [0, 256, 0, 256, 0, 256])
|
|
cv2.normalize(hist, hist)
|
|
return hist.flatten()
|
|
|
|
|
|
klasy = os.listdir(sciezka_do_zdj) # glass metal paper plastic
|
|
|
|
klasy.sort()
|
|
|
|
dane = [] # parametry kazdego zdjecia
|
|
|
|
etykiety_zdj = [] # typ kazdego zdjecia
|
|
|
|
for klasa in klasy:
|
|
katalog = os.path.join(sciezka_do_zdj, klasa)
|
|
|
|
for plik in os.listdir(katalog):
|
|
zdj = cv2.imread(os.path.join(katalog, plik)) # odczyt zdjecia
|
|
zdj = cv2.resize(zdj, rozmiar_zdj) # zmiana rozmiaru
|
|
|
|
# wyznaczanie parametrow zdjecia
|
|
momenty = wyznaczHuMomenty(zdj)
|
|
haralick = wyznaczHaralick(zdj)
|
|
histogram = wyznaczHistogram(zdj)
|
|
|
|
wiersz = np.hstack([momenty, histogram, haralick]) # ustaw poziomo, jeden za drugim
|
|
etykiety_zdj.append(klasa)
|
|
dane.append(wiersz)
|
|
|
|
# ilosc wszystkich etykiet to 1987 - tyle ile wszystkich zdj
|
|
le = LabelEncoder()
|
|
znormalizowane_etykiety = le.fit_transform(etykiety_zdj) # normalizacja do 0-glass 1-metal itp.
|
|
|
|
h5f_dane = h5py.File(h5_dane, 'w')
|
|
h5f_dane.create_dataset('dataset_1', data=np.array(dane))
|
|
|
|
h5f_etykiety = h5py.File(h5_etykiety, 'w')
|
|
h5f_etykiety.create_dataset('dataset_1', data=np.array(znormalizowane_etykiety))
|
|
|
|
h5f_dane.close()
|
|
h5f_etykiety.close()
|