Будут повышения производительности JavaScript от Деревьев Трассировки находить свой путь на другие интерпретируемые языки?

При обработке изображений это называется переводом изображения.

Исходное изображение:

enter image description here

import cv2
import numpy as np

# Read image
img = cv2.imread("roi.jpg") 

# The number of pixels
num_rows, num_cols = img.shape[:2]

# Creating a translation matrix
translation_matrix = np.float32([ [1,0,70], [0,1,110] ])

# Image translation
img_translation = cv2.warpAffine(img, translation_matrix, (num_cols,num_rows))

#cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

Это даст вам:

[1110 ] enter image description here

Но мы хотим что-то вроде этого:

enter image description here

Перевод в основном означает, что мы сдвиг изображения путем добавления / вычитания координат X и Y. Для этого нам нужно создать матрицу преобразования, как показано ниже:

enter image description here

Здесь значения tx и ty являются значениями перевода X и Y, то есть изображение будет перемещено на X единиц вправо и на Y единиц вниз.

Так что, как только мы создадим такую ​​матрицу, мы можем использовать функцию warpAffine, чтобы применить ее к нашему изображению.

Третий аргумент в warpAffine относится к числу строк и столбцов в результирующем изображении. Поскольку количество строк и столбцов совпадает с исходным изображением, результирующее изображение будет обрезано. Причина этого в том, что у нас не было достаточно места на выходе, когда мы применили матрицу перевода. Чтобы избежать обрезки, мы можем сделать что-то подобное:

img_translation = cv2.warpAffine(img, translation_matrix, (num_cols + 70, num_rows + 110))

cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

И это приведет к:

enter image description here

Помните, что размер изображения при загрузке здесь изменяется, не беспокойтесь, это ваш желаемый результат.

Кроме того, если мы хотим переместить изображение в середине большего кадра изображения; мы можем сделать что-то подобное, выполнив следующее:

num_rows, num_cols = img.shape[:2]

translation_matrix = np.float32([ [1,0,70], [0,1,110] ])

img_translation = cv2.warpAffine(img, translation_matrix, (num_cols + 70, num_rows + 110))

translation_matrix = np.float32([ [1,0,-30], [0,1,-50] ])

img_translation = cv2.warpAffine(img_translation, translation_matrix, (num_cols + 70 + 30, num_rows + 110 + 50))

cv2.namedWindow('Translation', cv2.WINDOW_NORMAL)
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
cv2.destroyAllWindows()

, который дает вам вывод:

enter image description here

7
задан Paul Dixon 26 September 2008 в 17:49
поделиться

2 ответа

Существует исследование JVM Andreas Gal по имени HotPath, и некоторые люди от его команды в настоящее время работают над добавлением вложенного дерева трассировки базирующийся JITting Maxine (новое исследование Sun JVM, записанная в Java) и HotSpot. Так, по крайней мере, это собирается в другом VMs для других языков также.

Кроме того, новый JIT-компилятор PyPy (в настоящее время смоделированный в Прологе) использует некоторый метод трассировки, хотя я не знаю, как тесно связанный, который является к стилю Gal/Franz, вложил деревья трассировки.

Парни Rubinius определенно знают об этой работе, и очень открытые для экспериментирования. Я не был бы удивлен, если некоторые усовершенствованные методы компиляции запускают показ там, скоро.

BTW: существует VM Ruby, записанный в JavaScript, названном HotRuby. При выполнении этого на TraceMonkey Вы получаете трассировку основанный на дереве Ruby бесплатно :-)

7
ответ дан 7 December 2019 в 07:52
поделиться

Единственный возможный ответ на это: Надо надеяться!

0
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: