def execute(self, slot, subindex, roi, result): # Remove i,j slices from roi, append channel slice to roi. input_roi = ( tuple(roi.start[:-2]) + (0,), tuple(roi.stop[:-2]) + (1,) ) enlarged_roi, result_roi = self._enlarge_roi_for_halo(*input_roi) # Request input input_data = self.Input(*enlarged_roi).wait() # Drop singleton channel axis input_data = input_data[...,0] # We need a uint8 array, in C-order. input_data = input_data.astype( numpy.uint8, order='C', copy=False ) # Compute. (Note that we drop the eigenvectors = computeEigenVectorsOfHessianImage(input_data, zAnisotropyFactor=self.z_anisotropy_factor, sigma=self.Sigma.value) # sanity checks... assert (eigenvectors.shape[:-2] == (numpy.array(enlarged_roi[1]) - enlarged_roi[0])[:-1]).all(), \ "eigenvector image has unexpected shape: {}".format( eigenvectors.shape ) assert eigenvectors.shape[-2:] == (3,3) # Copy to output. result[:] = eigenvectors[roiToSlice(*result_roi)][..., slice(roi.start[-1], roi.stop[-1])]
imgFloat = np.float32(img) iiImage = computeIntegralImage( imgFloat ) # again, this is stupid, just presume the second channel is a different feature channel1 = iiImage channel2 = iiImage channels3 = channels2 = channels1 = [channel1,channel2] # anisotropy factor is the ratio between z voxel size and x/y voxel size. # if Isotropic -> 1.0 zAnisotropyFactor = 1.0; # this is typically a good value, but it depends on the voxel size of the data hessianSigma = 3.5 eigV1 = computeEigenVectorsOfHessianImage( img1, zAnisotropyFactor, hessianSigma ) eigV2 = computeEigenVectorsOfHessianImage( img2, zAnisotropyFactor, hessianSigma ) eigV3 = computeEigenVectorsOfHessianImage( img3, zAnisotropyFactor, hessianSigma ) # Train: note that we pass a list of stacks model.trainWithChannels( [img1,img2,img3], [eigV1, eigV2, eigV3], [gt1,gt2,gt3], [channels1,channels2,channels3], zAnisotropyFactor, numStumps=100, gtNegativeLabel=1, gtPositiveLabel=2, debugOutput=True) pred = model.predictWithChannels( img, eigV1, channels1, zAnisotropyFactor, useEarlyStopping=True) roi = ROICoordinates() roi.x2 = img.shape[2] - 1 roi.y2 = img.shape[1] - 1 roi.z1 = roi.z2 = img.shape[0] / 2 predSingleSlice = model.predictWithChannels( img, eigV1, channels1, zAnisotropyFactor, useEarlyStopping=True, subROI=roi)
from iiboost import computeEigenVectorsOfHessianImage from sklearn.externals import joblib # to load data import numpy as np # to show something import matplotlib.pyplot as plt # load data from os.path import split, join data_dir = join(split(__file__)[0], '../../testData') gt = joblib.load(data_dir + "/gt.jlb") img = joblib.load(data_dir + "/img.jlb") # compute eigen vector image eigenvectors = computeEigenVectorsOfHessianImage(gt, zAnisotropyFactor=1.0, sigma=1.0)