def hsv2rgb()

in c3dm/tools/functions.py [0:0]


def hsv2rgb(hsv):
	C = hsv[:,2] * hsv[:,1]
	X = C * ( 1 - ( (hsv[:,0]*6)%2 - 1 ).abs() )
	m = hsv[:,2] - C

	# zero tensor
	z = hsv[:,0] * 0.

	h = hsv[:,0]

	RGB = \
		((h <= 1/6)            )[:,None,:,:].float() * torch.stack((C,X,z), dim=1) +\
		((h > 1/6) * (h <= 2/6))[:,None,:,:].float() * torch.stack((X,C,z), dim=1) +\
		((h > 2/6) * (h <= 3/6))[:,None,:,:].float() * torch.stack((z,C,X), dim=1) +\
		((h > 3/6) * (h <= 4/6))[:,None,:,:].float() * torch.stack((z,X,C), dim=1) +\
		((h > 4/6) * (h <= 5/6))[:,None,:,:].float() * torch.stack((X,z,C), dim=1) +\
		((h > 5/6) * (h <= 6/6))[:,None,:,:].float() * torch.stack((C,z,X), dim=1)

	# if self.hsv[0] < 1/6:
	# 	R_hat, G_hat, B_hat = C, X, 0
	# elif self.hsv[0] < 2/6:
	# 	R_hat, G_hat, B_hat = X, C, 0
	# elif self.hsv[0] < 3/6:
	# 	R_hat, G_hat, B_hat = 0, C, X
	# elif self.hsv[0] < 4/6:
	# 	R_hat, G_hat, B_hat = 0, X, C
	# elif self.hsv[0] < 5/6:
	# 	R_hat, G_hat, B_hat = X, 0, C
	# elif self.hsv[0] <= 6/6:
	# 	R_hat, G_hat, B_hat = C, 0, X

	RGB = RGB + m[:,None,:,:]

	# R, G, B = (R_hat+m), (G_hat+m), (B_hat+m)
	
	return RGB