def test_clahe(self): def _clahe(img, clip_limit=40.0, tile_grid_size=(8, 8)): clahe = cv2.createCLAHE(clip_limit, tile_grid_size) return clahe.apply(np.array(img, dtype=np.uint8)) # test assertion image should have the right shape with pytest.raises(AssertionError): mmcv.clahe(self.img) # test assertion tile_grid_size should be a tuple with 2 integers with pytest.raises(AssertionError): mmcv.clahe(self.img[:, :, 0], tile_grid_size=(8.0, 8.0)) with pytest.raises(AssertionError): mmcv.clahe(self.img[:, :, 0], tile_grid_size=(8, 8, 8)) with pytest.raises(AssertionError): mmcv.clahe(self.img[:, :, 0], tile_grid_size=[8, 8]) # test with different channels for i in range(self.img.shape[-1]): img = mmcv.clahe(self.img[:, :, i]) img_std = _clahe(self.img[:, :, i]) assert np.allclose(img, img_std) assert id(img) != id(self.img[:, :, i]) assert id(img_std) != id(self.img[:, :, i]) # test case with clip_limit=1.2 for i in range(self.img.shape[-1]): img = mmcv.clahe(self.img[:, :, i], 1.2) img_std = _clahe(self.img[:, :, i], 1.2) assert np.allclose(img, img_std) assert id(img) != id(self.img[:, :, i]) assert id(img_std) != id(self.img[:, :, i])
def __call__(self, results): """Call function to Use CLAHE method process images. Args: results (dict): Result dict from loading pipeline. Returns: dict: Processed results. """ for i in range(results['img'].shape[2]): results['img'][:, :, i] = mmcv.clahe( np.array(results['img'][:, :, i], dtype=np.uint8), self.clip_limit, self.tile_grid_size) return results
def test_CLAHE(): # test assertion if clip_limit is None with pytest.raises(AssertionError): transform = dict(type='CLAHE', clip_limit=None) build_from_cfg(transform, PIPELINES) # test assertion if tile_grid_size is illegal with pytest.raises(AssertionError): transform = dict(type='CLAHE', tile_grid_size=(8.0, 8.0)) build_from_cfg(transform, PIPELINES) # test assertion if tile_grid_size is illegal with pytest.raises(AssertionError): transform = dict(type='CLAHE', tile_grid_size=(9, 9, 9)) build_from_cfg(transform, PIPELINES) transform = dict(type='CLAHE', clip_limit=2) transform = build_from_cfg(transform, PIPELINES) results = dict() img = mmcv.imread( osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') original_img = copy.deepcopy(img) results['img'] = img results['img_shape'] = img.shape results['ori_shape'] = img.shape # Set initial values for default meta_keys results['pad_shape'] = img.shape results['scale_factor'] = 1.0 results = transform(results) converted_img = np.empty(original_img.shape) for i in range(original_img.shape[2]): converted_img[:, :, i] = mmcv.clahe( np.array(original_img[:, :, i], dtype=np.uint8), 2, (8, 8)) assert np.allclose(results['img'], converted_img) assert str(transform) == f'CLAHE(clip_limit={2}, tile_grid_size={(8, 8)})'