init
This commit is contained in:
BIN
study/color_space_transform_matrix.png
Normal file
BIN
study/color_space_transform_matrix.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
48
study/create_matrix.py
Executable file
48
study/create_matrix.py
Executable file
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
def usage():
|
||||
print("usage: Kr Kg Kb full|limited")
|
||||
print("examples:")
|
||||
print(" create_matrix.py 0.2126 0.7152 0.0722 full")
|
||||
print(" create_matrix.py 0.2126 0.7152 0.0722 limited")
|
||||
exit(1)
|
||||
|
||||
def a(v):
|
||||
if v >= 0:
|
||||
return " %f" % v
|
||||
else:
|
||||
return "%f" % v
|
||||
|
||||
def main(argv):
|
||||
if len(argv) != 5:
|
||||
usage()
|
||||
|
||||
Kr = float(sys.argv[1])
|
||||
Kg = float(sys.argv[2])
|
||||
Kb = float(sys.argv[3])
|
||||
color_range = sys.argv[4]
|
||||
luma_offset = 0.0
|
||||
transform_range = 1.0
|
||||
|
||||
if color_range == "full":
|
||||
pass
|
||||
elif color_range == "limited":
|
||||
transform_range = (235.0 - 16.0) / 255.0
|
||||
luma_offset = 16.0 / 255.0
|
||||
|
||||
matrix = [
|
||||
[Kr, Kg, Kb],
|
||||
[-0.5 * (Kr / (1.0 - Kb)), -0.5 * (Kg / (1.0 - Kb)), 0.5],
|
||||
[0.5, -0.5 * (Kg / (1.0 - Kr)), -0.5 * (Kb / (1.0 -Kr))],
|
||||
[0.0, 0.5, 0.5]
|
||||
]
|
||||
|
||||
# Transform from row major to column major for glsl
|
||||
print("const mat4 RGBtoYUV = mat4(%f, %s, %s, %f," % (matrix[0][0] * transform_range, a(matrix[1][0] * transform_range), a(matrix[2][0] * transform_range), 0.0))
|
||||
print(" %f, %s, %s, %f," % (matrix[0][1] * transform_range, a(matrix[1][1] * transform_range), a(matrix[2][1] * transform_range), 0.0))
|
||||
print(" %f, %s, %s, %f," % (matrix[0][2] * transform_range, a(matrix[1][2] * transform_range), a(matrix[2][2] * transform_range), 0.0))
|
||||
print(" %f, %s, %s, %f);" % (matrix[3][0] + luma_offset, a(matrix[3][1]), a(matrix[3][2]), 1.0))
|
||||
|
||||
main(sys.argv)
|
||||
Reference in New Issue
Block a user