code: def optical_distortion(img, k=0, dx=0, dy=0, interpolation=cv2.INTER_LINEAR, border_mode=cv2.BORDER_REFLECT_101,
                         value=None):
      
      height, width = img.shape[:2]
  
      fx = width
      fy = width
  
      cx = width * 0.5 + dx
      cy = height * 0.5 + dy
  
      camera_matrix = np.array([[fx, 0, cx],
                                [0, fy, cy],
                                [0, 0, 1]], dtype=np.float32)
  
      distortion = np.array([k, k, 0, 0, 0], dtype=np.float32)
      map1, map2 = cv2.initUndistortRectifyMap(camera_matrix, distortion, None, None, (width, height), cv2.CV_32FC1)
      img = cv2.remap(img, map1, map2, interpolation=interpolation, borderMode=border_mode, borderValue=value)
      return img
docs: Barrel / pincushion distortion. Unconventional augment.
  
      Reference:
          |  https://stackoverflow.com/questions/6199636/formulas-for-barrel-pincushion-distortion
          |  https://stackoverflow.com/questions/10364201/image-transformation-in-opencv
          |  https://stackoverflow.com/questions/2477774/correcting-fisheye-distortion-programmatically
          |  http://www.coldvision.io/2017/03/02/advanced-lane-finding-using-opencv/