def random_rotate(w,h,angle,scale,*all_inputs):
if type(angle)==float:
angle=(-angle,angle)
if type(scale)==float:
scale=(1-scale,1+scale)
cx=(np.random.rand(len(all_inputs[0])).astype(floatX))*w
cy=(np.random.rand(len(all_inputs[0])).astype(floatX))*h
actions=(np.random.rand(len(all_inputs[0]),4,1,1)).astype(floatX)
actions2=np.zeros_like(actions)
actions2[:,0]=(actions[:,0]*(angle[1]-angle[0])+angle[0]).astype(floatX)
actions2[:,1]=(actions[:,1]*(scale[1]-scale[0])+scale[0]).astype(floatX)
actions2[:,2,0,0]=cx
actions2[:,3,0,0]=cy
all_outputs=[]
for inputs in all_inputs:
outputs=np.zeros(inputs.shape,dtype=floatX)
for i in range(len(inputs)):
mat = cv2.getRotationMatrix2D((cx[i],cy[i]),actions2[i,0,0,0],actions2[i,1,0,0])
tmp = cv2.warpAffine(inputs[i].transpose(1,2,0),mat,inputs[i].shape[1:]).transpose(2,0,1)
#tmp=np.pad(inputs[i:i+1],((0,0),(0,0),(n,n),(n,n)),mode='constant',constant_values=0)
#tmp=np.roll(tmp,actions2[i,0,0,0],2)
#tmp=np.roll(tmp,actions2[i,1,0,0],3)
outputs[i]=tmp
all_outputs+=[outputs]
return all_outputs+[actions2.reshape(len(inputs),4)]
评论列表
文章目录