@@ -208,11 +208,10 @@ def _rgb_to_hsv(image: torch.Tensor) -> torch.Tensor:
208
208
209
209
mask_maxc_neq_r = maxc != r
210
210
mask_maxc_eq_g = maxc == g
211
- mask_maxc_neq_g = ~ mask_maxc_eq_g
212
211
213
- hr = ( bc - gc ).mul_ (~ mask_maxc_neq_r )
214
- hg = ( 2.0 + rc ). sub_ (bc ).mul_ (mask_maxc_eq_g & mask_maxc_neq_r )
215
- hb = (4.0 + gc ).sub_ (rc ).mul_ (mask_maxc_neq_g & mask_maxc_neq_r )
212
+ hg = rc . add ( 2.0 ). sub_ ( bc ).mul_ (mask_maxc_eq_g & mask_maxc_neq_r )
213
+ hr = bc . sub_ (gc ).mul_ (~ mask_maxc_neq_r )
214
+ hb = gc . add_ (4.0 ).sub_ (rc ).mul_ (mask_maxc_neq_r . logical_and_ ( mask_maxc_eq_g . logical_not_ ()) )
216
215
217
216
h = hr .add_ (hg ).add_ (hb )
218
217
h = h .mul_ (1.0 / 6.0 ).add_ (1.0 ).fmod_ (1.0 )
@@ -221,14 +220,16 @@ def _rgb_to_hsv(image: torch.Tensor) -> torch.Tensor:
221
220
222
221
def _hsv_to_rgb (img : torch .Tensor ) -> torch .Tensor :
223
222
h , s , v = img .unbind (dim = - 3 )
224
- h6 = h * 6
223
+ h6 = h . mul ( 6 )
225
224
i = torch .floor (h6 )
226
- f = h6 - i
225
+ f = h6 . sub_ ( i )
227
226
i = i .to (dtype = torch .int32 )
228
227
229
- p = (v * (1.0 - s )).clamp_ (0.0 , 1.0 )
230
- q = (v * (1.0 - s * f )).clamp_ (0.0 , 1.0 )
231
- t = (v * (1.0 - s * (1.0 - f ))).clamp_ (0.0 , 1.0 )
228
+ sxf = s * f
229
+ one_minus_s = 1.0 - s
230
+ q = (1.0 - sxf ).mul_ (v ).clamp_ (0.0 , 1.0 )
231
+ t = sxf .add_ (one_minus_s ).mul_ (v ).clamp_ (0.0 , 1.0 )
232
+ p = one_minus_s .mul_ (v ).clamp_ (0.0 , 1.0 )
232
233
i .remainder_ (6 )
233
234
234
235
mask = i .unsqueeze (dim = - 3 ) == torch .arange (6 , device = i .device ).view (- 1 , 1 , 1 )
@@ -238,7 +239,7 @@ def _hsv_to_rgb(img: torch.Tensor) -> torch.Tensor:
238
239
a3 = torch .stack ((p , p , t , v , v , q ), dim = - 3 )
239
240
a4 = torch .stack ((a1 , a2 , a3 ), dim = - 4 )
240
241
241
- return (a4 .mul_ (mask .to ( dtype = img . dtype ). unsqueeze (dim = - 4 ))).sum (dim = - 3 )
242
+ return (a4 .mul_ (mask .unsqueeze (dim = - 4 ))).sum (dim = - 3 )
242
243
243
244
244
245
def adjust_hue_image_tensor (image : torch .Tensor , hue_factor : float ) -> torch .Tensor :
0 commit comments