Example #1
0
 def test_laplacian_has_correct_size(self):
     # gaussian pyramid
     p_collection = PyramidManager(self._images, self._config).laplacian_pyramid(self._depth)
     # number of layers in the collection
     self.assertEqual(p_collection.get_number_of_layers(), 2)
     collection_layer_0 = p_collection.get_pyramid(0)
     # high of the pyramid in the collection
     self.assertEqual(collection_layer_0.get_depth(), self._depth)
     # sieze of first level is half of level zero
     self.assertEqual(collection_layer_0.get_level(1).get_array().shape, (2, 2))
Example #2
0
 def test_that_the_top_of_pyramids_has_the_lowest_resolution(self):
     l = PyramidManager(self._images, self._config).laplacian_pyramid(self._depth).get_pyramid(0)
     p = PyramidManager(self._images, self._config)._gaussian_pyramid(self._depth).get_pyramid(0)
     # top level has lowest resolution
     self.assertLess(l.get_top_level().array.shape[0], l.get_level(0).array.shape[0])
     # top level has lowest resolution
     self.assertLess(p.get_top_level().array.shape[0], p.get_level(0).array.shape[0])
 def test_top_level_of_laplacian_and_gaussian_pyramids_are_the_same(self):
     l = PyramidManager(self._images, self._config).laplacian_pyramid(
         self._depth).get_pyramid(0)
     p = PyramidManager(self._images, self._config)._gaussian_pyramid(
         self._depth).get_pyramid(0)
     #top level
     self.assertIn(l.get_top_level().get_array(),
                   p.get_top_level().get_array())
    def composite(self):
        log = logging.getLogger(".".join([__name__, self.__class__.__name__]))
        log.addFilter(logconfig.ThreadContextFilter())
        extra = self._config.all_to_json()
        log = logging.LoggerAdapter(log, extra)
        log.info("Focusstack Started, first image, " +
                 self._image_file_list[0].name)
        log.debug(extra)

        start_t = time.time()

        t1 = time.time()
        man = ImageFFTManager(self._image_file_list)
        man.read_ftt_images()
        sd = SharpnessDetector(man.get_fft_images(), self._config)

        images = sd.images_to_stack()
        self.fft_images = sd.get_fft_images_to_stack()

        t2 = time.time() - t1

        #add extra field to the log
        extra = {'FTT_time': t2}
        log = logging.LoggerAdapter(log, extra)
        log.info("FFT calculation finished")
        log.debug(extra)
        images = np.array(images, dtype=images[0].dtype)

        #TODO:Implement alignment algo
        #aligned_images, gray_images = self.align(images)

        #stacked_image = pyramid(aligned_images, self._config).get_pyramid_fusion()
        stacked_image = PyramidManager(images,
                                       self._config).get_pyramid_fusion()

        stacked_image = cv2.convertScaleAbs(stacked_image)
        backtorgb = cv2.cvtColor(stacked_image, cv2.COLOR_GRAY2RGB)

        calculation_time = time.time() - start_t
        extra = {'stack_time': calculation_time}
        log = logging.LoggerAdapter(log, extra)
        log.info("Stacking Finished")
        log.debug(extra)

        return Image(backtorgb)
Example #5
0
 def test_get_pyramid_fusion_calls_laplacian_pyramid_once(self):
     self._config.pyramid_min_size.value.return_value = 1
     p = PyramidManager(self._images, self._config)
     p.laplacian_pyramid = MagicMock(return_value = MagicMock())
     p.get_pyramid_fusion()
     p.laplacian_pyramid.assert_called_once()