def setColorStats(self):
     replineCenters = self.getReplineCenters()
     LMean = 0
     aMean = 0
     bMean = 0
     numberOfCobs = 0
     for cob in self.cobs:
         LMean += self.cobs[cob].averageLab["L"]
         aMean += self.cobs[cob].averageLab["a"]
         bMean += self.cobs[cob].averageLab["b"]
         numberOfCobs += 1
     LMean = LMean / float(numberOfCobs)
     aMean = aMean / float(numberOfCobs)
     bMean = bMean / float(numberOfCobs)
     rgb1 = Kernel.HunterLabToRGB(replineCenters[0][0],
                                  replineCenters[0][1],
                                  replineCenters[0][2])
     rgb2 = Kernel.HunterLabToRGB(replineCenters[1][0],
                                  replineCenters[1][1],
                                  replineCenters[1][2])
     self.averageRGB["R"], self.averageRGB["G"], self.averageRGB[
         "B"] = Kernel.HunterLabToRGB(LMean, aMean, bMean)
     self.averageLab["L"] = LMean
     self.averageLab["a"] = aMean
     self.averageLab["b"] = bMean
     self.centers = {"R1": rgb1["R"], "R2": rgb2["R"], "G1": rgb1["G"], "G2": rgb2["G"], "B1": rgb1["B"], "B2": rgb2["B"],
                     "L1": replineCenters[0][0], "L2": replineCenters[1][0], "a1": replineCenters[0][1], "a2": replineCenters[1][1], "b1": replineCenters[0][2], "b2": replineCenters[1][2]}
     clusterDifference = (abs(replineCenters[0][0] - replineCenters[1][0]) +
                         abs(replineCenters[0][1] - replineCenters[1][1]) +
                         abs(replineCenters[0][2] - replineCenters[1][2]))
Esempio n. 2
0
 def showscatterplot(self, s=80, closepreviousplot=True):
     if len(self.coblist) == 1:
         self.coblist[0].showscatterplot(s, closepreviousplot)
     else:
         lablists = Kernel.threeTupleToThreeLists(self.allkernelclusters)
         if closepreviousplot == True:
             plt.close(1)
         plot = plt.figure()
         axes = plot.add_subplot(111, projection='3d')
         llist = lablists[0]
         alist = lablists[1]
         blist = lablists[2]
         for l, a, b in zip(llist, alist, blist):
             R, G, B = Kernel.HunterLabToRGB(l, a, b, normalized=True)
             axes.scatter(l, a, b, color=[R, G, B], marker='s', s=s)
         axes.set_xlabel('L')
         axes.set_ylabel('a')
         axes.set_zlabel('b')
         totalsize = 0
         for cluster in self.clusters:
             totalsize += cluster[0]
         for cluster in self.clusters:
             addedsize = int(s * (cluster[0] / totalsize))
             s += addedsize
             Kernel.addpoints(cluster[1], axes, marker="o", color="g", s=s)
         plt.title(self.name)
         plt.ion()
         plt.show()
         return axes
 def __init__(self, kernels, show=False):
     '''
     TEST THIS
     '''
     self.name = ''
     self.averageRGB = {"R": 0, "G": 0, "B": 0}
     self.averageLab = {"L": 0, "a": 0, "b": 0}
     self.kernelList = kernels
     self.numberOfKernels = len(self.kernelList)
     LMean = 0
     aMean = 0
     bMean = 0
     #The below code will calculate the 2SDMean wrong!
     for kernel in self.kernelList:
         LMean += kernel.LabDict["L2SDMean"]
         aMean += kernel.LabDict["a2SDMean"]
         bMean += kernel.LabDict["b2SDMean"]
     LMean = LMean / float(self.numberOfKernels)
     aMean = aMean / float(self.numberOfKernels)
     bMean = bMean / float(self.numberOfKernels)
     # the above code is wrong!
     rgb = Kernel.HunterLabToRGB(LMean, aMean, bMean)
     self.averageRGB["R"] = rgb["R"]
     self.averageRGB["G"] = rgb["G"]
     self.averageRGB["B"] = rgb["B"]
     self.averageLab["L"] = LMean
     self.averageLab["a"] = aMean
     self.averageLab["b"] = bMean
     self.KernelsCenters = []
     self.setKernelsCenters()
