Beispiel #1
0
def test_grid_distortion_interpolation(interpolation):
    image = np.random.randint(low=0,
                              high=256,
                              size=(100, 100, 3),
                              dtype=np.uint8)
    mask = np.random.randint(low=0, high=2, size=(100, 100), dtype=np.uint8)
    aug = A.GridDistortion(num_steps=1,
                           distort_limit=(0.3, 0.3),
                           interpolation=interpolation,
                           p=1)
    data = aug(image=image, mask=mask)
    expected_image = F.grid_distortion(image,
                                       num_steps=1,
                                       xsteps=[1.3],
                                       ysteps=[1.3],
                                       interpolation=interpolation,
                                       border_mode=cv2.BORDER_REFLECT_101)
    expected_mask = F.grid_distortion(mask,
                                      num_steps=1,
                                      xsteps=[1.3],
                                      ysteps=[1.3],
                                      interpolation=cv2.INTER_NEAREST,
                                      border_mode=cv2.BORDER_REFLECT_101)
    assert np.array_equal(data['image'], expected_image)
    assert np.array_equal(data['mask'], expected_mask)
Beispiel #2
0
def spacialAg(img1,img2):


    # 水平翻转
    if np.random.random() < 0.5:
        img1 = functional.hflip(img1)
        img2 = functional.hflip(img2)
    # 垂直翻转
    if np.random.random() < 0.5:
        img1 = functional.vflip(img1)
        img2 = functional.vflip(img2)

    # 绕图像中心旋转
    if np.random.random() < 0.5:
        angle = np.random.uniform(-20, 20)
        scale = np.random.uniform(1 - 0.1, 1 + 0.1)
        dx = np.random.uniform(-0.0625, 0.0625)
        dy = np.random.uniform(-0.0625, 0.0625)
        img1 = functional.shift_scale_rotate(img1, angle, scale, dx, dy, interpolation=cv2.INTER_LINEAR,
                                             border_mode=cv2.BORDER_CONSTANT)
        img2 = functional.shift_scale_rotate(img2, angle, scale, dx, dy, interpolation=cv2.INTER_LINEAR,
                                             border_mode=cv2.BORDER_CONSTANT)

    # 网格扭曲
    if np.random.random() < 0.5:
        num_steps = 5
        distort_limit = (-0.3, 0.3)
        stepsx = [1 + np.random.uniform(distort_limit[0], distort_limit[1]) for i in
                  range(num_steps + 1)]
        stepsy = [1 + np.random.uniform(distort_limit[0], distort_limit[1]) for i in
                  range(num_steps + 1)]

        img1 = functional.grid_distortion(img1, num_steps, stepsx, stepsy, interpolation=cv2.INTER_LINEAR,
                                          border_mode=cv2.BORDER_CONSTANT)
        img2 = functional.grid_distortion(img2, num_steps, stepsx, stepsy, interpolation=cv2.INTER_LINEAR,
                                          border_mode=cv2.BORDER_CONSTANT)

    #  弹性扭曲
    if np.random.random() < 0.5:
        alpha = 1
        sigma = 50
        alpha_affine = 50
        interpolation = cv2.INTER_LINEAR
        random_state = np.random.randint(0, 10000)
        img1 = functional.elastic_transform_fast(img1, alpha, sigma, alpha_affine, interpolation,
                                                 cv2.BORDER_CONSTANT, np.random.RandomState(random_state))
        img2 = functional.elastic_transform_fast(img2, alpha, sigma, alpha_affine, interpolation, cv2.BORDER_CONSTANT,
                                                 np.random.RandomState(random_state))


    return img1, img2
 def __call__(self, sample):
     # print('grid', np.random.uniform(0.0, 1.0))
     
     if np.random.uniform(0.0, 1.0) < self.p:
         return sample
     h, w, _ = sample["img"].shape
     
     # grid_distortion
     if np.random.uniform(0.0, 1.0) < self.p:
         num_steps=15
         distort_limit=[-0.05,0.05]
         stepsx = [1 + random.uniform(distort_limit[0], distort_limit[1]) for i in
                           range(num_steps + 1)]
         stepsy = [1 + random.uniform(distort_limit[0], distort_limit[1]) for i in
                           range(num_steps + 1)]
         sample["img"]=albumentations.grid_distortion(sample["img"],5,stepsx, stepsy)
     # elastic_transform
     else:
         sample["img"]=albumentations.elastic_transform(sample["img"], alpha=5, sigma=1, alpha_affine=random.uniform(0,2), 
                                         interpolation=cv2.INTER_LINEAR, border_mode=cv2.BORDER_REFLECT_101,)
     
     if np.random.uniform(0.0, 1.0) < self.p-0.2:
         sample["img"]=albumentations.jpeg_compression(sample["img"], random.randint(20, 100))
     return sample