def randomDistort1(img, distort_limit=0.35, shift_limit=0.25, u=0.5):
if random.random() < u:
height, width, channel = img.shape
# debug
# img = img.copy()
# for x in range(0,width,10):
# cv2.line(img,(x,0),(x,height),(1,1,1),1)
# for y in range(0,height,10):
# cv2.line(img,(0,y),(width,y),(1,1,1),1)
k = random.uniform(-distort_limit, distort_limit) * 0.00001
dx = random.uniform(-shift_limit, shift_limit) * width
dy = random.uniform(-shift_limit, shift_limit) * height
# map_x, map_y = cv2.initUndistortRectifyMap(intrinsics, dist_coeffs, None, None, (width,height),cv2.CV_32FC1)
# https://stackoverflow.com/questions/6199636/formulas-for-barrel-pincushion-distortion
# https://stackoverflow.com/questions/10364201/image-transformation-in-opencv
x, y = np.mgrid[0:width:1, 0:height:1]
x = x.astype(np.float32) - width / 2 - dx
y = y.astype(np.float32) - height / 2 - dy
theta = np.arctan2(y, x)
d = (x * x + y * y) ** 0.5
r = d * (1 + k * d * d)
map_x = r * np.cos(theta) + width / 2 + dx
map_y = r * np.sin(theta) + height / 2 + dy
img = cv2.remap(img, map_x, map_y, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101)
return img
# http://pythology.blogspot.sg/2014/03/interpolation-on-regular-distorted-grid.html
## grid distortion
n06_pytorch_utils.py 文件源码
python
阅读 20
收藏 0
点赞 0
评论 0
评论列表
文章目录