20
20
from .postprocessor import Postprocessor
21
21
from .resize_segmentation_mask import ResizeSegmentationMask
22
22
from ..representation import SegmentationAnnotation , SegmentationPrediction
23
- from ..config import NumberField , ConfigError , StringField
23
+ from ..config import NumberField , StringField
24
24
from ..preprocessor .geometric_transformations import padding_func
25
+ from ..logging import warning
25
26
26
27
27
28
class ExtendSegmentationMask (Postprocessor ):
@@ -58,7 +59,10 @@ def process_image(self, annotation, prediction):
58
59
dst_height , dst_width = prediction_ .mask .shape [- 2 :]
59
60
height , width = annotation_mask .shape [- 2 :]
60
61
if dst_width < width or dst_height < height :
61
- raise ConfigError ('size for extending should be not less current mask size' )
62
+ warning ('size for extending should be not less current mask size. resize operation will be applied' )
63
+ annotation_ .mask = self ._resize (annotation_ .mask , dst_height , dst_width , False )
64
+ continue
65
+
62
66
63
67
pad = self .pad_func (dst_width , dst_height , width , height )
64
68
extended_mask = cv2 .copyMakeBorder (
@@ -75,18 +79,6 @@ def process_image_with_metadata(self, annotation, prediction, image_metadata=Non
75
79
76
80
@staticmethod
77
81
def _deprocess_prediction (prediction , meta ):
78
- def _resize (entry , height , width ):
79
- if len (entry .shape ) == 2 :
80
- entry = ResizeSegmentationMask .segm_resize (entry , width , height )
81
- return entry
82
-
83
- entry_mask = []
84
- for class_mask in entry :
85
- resized_mask = ResizeSegmentationMask .segm_resize (class_mask , width , height )
86
- entry_mask .append (resized_mask )
87
- entry = np .array (entry_mask )
88
-
89
- return entry
90
82
geom_ops = meta .get ('geometric_operations' , [])
91
83
pad = geom_ops [- 1 ].parameters ['pad' ] if geom_ops and geom_ops [- 1 ].type == 'padding' else [0 , 0 , 0 , 0 ]
92
84
image_h , image_w = meta ['image_size' ][:2 ]
@@ -96,7 +88,21 @@ def _resize(entry, height, width):
96
88
pred_mask = prediction_ .mask [pad [0 ]:pred_w - pad [2 ], pad [1 ]:pred_h - pad [3 ]]
97
89
pred_h , pred_w = pred_mask .shape [- 2 :]
98
90
if (pred_h , pred_w ) != (image_h , image_w ):
99
- pred_mask = _resize (pred_mask , image_h , image_w )
91
+ pred_mask = ExtendSegmentationMask . _resize (pred_mask , image_h , image_w )
100
92
prediction_ .mask = pred_mask
101
93
102
94
return prediction
95
+
96
+ @staticmethod
97
+ def _resize (entry , height , width , per_class = True ):
98
+ if len (entry .shape ) == 2 or not per_class :
99
+ entry = ResizeSegmentationMask .segm_resize (entry , width , height )
100
+ return entry
101
+
102
+ entry_mask = []
103
+ for class_mask in entry :
104
+ resized_mask = ResizeSegmentationMask .segm_resize (class_mask , width , height )
105
+ entry_mask .append (resized_mask )
106
+ entry = np .array (entry_mask )
107
+
108
+ return entry
0 commit comments