#computer-vision #homography #projective-geometry
#компьютерное зрение #гомография #проективная геометрия
Вопрос:
Я читаю код искажения изображений проективной геометрии из Google
def WarpCoordinatesWithHomography(homography, rect, cfg): """Computes the warped coordinates from rect through homography. Computes the corresponding coordinates on the image for each pixel of rect. Note that the returned coordinates are in x, y order. The returned image can be used to warp from the image to the pixels of the depth_plane within rect. warp_coordinates = ApplyHomographyToCoords(....) warped_from_image(x, y) = image(warp_coordinates(x, y)[0], warp_coordinates(x, y)[1]) Args: homography: A 3x3 tensor representing the transform applied to the coordinates inside rect. rect: An integer tensor [start_y, start_x, end_y, end_x] representing a rect. Returns: Returns a rect.height * rect.width * 2 tensor filled with image coordinates. """ ys = tf.cast(tf.range(rect[0], rect[2]), cfg.vx_tf_dtype) xs = tf.cast(tf.range(rect[1], rect[3]), cfg.vx_tf_dtype) # Adds 0.5, as pixel centers are assumed to be at half integer coordinates. image_coords_t = tf.stack(tf.meshgrid(xs, ys), axis=-1) 0.5 hom_image_coords_t = tf.concat( (image_coords_t, tf.ones([rect[2] - rect[0], rect[3] - rect[1], 1])), axis=-1) hom_warped_coords = tf.einsum('ijk,lk-gt;ijl', hom_image_coords_t, homography) res = tf.math.divide_no_nan(hom_warped_coords[:, :, :-1], hom_warped_coords[:, :, 2:3]) return res
В чем причина использования «полуцелых координат», которые начинались с 0,5?
Ответ №1:
Некоторые люди считают пиксель точечной выборкой в сетке, некоторые люди считают их квадратом 1×1.
В этой последней категории некоторые люди считают, что квадрат 1×1 центрирован по целочисленным координатам, например, один квадрат колеблется от 0,5 до 1,5. Другие люди считают, что квадрат, например, находится в диапазоне от 0,0 до 1,0, и, таким образом, пиксель центрирован на «половинном целочисленном».
Короче говоря, это просто выбор системы координат. Не имеет значения, какую систему координат вы используете, если вы используете ее последовательно.
Комментарии:
1. Иметь смысл. Одна практическая вещь, которую я обнаружил с полуцелыми координатами, заключается в том, что мне нужно вычесть 0,5 из сетки, чтобы координаты начинались с -0,5 вместо добавления во время обратной (обратной) деформации гомографии, чтобы исходные искаженные пиксели изображения находились в одном и том же месте без сдвига. Не знаю, имеет ли это смысл, но это работает.