mergeRemoveExtraneous.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:SerialPhotoMerge 作者: simon-r 项目源码 文件源码
def execute(self):
        self.resulting_image = None
        f_first = True

        resimg = self.images_iterator.read_reference_image()
        shape = resimg.shape

        resimg.image[:] = 2**resimg.color_depth / 2
        avrimg = Image(ishape=shape, dtype=resimg.dtype)
        std = np.zeros(shape[:2], dtype=resimg.dtype) + 2**resimg.color_depth

        dist = np.zeros(shape[:2], dtype=resimg.dtype)
        flags = np.zeros(shape[:2], dtype=np.bool8)

        iter_cnt = 5

        for itr in range(iter_cnt):
            invalid_imgs = []
            img_cnt = 0.0

            for imgarr in self.images_iterator:

                if shape != imgarr.shape:
                    self.images_iterator.discard_image()
                    continue

                img_cnt += 1

                dist[:] = np.sqrt(
                    np.power(resimg.image[:, :, 0] - imgarr.image[:, :, 0], 2) +
                    np.power(resimg.image[:, :, 1] - imgarr.image[:, :, 1], 2) +
                    np.power(resimg.image[:, :, 2] - imgarr.image[:, :, 2], 2))

                ca = time.clock()
                flags[:] = False
                flags[:] = dist[:] < std[:] / np.exp(np.float(itr) / 10.0)

                avrimg.image[flags] = avrimg.image[flags] + imgarr.image[flags]

                flags[:] = np.logical_not(flags)
                avrimg.image[flags] = avrimg.image[flags] + resimg.image[flags]

                cb = time.clock()
                print(cb - ca)

            resimg.image[:] = avrimg.image[:] / img_cnt
            std[:] = 0.0

            for imgarr in self.images_iterator:

                std[:] = (std[:] +
                          (np.power(resimg.image[:, :, 0] - imgarr.image[:, :, 0], 2) +
                           np.power(resimg.image[:, :, 1] - imgarr.image[:, :, 1], 2) +
                           np.power(resimg.image[:, :, 2] - imgarr.image[:, :, 2], 2)))

            std[:] = np.sqrt(std[:] / img_cnt)
            avrimg.image[:] = 0.0

        self.resulting_image = resimg
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号