def tst_with_no_points(self): from dials.model.data import PixelList, PixelListLabeller from scitbx.array_family import flex size = (500, 500) sf = 0 labeller = PixelListLabeller() count = 0 mask_list = [] for i in range(3): image = flex.random_int_gaussian_distribution( size[0] * size[1], 100, 5) mask = flex.bool(size[0] * size[0], False) image.reshape(flex.grid(size)) mask.reshape(flex.grid(size)) pl = PixelList(sf + i, image, mask) count += len(mask.as_1d().select(mask.as_1d())) labeller.add(pl) mask_list.append(mask) coords = labeller.coords() labels1 = labeller.labels_2d() labels2 = labeller.labels_2d() assert len(coords) == 0 assert len(labels1) == 0 assert len(labels2) == 0 print 'OK'
def setup_class(self): from dials.algorithms.image.connected_components import LabelImageStack3d self.size = (500, 500) self.label_images = LabelImageStack3d(self.size) from scitbx.array_family import flex self.data_list = [] self.mask_list = [] for i in range(10): data = flex.random_int_gaussian_distribution( self.size[0] * self.size[1], 100, 10 ) data.reshape(flex.grid(self.size)) mask = flex.random_bool(self.size[0] * self.size[1], 0.1) mask.reshape(flex.grid(self.size)) self.data_list.append(data) self.mask_list.append(mask) for i in range(10): self.label_images.add_image(self.data_list[i], self.mask_list[i]) self.labels = self.label_images.labels() self.coords = self.label_images.coords() self.values = list(self.label_images.values()) assert len(self.labels) > 0 assert len(self.labels) == len(self.coords) assert len(self.labels) == len(self.values)
def create_random_data_with_gaussian_distribution(mu=0.0, sigma=1.0): slow = 2048 fast = 2048 total_sz = slow * fast random_data = flex.random_int_gaussian_distribution(total_sz, mu, sigma) random_data.reshape(flex.grid(slow, fast)) return random_data
def run(self): from scitbx.array_family import flex data_list = [] mask_list = [] for i in range(10): data = flex.random_int_gaussian_distribution( self.size[0] * self.size[1], 100, 10) data.reshape(flex.grid(self.size)) mask = flex.random_bool(self.size[0] * self.size[1], 0.1) mask.reshape(flex.grid(self.size)) data_list.append(data) mask_list.append(mask) for i in range(10): self.label_images.add_image(data_list[i], mask_list[i]) labels = self.label_images.labels() coords = self.label_images.coords() values = self.label_images.values() assert(len(labels) > 0) assert(len(labels) == len(coords)) assert(len(labels) == len(values)) self.tst_coords_are_valid(mask_list, coords) self.tst_values_are_valid(data_list, mask_list, values) self.tst_labels_are_valid(data_list, mask_list, coords, labels)
def create_random_data_with_gaussian_distribution(mu=0.0,sigma=1.0): slow=2048 fast=2048 total_sz = slow*fast random_data = flex.random_int_gaussian_distribution(total_sz,mu,sigma) random_data.reshape(flex.grid(slow,fast)) return random_data
def tst_labels_3d(self): from dials.model.data import PixelList, PixelListLabeller from scitbx.array_family import flex size = (500, 500) sf = 0 labeller = PixelListLabeller() count = 0 mask_list = [] for i in range(3): image = flex.random_int_gaussian_distribution( size[0] * size[1], 100, 5) mask = flex.random_bool(size[0] * size[1], 0.5) image.reshape(flex.grid(size)) mask.reshape(flex.grid(size)) pl = PixelList(sf + i, image, mask) count += len(mask.as_1d().select(mask.as_1d())) labeller.add(pl) mask_list.append(mask) coords = labeller.coords() labels = labeller.labels_3d() # Create a map of labels label_map = flex.int(flex.grid(3, size[0], size[1])) for c, l in zip(coords, labels): label_map[c] = l # Ensure all labels are correct vi = 0 for k in range(3): for j in range(size[0]): for i in range(size[1]): if mask_list[k][j, i]: l1 = labels[vi] if k > 0 and mask_list[k - 1][j, i]: l2 = label_map[k - 1, j, i] assert (l2 == l1) if j > 0 and mask_list[k][j - 1, i]: l2 = label_map[k, j - 1, i] assert (l2 == l1) if i > 0 and mask_list[k][j, i - 1]: l2 = label_map[k, j, i - 1] assert (l2 == l1) vi += 1 # Test passed print 'OK'
def test_add_image(): from dials.model.data import PixelList, PixelListLabeller from scitbx.array_family import flex size = (2000, 2000) sf = 10 labeller = PixelListLabeller() count = 0 for i in range(3): image = flex.random_int_gaussian_distribution(size[0] * size[1], 100, 5) mask = flex.random_bool(size[0] * size[1], 0.5) image.reshape(flex.grid(size)) mask.reshape(flex.grid(size)) pl = PixelList(sf + i, image, mask) count += len(mask.as_1d().select(mask.as_1d())) labeller.add(pl) assert len(labeller.values()) == count