Module src.app.Clustering.ImageFeaturesHistogram
Source code
from src.app.Module import Module
import cv2
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
class ImageFeaturesHistogram(Module):
    """Extracts color histogram features from given images.
    This class uses the images delivered by previous modules to extract color histograms.
    """
    def __init__(self, prev_module):
        super().__init__('ImageFeatures', prev_module)
    def run(self):
        super().run()
        self._result = {
            'images': self._data,
            'features': [],
        }
        descriptors = []
        for image in self._data:
            image = cv2.resize(image, (127, 127))
            h1 = cv2.calcHist([image], [0], None, [256], [0, 256]).flatten()
            h2 = cv2.calcHist([image], [1], None, [256], [0, 256]).flatten()
            h3 = cv2.calcHist([image], [2], None, [256], [0, 256]).flatten()
            sum1 = 0
            sum2 = 0
            sum3 = 0
            for i in range(256):
                sum1 += i*h1[i]
                sum2 += i*h2[i]
                sum3 += i*h3[i]
            ssum = sum1 + sum2 + sum3
            self._result['features'].append([sum1/ssum, sum2/ssum, sum3/ssum])
    def visualize(self):
        result = self.get_module_results()
        images = result['images']
        i = np.random.randint(0, len(images))
        r, g, b = cv2.split(images[i])
        r = r.flatten()
        g = g.flatten()
        b = b.flatten()
        # plotting
        fig = plt.figure()
        ax = Axes3D(fig)
        ax.scatter(r, g, b)
        plt.show()
Classes
class ImageFeaturesHistogram (prev_module)- 
Extracts color histogram features from given images.
This class uses the images delivered by previous modules to extract color histograms.
Source code
class ImageFeaturesHistogram(Module): """Extracts color histogram features from given images. This class uses the images delivered by previous modules to extract color histograms. """ def __init__(self, prev_module): super().__init__('ImageFeatures', prev_module) def run(self): super().run() self._result = { 'images': self._data, 'features': [], } descriptors = [] for image in self._data: image = cv2.resize(image, (127, 127)) h1 = cv2.calcHist([image], [0], None, [256], [0, 256]).flatten() h2 = cv2.calcHist([image], [1], None, [256], [0, 256]).flatten() h3 = cv2.calcHist([image], [2], None, [256], [0, 256]).flatten() sum1 = 0 sum2 = 0 sum3 = 0 for i in range(256): sum1 += i*h1[i] sum2 += i*h2[i] sum3 += i*h3[i] ssum = sum1 + sum2 + sum3 self._result['features'].append([sum1/ssum, sum2/ssum, sum3/ssum]) def visualize(self): result = self.get_module_results() images = result['images'] i = np.random.randint(0, len(images)) r, g, b = cv2.split(images[i]) r = r.flatten() g = g.flatten() b = b.flatten() # plotting fig = plt.figure() ax = Axes3D(fig) ax.scatter(r, g, b) plt.show()Ancestors
Inherited members