Как я могу дать cv2.findtransformECC первоначальное предположение, чтобы ускорить поиск матрицы деформации?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу дать cv2.findtransformECC первоначальное предположение, чтобы ускорить поиск матрицы деформации?

Сообщение Anonymous »

У меня есть изображение с двумя дубликатами в нем. Я вырезал изображение пополам вертикально и нуждается в соответствии с изображениями при наложении Pixel Pixel. Я использую CV2.findTransformecc в Python, чтобы найти матрицу варп, чтобы преобразовать верхнюю половину, чтобы соответствовать нижней половине. Я подумал, что, может быть, я мог бы сказать это, с чего начать с преобразования с матрицей деформации догадки (как я могу видеть по глазу, что первая половина должна быть переведена в направлении Y Работайте над совершенствованием. Это сработало отлично. Поэтому я хотел бы иметь одну последнюю матрицу варп, которая может быть передана. Я прочитал в других ответах, что для объединения двух преобразований деформации я должен добавить третий ряд матрицы идентификации в каждый, а затем сделать умножение матрицы. Я сделал это (умножение как AB, так и BA на всякий случай), но, похоже, это не работает. то есть окончательная матрица делает и не дает тот же результат, что и применение двух матриц варп, одна за другой. < /p>
Это код, который я использую: < /p>
import imageio.v2 as imageio
import numpy as np
from matplotlib import pyplot as plt
from scipy import ndimage
import cv2
from PIL import Image

def image_parameters(ecc_iter, ecc_crit):

# generate a sample image
image_path = cv2.samples.findFile("lena.jpg")
image = cv2.imread(image_path)
# mess up the image
in_warp = [[0.6, 0.07, -13.5], [0.04, 0.96, 20]]
Image_distorted = cv2.warpAffine(image, warp_matrix, (image.shape[1], image.shape[0]), flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)

# bring image closer with a guess warp matrix
guess_warp = [[0.04, 0.01, 10], [0, 0, -20]]
Image1 = cv2.warpAffine(image_distorted, guess_warp, (image.shape[1], image.shape[0]), flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)

    # Initialize the warp matrix (affine transformation)
    warp_matrix = np.eye(2, 3, dtype=np.float32)
    # Define criteria for the ECC algorithm
    criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, ecc_iter, ecc_crit)
    # Compute the transformation matrix, first argument is template, second is image that will be transformed
    (cc, warp_matrix) = cv2.findTransformECC(image, image1, warp_matrix, cv2.MOTION_AFFINE, criteria)
    # Apply the affine transformation
    aligned_image1 = cv2.warpAffine(image1, warp_matrix, (image.shape[1], image.shape[0]), flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)

    #compare overlap before and after transform
    pre_diff = Image_distorted + image
    post_diff = aligned_image1 + image

    plt.imshow(pre_diff)
    plt.imshow(post_diff)
    plt.show()

a = [0, 0, 1]
final_warp = np.vstack([warp_matrix, a]) @ np.vstack([guess_matrix, a])

return final_warp

(warp_matrix) = image_parameters(4000, 1e-10)


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

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

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

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

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

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

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