def part_3a_2():
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.
    yos_img_03 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_03.jpg'), 0) / 255.

    levels = 4
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02, levels)
    yos_img_03_g_pyr = ps4.gaussian_pyramid(yos_img_03, levels)

    level_id = 0
    k_size = 51
    k_type = "gaussian"
    sigma = 3
    u, v = ps4.optic_flow_lk(yos_img_02_g_pyr[level_id],
                             yos_img_03_g_pyr[level_id], k_size, k_type, sigma)

    u, v = scale_u_and_v(u, v, level_id, yos_img_03_g_pyr)

    interpolation = cv2.INTER_CUBIC
    border_mode = cv2.BORDER_REFLECT101
    yos_img_03_warped = ps4.warp(yos_img_03, u, v, interpolation, border_mode)

    diff_yos_img = yos_img_02 - yos_img_03_warped
    cv2.imwrite(os.path.join(output_dir, "ps4-3-a-2.png"),
                ps4.normalize_and_scale(diff_yos_img))
Beispiel #2
0
def part_3a_2():
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.
    yos_img_03 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_03.jpg'), 0) / 255.

    levels = 1  # Define the number of pyramid levels
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02, levels)
    yos_img_03_g_pyr = ps4.gaussian_pyramid(yos_img_03, levels)

    level_id = 3  # TODO: Select the level number (or id) you wish to use
    k_size = 3  # TODO: Select a kernel size
    k_type = "uniform"  # TODO: Select a kernel type
    sigma = 1  # TODO: Select a sigma value if you are using a gaussian kernel
    u, v = ps4.optic_flow_lk(yos_img_02_g_pyr[level_id],
                             yos_img_03_g_pyr[level_id], k_size, k_type, sigma)

    u, v = scale_u_and_v(u, v, level_id, yos_img_03_g_pyr)

    interpolation = cv2.INTER_CUBIC  # You may try different values
    border_mode = cv2.BORDER_REFLECT101  # You may try different values
    yos_img_03_warped = ps4.warp(yos_img_03, u, v, interpolation, border_mode)

    diff_yos_img = yos_img_02 - yos_img_03_warped
    cv2.imwrite(os.path.join(output_dir, "ps4-3-a-2.png"),
                ps4.normalize_and_scale(diff_yos_img))
Beispiel #3
0
def part_3a_1():
    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_01.jpg'), 0) / 255.
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.

    levels = 2  # Define the number of pyramid levels
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01, levels)
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02, levels)

    level_id = 1
    k_size = 32
    k_type = "uniform"
    sigma = 0
    u, v = ps4.optic_flow_lk(yos_img_01_g_pyr[level_id],
                             yos_img_02_g_pyr[level_id], k_size, k_type, sigma)

    u, v = scale_u_and_v(u, v, level_id, yos_img_02_g_pyr)

    interpolation = cv2.INTER_CUBIC  # You may try different values
    border_mode = cv2.BORDER_REFLECT101  # You may try different values
    yos_img_02_warped = ps4.warp(yos_img_02, u, v, interpolation, border_mode)

    diff_yos_img = yos_img_01 - yos_img_02_warped
    cv2.imwrite(os.path.join(output_dir, "ps4-3-a-1.png"),
                ps4.normalize_and_scale(diff_yos_img))
