25 lines
705 B
Python
25 lines
705 B
Python
|
|
from copy import deepcopy
|
|
import math
|
|
from typing import List
|
|
|
|
import numpy as np
|
|
|
|
def rotate_hue_vector(rgb_image: List[List[List[float]]], degree: int) -> List[List[List[float]]]:
|
|
if degree == 0:
|
|
return deepcopy(rgb_image)
|
|
|
|
radians = np.radians(degree)
|
|
sin = np.sin(radians)
|
|
cos = np.cos(radians)
|
|
|
|
# 1/sqrt(3) * (1,1,1)を軸として作成
|
|
n = (1 / math.sqrt(3))
|
|
n2 = n * n
|
|
cos2 = (1 - cos) * n2
|
|
rot = np.array([[cos2 + cos, cos2 - n * sin, cos2 + n * sin],
|
|
[cos2 + n * sin, cos2 + cos, cos2 - n * sin],
|
|
[cos2 - n * sin, cos2 + n * sin, cos2 + cos]])
|
|
|
|
return [[rot @ rgb for rgb in row] for row in rgb_image]
|