Module src.app.Clustering.FeatureClusters
Source code
from src.app.Module import Module
import numpy as np
import cv2
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
class FeatureClusters(Module):
"""Applies k-means clustering to the given input features.
This class uses the feature extraction data of previous modules to partition the data into a
predefined number of clusters.
Attributes:
_num_clusters: Number of clusters to split into (int)
"""
def __init__(self, prev_module, num_clusters):
super().__init__('FeatureClusters', prev_module)
self._num_clusters = num_clusters
def run(self):
super().run()
features = self._data['features']
features = np.array(features)
print('Clustering {} images in {} clusters'.format(len(features), self._num_clusters))
kmeans = KMeans(n_clusters=self._num_clusters, random_state=0).fit(features)
self._result = {
'images': self._data['images'],
'features': self._data['features'],
'labels': kmeans.labels_,
'centers': kmeans.cluster_centers_,
'kmeans': kmeans,
}
def visualize(self):
result = self.get_module_results()
images = result['images']
labels = result['labels']
n_images = len(images)
n_unique_labels = len(np.unique(labels))
img_counts = []
plt.figure()
for i in range(n_unique_labels):
img_count = 0
for j in range(n_images):
if labels[j] == i:
#img = cv2.cvtColor(result['images'][j], cv2.COLOR_BGR2GRAY)
img = cv2.cvtColor(result['images'][j], cv2.COLOR_BGR2RGB)
extent = [img_count*64, (img_count+1)*64, i*64, (i+1)*64]
plt.imshow(img, origin='upper', extent=extent, cmap='gray')
img_count += 1
print('{} images with label {}'.format(img_count, i))
img_counts.append(img_count)
xextent = np.max(np.array(img_counts))
plt.axis([0, xextent*64, 0, n_unique_labels*64])
plt.savefig('graph.pdf', dpi=1200)
plt.show()
Classes
class FeatureClusters (prev_module, num_clusters)
-
Applies k-means clustering to the given input features.
This class uses the feature extraction data of previous modules to partition the data into a predefined number of clusters.
Attributes
_num_clusters
- Number of clusters to split into (int)
Source code
class FeatureClusters(Module): """Applies k-means clustering to the given input features. This class uses the feature extraction data of previous modules to partition the data into a predefined number of clusters. Attributes: _num_clusters: Number of clusters to split into (int) """ def __init__(self, prev_module, num_clusters): super().__init__('FeatureClusters', prev_module) self._num_clusters = num_clusters def run(self): super().run() features = self._data['features'] features = np.array(features) print('Clustering {} images in {} clusters'.format(len(features), self._num_clusters)) kmeans = KMeans(n_clusters=self._num_clusters, random_state=0).fit(features) self._result = { 'images': self._data['images'], 'features': self._data['features'], 'labels': kmeans.labels_, 'centers': kmeans.cluster_centers_, 'kmeans': kmeans, } def visualize(self): result = self.get_module_results() images = result['images'] labels = result['labels'] n_images = len(images) n_unique_labels = len(np.unique(labels)) img_counts = [] plt.figure() for i in range(n_unique_labels): img_count = 0 for j in range(n_images): if labels[j] == i: #img = cv2.cvtColor(result['images'][j], cv2.COLOR_BGR2GRAY) img = cv2.cvtColor(result['images'][j], cv2.COLOR_BGR2RGB) extent = [img_count*64, (img_count+1)*64, i*64, (i+1)*64] plt.imshow(img, origin='upper', extent=extent, cmap='gray') img_count += 1 print('{} images with label {}'.format(img_count, i)) img_counts.append(img_count) xextent = np.max(np.array(img_counts)) plt.axis([0, xextent*64, 0, n_unique_labels*64]) plt.savefig('graph.pdf', dpi=1200) plt.show()
Ancestors
Inherited members