Как я могу применить результаты аффинного преобразования для настройки нескольких ROI вместо преобразования всего изобраPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу применить результаты аффинного преобразования для настройки нескольких ROI вместо преобразования всего изобра

Сообщение Anonymous »

Я работаю над процессом выравнивания изображений с использованием OpenCV и AKAZE, и мне нужны некоторые разъяснения о том, как я могу применить результаты аффинного преобразования для настройки координат нескольких ROI (областей интереса) перед обрезкой изображения.< /p>
Вот что я сейчас делаю:
Я загружаю изображение шаблона (GOLD-изображение) и разрешаю пользователю выбрать в нем область интереса.
Я затем используйте cv2.matchTemplate, чтобы найти шаблон в другом изображении (изображение DUT).
После этого я использую AKAZE для обнаружения ключевых точек и дескрипторов, а результаты использую для вычисления матрицы аффинного преобразования с помощью cv2.estimateAffine2D.Наконец, я применяю аффинное преобразование, чтобы выровнять изображение DUT и обрезать совпадающую область.
То, чего я хочу сейчас добиться, — это настроить координаты нескольких ROI с использованием матрицы аффинного преобразования перед обрезкой изображения DUT. По сути, я хочу применить преобразование к ROI, а не преобразовывать все изображение и потом обрезать его.
Можно ли настроить координаты ROI непосредственно с помощью матрицы аффинного преобразования (M), а не чем преобразовывать все изображение? Если да, то как я могу применить это преобразование к каждой рентабельности инвестиций? Могу ли я использовать матричные операции для обновления координат области интереса без преобразования всего изображения?
Вот соответствующий код, который я сейчас использую:

Код: Выделить всё

akaze = cv2.AKAZE_create(threshold=0.0001,
nOctaves=2,
nOctaveLayers=2
)

# Detect keypoints and compute descriptors
keypoints_ref, descriptors_ref = akaze.detectAndCompute(image_ref, None)
keypoints_dut, descriptors_dut = akaze.detectAndCompute(cropped_dut, None)

# Brute force matcher to compare descriptors
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(descriptors_ref, descriptors_dut)
matches = sorted(matches, key=lambda x: x.distance)

# Estimate affine transformation
points_gold = np.array([keypoints_ref[m.queryIdx].pt for m in matches], dtype=np.float32)
points_dut = np.array([keypoints_dut[m.trainIdx].pt for m in matches], dtype=np.float32)

#Affine transformation matrix M is obtained from AKAZE keypoints matching
M, mask = cv2.estimateAffine2D(points_dut, points_gold, method=cv2.RANSAC)

# Example of applying the transformation to the DUT image
aligned_dut_color = cv2.warpAffine(cropped_dut, M, (image_ref.shape[1], image_ref.shape[0]))

# What I need is to apply the transformation to ROI coordinates
# instead of applying it to the whole cropped image.

Будем очень признательны за любую помощь или предложения о том, как применить это преобразование к координатам ROI!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ois-instea
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»