Exemple #1
0
    def choose_four(self, ellipses):
        gray = self.image.to_gray()
        ellipses = [
            e for e in ellipses if gray.get_pixel(e.center.reversed()) < 100
        ]  # with dark enters only
        if len(ellipses) < 4:
            return None

        candidates = []
        for four in combinations(ellipses, 4):
            centers = [e.center for e in four]
            cnt = Contour.from_points(centers)
            cnt = cnt.make_convex()
            if len(cnt) != 4:
                continue

            centers = cnt.to_points()
            centers = sorted(centers, key=lambda p: p.x)

            areas = [e.get_area() for e in four]
            diff = max(areas) - min(areas)

            candidates.append((diff, centers))

        centers = min(candidates, key=lambda x: x[0])[1]
        return centers
    def transformed(self):
        """ Returns the tranformed image"""
        ellipses = self.get_all_ellipses()
        for e in ellipses:
            e.draw(self.image, color=(255, 60, 60))

        orients = self.choose_four(ellipses)
        if orients is not None:
            cnt = Contour.from_points(orients)
            cnt.draw(self.image, color=(60, 60, 255))

            corrected_image = self.image.perspective(orients, self.etalone_orients, self.elatole_size)
            return corrected_image
        return None
Exemple #3
0
    def transformed(self):
        ''' Returns the tranformed image'''
        ellipses = self.get_all_ellipses()
        for e in ellipses:
            e.draw(self.image, color=(255, 60, 60))

        orients = self.choose_four(ellipses)
        if orients is not None:
            cnt = Contour.from_points(orients)
            cnt.draw(self.image, color=(60, 60, 255))

            corrected_image = self.image.perspective(orients,
                                                     self.etalone_orients,
                                                     self.elatole_size)
            return corrected_image
        return None
    def choose_four(self, ellipses):
        gray = self.image.to_gray()
        ellipses = [e for e in ellipses if gray.get_pixel(e.center.reversed()) < 100]  # with dark enters only
        if len(ellipses) < 4:
            return None

        candidates = []
        for four in combinations(ellipses, 4):
            centers = [e.center for e in four]
            cnt = Contour.from_points(centers)
            cnt = cnt.make_convex()
            if len(cnt) != 4:
                continue

            centers = cnt.to_points()
            centers = sorted(centers, key=lambda p: p.x)

            areas = [e.get_area() for e in four]
            diff = max(areas) - min(areas)

            candidates.append((diff, centers))

        centers = min(candidates, key=lambda x: x[0])[1]
        return centers