def _covariance_ops(image, covariance, total, mean, num_threads):
num = tf.mul(tf.shape(image)[0], tf.shape(image)[1])
num = tf.cast(num, tf.float32)
mean_tiled = util.replicate_to_image_shape(image, mean)
remainders = tf.sub(image, mean_tiled)
remainders_stack = tf.pack([remainders, remainders, remainders])
remainders_stack_transposed = tf.transpose(remainders_stack, [3, 1, 2, 0])
pseudo_squares = tf.mul(remainders_stack, remainders_stack_transposed)
sum_of_squares = tf.reduce_sum(pseudo_squares, [1, 2])
queue = _make_queue([sum_of_squares, num], [[3, 3], []], num_threads, 'covariance_queue')
img_sum_sq, img_num = queue.dequeue()
covariance_update = covariance.assign_add(img_sum_sq)
total_update = total.assign_add(img_num)
return [covariance_update, total_update]
评论列表
文章目录