Копирование фокуса фотошопа в Python - PullRequest
0 голосов
/ 07 октября 2019

Привет! Я пытаюсь сфокусировать стек определенного набора изображений. Я использовал Photoshop, чтобы сфокусировать их, но мне интересно, есть ли способ воспроизвести фокусировку изображений в Python, используя тот же метод в Photoshop. Мое понимание метода фотошопа состоит в том, что он создает маску исходных изображений и рассматривает сфокусированные области в каждом изображении для создания окончательного изображения. Я использовал это в качестве справочной статьи: https://www.learnopencv.com/image-alignment-ecc-in-opencv-c-python/ https://github.com/spmallick/learnopencv/blob/master/ImageAlignment/image_alignment.py https://github.com/spmallick/learnopencv/blob/master/ImageAlignment-FeatureBased/align.py

До сих пор я пытался найти гомографии для двух изображений и использовать ORB, чтобы найти ключ. точки и дескрипторы для выравнивания изображения. Исходя из этого, я обертываю изображения для получения окончательного резкого изображения

 for i in range(0,len(matches)):
        image_1_points[i] = image_1_kp[matches[i].queryIdx].pt
        image_2_points[i] = image_2_kp[matches[i].trainIdx].pt


    homography, mask = cv2.findHomography(image_1_points, image_2_points, cv2.RANSAC, ransacReprojThreshold=2.0)

print( "Detecting features of base image")
    outimages.append(images[0])
    image1gray = cv2.cvtColor(images[0],cv2.COLOR_BGR2GRAY)
    image_1_kp, image_1_desc = detector.detectAndCompute(image1gray, None)

    for i in range(1,len(images)):
        print ("Aligning image {}".format(i))
        image_i_kp, image_i_desc = detector.detectAndCompute(images[i], None)

bf = cv2.BFMatcher()
            # This returns the top two matches for each feature point (list of list)
            pairMatches = bf.knnMatch(image_i_desc,image_1_desc, k=2)
            rawMatches = []
            for m,n in pairMatches:
                if m.distance < 0.7*n.distance:
                    rawMatches.append(m)

        sortMatches = sorted(rawMatches, key=lambda x: x.distance)
        matches = sortMatches[0:128]



        hom = findHomography(image_i_kp, image_1_kp, matches)
        newimage = cv2.warpPerspective(images[i], hom, (images[i].shape[1], images[i].shape[0]), flags=cv2.INTER_LINEAR)

        outimages.append(newimage)
...