def part_3a_1():
    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_01.jpg'), 0) / 255.
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.

    levels = 4  # Define the number of pyramid levels
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01, levels)
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02, levels)

    # k_size = "kSize"
    # window = "Params"
    # cv2.namedWindow(window)
    # cv2.createTrackbar(k_size, window, 1, 100, nothing)
    # while 1:
    #     k = cv2.waitKey(1) & 0xFF
    #     if k == 27:
    #         break
    #
    #     level_id = 0  # TODO: Select the level number (or id) you wish to use
    #     # k_size = 11  # TODO: Select a kernel size
    #     k_size = cv2.getTrackbarPos('kSize', 'Params')
    #     k_type = 'uniform'  # TODO: Select a kernel type
    #     sigma = 0  # TODO: Select a sigma value if you are using a gaussian kernel
    #     u, v = ps4.optic_flow_lk(yos_img_01_g_pyr[level_id],
    #                              yos_img_02_g_pyr[level_id],
    #                              k_size, k_type, sigma)
    #
    #     u, v = scale_u_and_v(u, v, level_id, yos_img_02_g_pyr)
    #
    #     interpolation = cv2.INTER_CUBIC  # You may try different values
    #     border_mode = cv2.BORDER_REFLECT101  # You may try different values
    #     yos_img_02_warped = ps4.warp(yos_img_02, u, v, interpolation, border_mode)
    #
    #     diff_yos_img_01_02 = yos_img_01 - yos_img_02_warped
    #
    #     cv2.imshow("Params", diff_yos_img_01_02)

    level_id = 1  # TODO: Select the level number (or id) you wish to use
    k_size = 23  # TODO: Select a kernel size
    k_type = 'uniform'  # TODO: Select a kernel type
    sigma = 0  # TODO: Select a sigma value if you are using a gaussian kernel
    u, v = ps4.optic_flow_lk(yos_img_01_g_pyr[level_id],
                             yos_img_02_g_pyr[level_id], k_size, k_type, sigma)

    u, v = scale_u_and_v(u, v, level_id, yos_img_02_g_pyr)

    interpolation = cv2.INTER_CUBIC  # You may try different values
    border_mode = cv2.BORDER_REFLECT101  # You may try different values
    yos_img_02_warped = ps4.warp(yos_img_02, u, v, interpolation, border_mode)

    diff_yos_img_01_02 = yos_img_01 - yos_img_02_warped
    cv2.imwrite(os.path.join(output_dir, "ps4-3-a-1.png"),
                ps4.normalize_and_scale(diff_yos_img_01_02))
Beispiel #5
0
def part_3():
    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_03.jpg'), 0) / 255.

    levels = 10  # Define the number of pyramid levels
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01, levels)
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02, levels)

    # Create a window
    cv2.namedWindow('image')
    diff_yos_img = np.zeros(yos_img_01.shape)

    # create trackbars for color change
    cv2.createTrackbar('level_id', 'image', 1, levels - 1, nothing)
    cv2.createTrackbar('k_size', 'image', 3, 70, nothing)
    cv2.createTrackbar('k_type', 'image', 0, 1, nothing)
    cv2.createTrackbar('sigma', 'image', 1, 50, nothing)

    while (1):
        cv2.imshow('image', diff_yos_img)
        k = cv2.waitKey(1) & 0xFF
        if k == 27:
            break

        # Optional: smooth the images if LK doesn't work well on raw images
        level_id = cv2.getTrackbarPos('level_id', 'image')
        k_size = cv2.getTrackbarPos('k_size', 'image')
        k_type = 'gaussian' if cv2.getTrackbarPos('k_type',
                                                  'image') == 1 else 'uniform'
        sigma = cv2.getTrackbarPos('sigma', 'image')
        u, v = ps4.optic_flow_lk(yos_img_01_g_pyr[level_id],
                                 yos_img_02_g_pyr[level_id], k_size, k_type,
                                 sigma)

        u, v = experiment.scale_u_and_v(u, v, level_id, yos_img_02_g_pyr)

        interpolation = cv2.INTER_CUBIC  # You may try different values
        border_mode = cv2.BORDER_REFLECT101  # You may try different values
        yos_img_02_warped = ps4.warp(yos_img_02, u, v, interpolation,
                                     border_mode)
        diff_yos_img = ps4.normalize_and_scale(yos_img_01 -
                                               yos_img_02_warped).astype(
                                                   np.uint8)

    cv2.destroyAllWindows()
    print level_id, k_size, k_type, sigma
    def test_gaussian_pyramid(self):
        input_imgs = [
            'test_gauss1_pyr.npy', 'test_gauss2_pyr.npy', 'test_gauss3_pyr.npy'
        ]
        ref_imgs = [
            'test_gauss1_pyr_ref.npy', 'test_gauss2_pyr_ref.npy',
            'test_gauss3_pyr_ref.npy'
        ]
        levels = [4, 2, 4]

        for i in range(3):
            f1 = input_imgs[i]
            f2 = ref_imgs[i]
            l = levels[i]

            test_array = np.load(INPUT_DIR + f1)

            g_pyr = ps4.gaussian_pyramid(test_array.copy(), levels=l)

            g_pyr_ref = np.load(INPUT_DIR + f2)

            for l in range(len(g_pyr)):
                correct = np.allclose(g_pyr[l], g_pyr_ref[l], atol=0.1)

                error_msg = "Value at level {} does not match the answer." \
                            "".format(l)

                self.assertTrue(correct, error_msg)
