У меня есть изображение с двумя дубликатами в нем. Я вырезал изображение пополам вертикально и нуждается в соответствии с изображениями при наложении 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
Как я могу дать cv2.findtransformECC первоначальное предположение, чтобы ускорить поиск матрицы деформации? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение