def laplacian_pyramid(self, depth): """Create laplacian pyramid of a certain depth.""" laplacian_collection = PyramidCollection() gaussian_collection = self._gaussian_pyramid(depth) for layer_number, image in enumerate(self.images): gaussian_pyramid = gaussian_collection.get_pyramid(layer_number) gaussian_top_level = gaussian_pyramid.get_top_level( ) # the lowest resolution laplacian_pyramid = Pyramid(layer_number, depth) laplacian_pyramid.add_higher_resolution_level(gaussian_top_level) for level_number in range(depth - 1, 0, -1): to_expand = gaussian_pyramid.get_level( level_number).get_array() expanded = cv2.pyrUp(to_expand) lower_level = gaussian_pyramid.get_level(level_number - 1).get_array() if expanded.shape != lower_level.shape: expanded = expanded[:lower_level.shape[0], :lower_level. shape[1]] difference = lower_level - expanded difference_level = PyramidLevel(difference, layer_number, level_number) laplacian_pyramid.add_higher_resolution_level(difference_level) laplacian_collection.add_pyramid(laplacian_pyramid) return laplacian_collection
def test_add_higher_resolution_level_adds_new_element_in_front_of_the_level_list( self): pyr = Pyramid(10, 2) pyr.add_higher_resolution_level(10) self.assertEqual(len(pyr.levels), 1) pyr.add_higher_resolution_level(12) self.assertEqual(len(pyr.levels), 2) self.assertEqual(pyr.levels[1], 10) self.assertEqual(pyr.levels[0], 12)