Beispiel #7
0
def part_2():

    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_01.jpg'), 0) / 255.

    # 2a
    levels = 4
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01, levels)
    yos_img_01_g_pyr_img = ps4.create_combined_img(yos_img_01_g_pyr)

    cv2.imshow('combined', yos_img_01_g_pyr_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    cv2.imwrite("output/ps4-2-a-1.png", yos_img_01_g_pyr_img)

    # 2b
    yos_img_01_l_pyr = ps4.laplacian_pyramid(yos_img_01_g_pyr)

    yos_img_01_l_pyr_img = ps4.create_combined_img(yos_img_01_l_pyr)

    cv2.imshow('combined', yos_img_01_l_pyr_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    cv2.imwrite("output/ps4-2-b-1.png", yos_img_01_l_pyr_img)
def part_3a_1():
    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_01.jpg'), 0) / 255.
    yos_img_02 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_02.jpg'), 0) / 255.

    k = 11
    sigma = 7
    yos_img_01g = cv2.GaussianBlur(yos_img_01,
                                   ksize=(k, k),
                                   sigmaX=sigma,
                                   sigmaY=sigma)
    yos_img_02g = cv2.GaussianBlur(yos_img_02,
                                   ksize=(k, k),
                                   sigmaX=sigma,
                                   sigmaY=sigma)

    levels = 5  # Define the number of pyramid levels
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01g, levels)
    yos_img_02_g_pyr = ps4.gaussian_pyramid(yos_img_02g, levels)

    level_id = 0  # TODO: Select the level number (or id) you wish to use
    k_size = 20  # TODO: Select a kernel size
    k_type = "uniform"  # TODO: Select a kernel type
    sigma = 10  # TODO: Select a sigma value if you are using a gaussian kernel
    u, v = ps4.optic_flow_lk(yos_img_01_g_pyr[level_id],
                             yos_img_02_g_pyr[level_id], k_size, k_type, sigma)

    u, v = scale_u_and_v(u, v, level_id, yos_img_02_g_pyr)

    interpolation = cv2.INTER_CUBIC  # You may try different values
    border_mode = cv2.BORDER_REFLECT101  # You may try different values
    yos_img_02_warped = ps4.warp(yos_img_02, u, v, interpolation, border_mode)

    diff_yos_img_01_02 = yos_img_01 - yos_img_02_warped
    cv2.imwrite(os.path.join(output_dir, "ps4-3-a-1.png"),
                ps4.normalize_and_scale(diff_yos_img_01_02))
def part_2():

    yos_img_01 = cv2.imread(
        os.path.join(input_dir, 'DataSeq1', 'yos_img_01.jpg'), 0) / 255.

    # 2a
    levels = 4
    yos_img_01_g_pyr = ps4.gaussian_pyramid(yos_img_01, levels)
    yos_img_01_g_pyr_img = ps4.create_combined_img(yos_img_01_g_pyr)
    cv2.imwrite(os.path.join(output_dir, "ps4-2-a-1.png"),
                yos_img_01_g_pyr_img)

    # 2b
    yos_img_01_l_pyr = ps4.laplacian_pyramid(yos_img_01_g_pyr)
    yos_img_01_l_pyr_img = ps4.create_combined_img(yos_img_01_l_pyr)
    cv2.imwrite(os.path.join(output_dir, "ps4-2-b-1.png"),
                yos_img_01_l_pyr_img)