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
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