Esempio n. 4
0
 def dbscan(self, eps=.5, plot=False):
     if len(self.coblist) > 1:
         pixlist = []
         totalnumkernels = 0
         for cob in self.coblist:
             for kernel in cob.kernellist:
                 pixlist.extend(kernel.pixellist)
                 totalnumkernels += 1
         X = Kernel.np.array(pixlist)
         density = eps
         numberofpixels = len(pixlist)
         db = Kernel.DBSCAN(eps=density).fit(X)
         core_samples_mask = Kernel.np.zeros_like(db.labels_, dtype=bool)
         core_samples_mask[db.core_sample_indices_] = True
         labels = db.labels_
         n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
         unique_labels = set(labels)
         colors = []
         for k in unique_labels:
             class_member_mask = (labels == k)
             xyz = X[class_member_mask & core_samples_mask]
             llist, alist, blist = xyz[:, 0], xyz[:, 1], xyz[:, 2]
             if len(llist) >= numberofpixels / 100:
                 lmean = llist.mean()
                 amean = alist.mean()
                 bmean = blist.mean()
                 self.clusters.append([size, [lmean, amean, bmean]])
                 r, g, b = Kernel.HunterLabToRGB(lmean, amean, bmean)
                 colors.append([r / 255.0, g / 255.0, b / 255.0])
             else:
                 colors.append('k')
         if plot is True:
             graph = plt.figure()
             ax = graph.add_subplot(111, projection='3d')
             for k, col in zip(unique_labels, colors):
                 if k == -1:
                     col = 'k'
                 class_member_mask = (labels == k)
                 xyz = X[class_member_mask & core_samples_mask]
                 if len(xyz[:, 0]) >= numberofpixels / 100:
                     print len(xyz[:, 0])
                     ax.scatter(xyz[:, 0], xyz[:, 1], xyz[:, 2], c=col)
                     xyz = X[class_member_mask & ~core_samples_mask]
                     ax.scatter(xyz[:, 0],
                                xyz[:, 1],
                                xyz[:, 2],
                                c=col,
                                marker='.')
             ax.set_xlabel('L')
             ax.set_ylabel('a')
             ax.set_zlabel('b')
             plt.title('Estimated number of clusters: %d' % n_clusters_)
             plt.ion()
             plt.show()
         return db
     elif len(self.coblist) == 1:
         self.clusters = self.coblist[0].clusters
Esempio n. 5
0
 def showscatterplot(self, s=20, closepreviousplot=True):
     '''
     creates a 3d scatter plot whose points are either pixels from all the kernels in this cob,
     or centers from the kmean clusters of each kernel in this cob.
     '''
     if self.type == 'pixels':
         pixels = []
         for kernel in self.kernellist:
             pixels.extend(kernel.pixellist)
         lablists = Kernel.threeTupleToThreeLists(pixels)
     else:
         lablists = Kernel.threeTupleToThreeLists(self.kernelcenters)
     if closepreviousplot == True:
         plt.close(1)
     plot = plt.figure()
     axes = plot.add_subplot(111, projection='3d')
     llist = lablists[0]
     alist = lablists[1]
     blist = lablists[2]
     for l, a, b in zip(llist, alist, blist):
         R, G, B = Kernel.HunterLabToRGB(l, a, b, normalized=True)
         axes.scatter(l, a, b, color=[R, G, B], marker='s', s=s)
     axes.set_xlabel('L')
     axes.set_ylabel('a')
     axes.set_zlabel('b')
     totalsize = 0
     for cluster in self.clusters:
         totalsize += cluster[0]
     for cluster in self.clusters:
         addedsize = int(s * (cluster[0] / totalsize))
         s += addedsize
         Kernel.addpoints(cluster[1], axes, marker="o", color="g", s=s)
     plt.title(self.name)
     plt.ion()
     plt.show()
     return axes