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))
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))
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))
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)
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)