lib/tracksperanto/uv_coordinates.rb
# For Syntheyes, zero is at the
# optical center of the image, and goes positive right and up. The corners get the [-1..1] coordinates
# respectively. Since Tracksperanto works in absolute pixels we need to convert to and from these cords.
# Note that Syntheyes actually assumes the center of the first pixel to be at -1,1 so a small
# adjustment is necessary to maintain subpixel accuracy.
module Tracksperanto::UVCoordinates
# Convert absolute X and Y values off the BL corner into Syntheyes UV coordinates
def absolute_to_uv(abs_x, abs_y, w, h)
[convert_to_uv(abs_x, w), convert_to_uv(abs_y, h) * -1]
end
# Convert absolute pixel value off the BL corner into Syntheyes UV coordinate
def convert_to_uv(abs_value, absolute_side)
uv_value = (((abs_value.to_f - 0.5) / (absolute_side.to_f - 1)) - 0.5) * 2.0
end
# Convert Syntheyes UV value into absolute pixel value off the BL corner
def convert_from_uv(uv_value, absolute_side)
# Account for the fact that Syntheyes assumes the
# pixel values to be at the center of the pixel
abs_value = (((uv_value.to_f / 2.0) + 0.5) * (absolute_side.to_f - 1)) + 0.5
end
end