def get_shreds(self, feature_extractors, sheet_name):
        """Detects shreds in the current sheet and constructs Shred instances.

        Caches the results for further invocations.

        Args:
            feature_extractors: iterable of AbstractShredFeature instances to
                use for shreds feature assignment.
            sheet_name: string, included in shred attributes.

        Returns:
            list of Shred instances.
        """
        if self._shreds is None:
            shreds = []
            _, contours, _ = cv2.findContours(self._foreground_mask,
                                           cv2.RETR_EXTERNAL,
                                           cv2.CHAIN_APPROX_SIMPLE)
            for i, contour in enumerate(contours):
                shred = self._make_shred(contour, i, feature_extractors,
                                         sheet_name)
                if shred is not None:
                    shreds.append(shred)
            self._shreds = shreds
        return self._shreds
Detects shreds in the current sheet and constructs Shred instances.

        Caches the results for further invocations.

        Args:
            feature_extractors: iterable of AbstractShredFeature instances to
                use for shreds feature assignment.
            sheet_name: string, included in shred attributes.

        Returns:
            list of Shred instances.