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

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

Сообщение Anonymous »

У меня есть изображение с двумя дубликатами в нем. Я вырезал изображение пополам вертикально и нуждается в соответствии с изображениями при наложении Pixel Pixel. Я использую CV2.findTransformecc в Python, чтобы найти матрицу варп, чтобы преобразовать верхнюю половину, чтобы соответствовать нижней половине. Я подозреваю, что это потому, что это изображение требует большего изменения. Я пробовал до 40 000 итераций, и оно все еще дает мне размытое изображение, когда я добавляю две половинки друг к другу (чтобы увидеть перекрытие). < /P>
Я подумал, что, может быть, я могу сказать, где Начните (как я могу видеть по глазу, что первая половина должна быть переведена в направлении y. Сначала матрица угадания, а затем позволит алгоритму ECC взять его оттуда? Придется ли я добавить или матрицу умножить мою начальную матрицу догадки с матрицей ECC Warp, чтобы получить одинаковое полное преобразование?
Это код, который я использую:

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

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(USAF_im_path, ecc_iter, ecc_crit):

    USAF_im = imageio.imread(USAF_im_path)

    print(USAF_im.dtype)

    def plot(data, title): #easy plotting for debugging
        plot.i += 1
        plt.subplot(2,1,plot.i)
        plt.imshow(data)
        plt.gray()
        plt.title(title)

    A = USAF_im[0:512, 0:1025]
    B = USAF_im[512:1024, 0:1025]

    def apply_fft_filter(image):
        """
        Apply a filter to the image in the frequency domain to remove the Gaussian beam.
        Parameters:
        - image: 2D numpy array representing the image.
        Returns:
        - filtered_image: 2D numpy array of the filtered image.
        """
        lowpass = ndimage.gaussian_filter(image, 60)
        filtered_image = image/lowpass
        return filtered_image

    filtered_A = apply_fft_filter(A)
    filtered_B = apply_fft_filter(B)

    plot.i = 0
    plot(A,"A")
    plot(filtered_A, "filter A")
    plt.show()

    plot.i = 0
    plot(B,"B")
    plot(filtered_B, "filtered B")
    plt.show()

    # 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(image2, image1, warp_matrix, cv2.MOTION_AFFINE, criteria)
    # Apply the affine transformation
    aligned_image1 = cv2.warpAffine(image1, warp_matrix, (image2.shape[1], image2.shape[0]), flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)

    #compare A and B overlap before and after transform
    pre_diff = filtered_A + filtered_B
    post_diff = image2 + aligned_image1

    plot.i = 0
    plot(pre_diff,"before affine transform")
    plot(post_diff, "after transform")
    plt.show()

    return warp_matrix

warp_matrix = image_parameters('filepath/USAF_ 1.spe',
                                                   5000, 1e-10)
Я не могу найти способ загрузить изображения здесь, чтобы проверить, они .spe - извините за это.

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

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

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

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

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

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

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