fovx
์ ํด๋นํ๋ camera_angle_x
๋ง ์์ผ๋ฉด image์ height, width
๋ก fovy
๋ ๊ณ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
- NeRF dataset์
transforms_train.json
, transforms_test.json
์์ ["camera_angle_x"]
๋ fovx
์
๋๋ค.
fovx
์ image์ height width
๋ฅผ ์๋ฉด fovy
๊ฐ ๊ณ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
# 3dgs/scene/dataset_readers.py
def readCamerasFromTransforms(path, transformsfile, white_background, extension=".png"):
cam_infos = []
with open(os.path.join(path, transformsfile)) as json_file:
contents = json.load(json_file)
fovx = contents["camera_angle_x"]
frames = contents["frames"]
for idx, frame in enumerate(frames):
...
fovy = focal2fov(fov2focal(fovx, image.size[0]), image.size[1])
FovY = fovy
FovX = fovx
# 3dgs/utils/graphic_utils.py
def fov2focal(fov, pixels):
return pixels / (2 * math.tan(fov / 2))
def focal2fov(focal, pixels):
return 2*math.atan(pixels/(2*focal))
๊ฐ ๋จ๊ณ๋ฅผ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ ์์ผ๊ฐ(
fovx
)์ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฝ์
์(width
)๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๊ฑฐ๋ฆฌ(focal length
) ๊ณ์ฐ:
focal_length = fov2focal(fovx, image_width)
- ๊ณ์ฐ๋ ์ด์ ๊ฑฐ๋ฆฌ์ ์ด๋ฏธ์ง์ ์ธ๋ก ํฝ์
์(
height
)๋ฅผ ์ด์ฉํ์ฌ ์์ง ์์ผ๊ฐ(fovy
) ๊ณ์ฐ:
fovy = focal2fov(focal_length, image_height)
์ ์ฒด ์ฝ๋ ์์
import math
def fov2focal(fov, pixels):
return pixels / (2 * math.tan(fov / 2))
def focal2fov(focal, pixels):
return 2 * math.atan(pixels / (2 * focal))
# ์ฃผ์ด์ง ๊ฐ
fovx = ... # ์ํ ์์ผ๊ฐ (radians ๋จ์)
image_width = ... # ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฝ์
์
image_height = ... # ์ด๋ฏธ์ง์ ์ธ๋ก ํฝ์
์
# ์ํ ์์ผ๊ฐ์ ์ด์ฉํ์ฌ ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
focal_length = fov2focal(fovx, image_width)
# ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์์ง ์์ผ๊ฐ ๊ณ์ฐ
fovy = focal2fov(focal_length, image_height)
print("fovx:", fovx)
print("fovy:", fovy)
์์
fovx
= 90๋ (radians ๋จ์๋ก ๋ณํ ์ ์ฝ 1.5708 rad)
image_width
= 1920 ํฝ์
image_height
= 1080 ํฝ์
import math
def fov2focal(fov, pixels):
return pixels / (2 * math.tan(fov / 2))
def focal2fov(focal, pixels):
return 2 * math.atan(pixels / (2 * focal))
# ์ฃผ์ด์ง ๊ฐ
fovx = math.radians(90) # ์ํ ์์ผ๊ฐ 90๋
image_width = 1920 # ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฝ์
์
image_height = 1080 # ์ด๋ฏธ์ง์ ์ธ๋ก ํฝ์
์
# ์ํ ์์ผ๊ฐ์ ์ด์ฉํ์ฌ ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
focal_length = fov2focal(fovx, image_width)
# ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์์ง ์์ผ๊ฐ ๊ณ์ฐ
fovy = focal2fov(focal_length, image_height)
print("fovx:", math.degrees(fovx), "degrees")
print("fovy:", math.degrees(fovy), "degrees")
- ์ ์ฝ๋ ์คํ ๊ฒฐ๊ณผ๋
fovy
๊ฐ์ด ์ฝ 53.13๋๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ์ด๋ ๊ฐ๋ก ์์ผ๊ฐ 90๋, ์ด๋ฏธ์ง ๋น์จ 16:9(1920x1080)์์์ ์ธ๋ก ์์ผ๊ฐ์
๋๋ค.
์์ฝ
- ์ํ ์์ผ๊ฐ(
fovx
)๊ณผ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ํฝ์
์
๋ฅผ ์๋ฉด, ์์ง ์์ผ๊ฐ(fovy
)์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์นด๋ฉ๋ผ์ ์ ์ฒด ์์ผ๊ฐ์ ์ค์ ํ๊ฑฐ๋ ๋ณํํ ์ ์์ต๋๋ค.
Leave a comment