def createButterworthFilter(self, dia=400, size=(64, 64), order=2, highpass=False): """ **SUMMARY** Creates a butterworth filter of given size and order. **PARAMETERS** * *dia* - int - diameter of Gaussian filter - list - provide a list of three diameters to create a 3 channel filter * *size* - size of the filter (width, height) * *order* - order of the filter * *highpass*: - bool True: highpass filter False: lowpass filter **RETURNS** DFT filter. **EXAMPLE** >>> flt = DFT.createButterworthfilter(100, (512, 512), order=3, highpass=True) >>> flt = DFT.createButterworthfilter([100, 120, 140], (512, 512), order=3, highpass=False) >>> img = Image('lenna') >>> flt.applyFilter(img).show() """ if isinstance(dia, list): if len(dia) != 3 and len(dia) != 1: warnings.warn("diameter list must be of size 1 or 3") return None stackedfilter = DFT() for d in dia: stackedfilter = stackedfilter._stackFilters(self.createButterworthFilter(d, size, order, highpass)) image = Image(stackedfilter._numpy) retVal = DFT(numpyarray=stackedfilter._numpy, image=image, dia=dia, channels = len(dia), size=size, type=stackedfilter._type, order=order, frequency=stackedfilter._freqpass) return retVal freqpass = "******" sz_x, sz_y = size x0 = sz_x/2 y0 = sz_y/2 X, Y = np.meshgrid(np.arange(sz_x), np.arange(sz_y)) D = np.sqrt((X-x0)**2+(Y-y0)**2) flt = 255/(1.0 + (D/dia)**(order*2)) if highpass: frequency = "highpass" flt = 255 - flt img = Image(flt) retVal = DFT(size=size, numpyarray=flt, image=img, dia=dia, type="Butterworth", frequency=freqpass) return retVal
def generateSuperPixels(self): """ Compute the over-segmentation based on the step-size and relative weighting of the pixel and colour values. """ self._initData() indnp = np.mgrid[0:self.height,0:self.width].swapaxes(0,2).swapaxes(0,1) for i in range(self.ITERATIONS): self.distances = self.FLT_MAX * np.ones(self.img.shape[:2]) for j in xrange(self.centers.shape[0]): xlow, xhigh = int(self.centers[j][3] - self.step), int(self.centers[j][3] + self.step) ylow, yhigh = int(self.centers[j][4] - self.step), int(self.centers[j][4] + self.step) if xlow <= 0: xlow = 0 if xhigh > self.width: xhigh = self.width if ylow <=0: ylow = 0 if yhigh > self.height: yhigh = self.height cropimg = self.labimg[ylow : yhigh , xlow : xhigh].astype(np.int64) colordiff = cropimg - self.labimg[self.centers[j][4], self.centers[j][3]] colorDist = np.sqrt(np.sum(np.square(colordiff.astype(np.int64)), axis=2)) yy, xx = np.ogrid[ylow : yhigh, xlow : xhigh] pixdist = ((yy-self.centers[j][4])**2 + (xx-self.centers[j][3])**2)**0.5 dist = ((colorDist/self.nc)**2 + (pixdist/self.ns)**2)**0.5 distanceCrop = self.distances[ylow : yhigh, xlow : xhigh] idx = dist < distanceCrop distanceCrop[idx] = dist[idx] self.distances[ylow : yhigh, xlow : xhigh] = distanceCrop self.clusters[ylow : yhigh, xlow : xhigh][idx] = j for k in xrange(len(self.centers)): idx = (self.clusters == k) colornp = self.labimg[idx] distnp = indnp[idx] self.centers[k][0:3] = np.sum(colornp, axis=0) sumy, sumx = np.sum(distnp, axis=0) self.centers[k][3:] = sumx, sumy self.centers[k] /= np.sum(idx) self._createConnectivity() superpixels = self._segmentSuperpixels() return superpixels