71 lines
1.7 KiB
Python
71 lines
1.7 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 hu_moments(zdj):
|
||
|
zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||
|
momenty = cv2.HuMoments(cv2.moments(zdj)).flatten()
|
||
|
return momenty
|
||
|
|
||
|
|
||
|
def haralick(zdj):
|
||
|
szare_zdj = cv2.cvtColor(zdj, cv2.COLOR_BGR2GRAY)
|
||
|
haralick = mahotas.features.haralick(szare_zdj).mean(axis=0)
|
||
|
return haralick
|
||
|
|
||
|
|
||
|
def histogram(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)
|
||
|
|
||
|
klasy.sort()
|
||
|
|
||
|
dane = []
|
||
|
wszystkie_typy_zdj = []
|
||
|
|
||
|
for klasa in klasy:
|
||
|
katalog = os.path.join(sciezka_do_zdj, klasa)
|
||
|
|
||
|
biezaca_klasa = klasa
|
||
|
for plik in os.listdir(katalog):
|
||
|
zdj = cv2.imread(os.path.join(katalog, plik))
|
||
|
zdj = cv2.resize(zdj, rozmiar_zdj)
|
||
|
|
||
|
fv_hu_moments = hu_moments(zdj)
|
||
|
fv_haralick = haralick(zdj)
|
||
|
fv_histogram = histogram(zdj)
|
||
|
|
||
|
wiersz = np.hstack([fv_hu_moments, fv_histogram, fv_haralick])
|
||
|
wszystkie_typy_zdj.append(biezaca_klasa)
|
||
|
dane.append(wiersz)
|
||
|
|
||
|
print(len(wszystkie_typy_zdj))
|
||
|
targetNames = np.unique(wszystkie_typy_zdj)
|
||
|
print(targetNames,targetNames.shape)
|
||
|
le = LabelEncoder()
|
||
|
target = le.fit_transform(wszystkie_typy_zdj)
|
||
|
print(target.shape)
|
||
|
|
||
|
h5f_data = h5py.File(h5_dane, 'w')
|
||
|
h5f_data.create_dataset('dataset_1', data=np.array(dane))
|
||
|
|
||
|
h5f_label = h5py.File(h5_etykiety, 'w')
|
||
|
h5f_label.create_dataset('dataset_1', data=np.array(target))
|
||
|
|
||
|
h5f_data.close()
|
||
|
h5f_label.close()
|