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