def zero_ncc_test(): ncc_size = 5 image1 = np.zeros( (2 * ncc_size - 1, 2 * ncc_size - 1, 3), dtype=np.float32) image2 = image1 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert (np.abs(ncc) < 1e-6).all()
def offset_ncc_test(): ncc_size = 5 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = image1 + 2 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert ncc.shape == (2 * ncc_size - 1, 2 * ncc_size - 1) assert (np.abs(ncc[ncc_size, ncc_size] - 1) < 1e-6).all()
def offset_ncc_test(): ncc_size = 5 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = image1 + 2 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert ncc.shape == (2 * ncc_size - 1, 2 * ncc_size - 1) assertNear(ncc[ncc_size, ncc_size], 1, 1e-6)
def zero_ncc_test(): ncc_size = 5 image1 = np.zeros( (2 * ncc_size - 1, 2 * ncc_size - 1, 3), dtype=np.float32) image2 = image1 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assertNear(ncc, 0, 1e-6)
def ncc_full_identity_test(): ncc_size = 5 ncc_half = ncc_size / 2 normalized = np.load('test_materials/fabrics_normalized.npy') ncc = compute_ncc(normalized, normalized) assert ncc.shape == normalized.shape[:2] assertNear(ncc[:ncc_half, :], 0, 1e-5) assertNear(ncc[-ncc_half:, :], 0, 1e-5) assertNear(ncc[:, :ncc_half], 0, 1e-5) assertNear(ncc[:, -ncc_half:], 0, 1e-5) assertNear(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half], 1, 1e-5)
def ncc_full_identity_test(): ncc_size = 5 ncc_half = int(ncc_size / 2) normalized = np.load('test_materials/fabrics_normalized.npy') ncc = compute_ncc(normalized, normalized) assert ncc.shape == normalized.shape[:2] assert (np.abs(ncc[:ncc_half, :]) < 1e-5).all() assert (np.abs(ncc[-ncc_half:, :]) < 1e-5).all() assert (np.abs(ncc[:, :ncc_half]) < 1e-5).all() assert (np.abs(ncc[:, -ncc_half:]) < 1e-5).all() assert ( np.abs(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half] - 1) < 1e-5).all()
def ncc_full_shapes_test(): ncc_size = 5 image1 = imread('test_materials/ncc1.png') image2 = imread('test_materials/ncc2.png') n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) result = compute_ncc(n1, n2) correct = np.load('test_materials/ncc.npy') assert result.shape == n1.shape[:2] assert result.shape == n2.shape[:2] assert (np.abs(result - correct) < 1e-5).all()
def correlated_ncc_test(): ncc_size = 5 ncc_half = ncc_size / 2 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = image1 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assertNear(ncc[:ncc_half, :], 0, 1e-5) assertNear(ncc[-ncc_half:, :], 0, 1e-5) assertNear(ncc[:, :ncc_half], 0, 1e-5) assertNear(ncc[:, -ncc_half:], 0, 1e-5) assertNear(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half], 1, 1e-5)
def offset_and_scale_ncc_test(): ncc_size = 5 ncc_half = ncc_size / 2 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = image1 * 2 + 3 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert ncc.shape == (2 * ncc_size - 1, 2 * ncc_size - 1) assertNear(ncc[:ncc_half, :], 0, 1e-6) assertNear(ncc[-ncc_half:, :], 0, 1e-6) assertNear(ncc[:, :ncc_half], 0, 1e-6) assertNear(ncc[:, -ncc_half:], 0, 1e-6) assertNear(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half], 1, 1e-6)
def anticorrelated_ncc_test(): ncc_size = 5 ncc_half = ncc_size / 2 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = -image1 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert (np.abs(ncc[:ncc_half, :]) < 1e-5).all() assert (np.abs(ncc[-ncc_half:, :]) < 1e-5).all() assert (np.abs(ncc[:, :ncc_half]) < 1e-5).all() assert (np.abs(ncc[:, -ncc_half:]) < 1e-5).all() assert ( np.abs(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half] - -1) < 1e-5).all()
def ncc_full_offset_test(): ncc_size = 5 image = imread('test_materials/justinpic_c.png') split = image.shape[1] / 2 left = image[:, :split, :] right = image[:, split:, :] n1 = preprocess_ncc(left, ncc_size) n2 = preprocess_ncc(right, ncc_size) result = compute_ncc(n1, n2) correct = np.load('test_materials/justin_ncc.npy') assert result.shape == n1.shape[:2] assert result.shape == n2.shape[:2] assert (np.abs(result - correct) < 1e-5).all()
def scale_ncc_test(): ncc_size = 5 ncc_half = ncc_size / 2 image1 = np.random.random((2 * ncc_size - 1, 2 * ncc_size - 1, 3)) image2 = image1 * 2 n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) ncc = compute_ncc(n1, n2) assert ncc.shape == (2 * ncc_size - 1, 2 * ncc_size - 1) assert (np.abs(ncc[:ncc_half, :]) < 1e-5).all() assert (np.abs(ncc[-ncc_half:, :]) < 1e-5).all() assert (np.abs(ncc[:, :ncc_half]) < 1e-5).all() assert (np.abs(ncc[:, -ncc_half:]) < 1e-5).all() assert ( np.abs(ncc[ncc_half:-ncc_half, ncc_half:-ncc_half] - 1) < 1e-5).all()
def ncc_full_shapes_test(): ncc_size = 5 image1 = imread('test_materials/ncc1.png') image2 = imread('test_materials/ncc2.png') image1 = image1.astype(np.float32) image2 = image2.astype(np.float32) n1 = preprocess_ncc(image1, ncc_size) n2 = preprocess_ncc(image2, ncc_size) result = compute_ncc(n1, n2) correct = np.load('test_materials/ncc.npy') assert result.shape == n1.shape[:2] assert result.shape == n2.shape[:2] assertNear(result, correct, 1e-5)
def ncc_full_offset_test(): ncc_size = 5 image = imread('test_materials/justinpic_c.png') image = image.astype(np.float32) split = image.shape[1] / 2 left = image[:, :split, :] right = image[:, split:, :] n1 = preprocess_ncc(left, ncc_size) n2 = preprocess_ncc(right, ncc_size) result = compute_ncc(n1, n2) correct = np.load('test_materials/justin_ncc.npy') assert result.shape == n1.shape[:2] assert result.shape == n2.shape[:2] assertNear(result, correct, 1e-5)
points_left = np.float32(points_left.reshape(-1, 2)) points_right = np.float32(points_right.reshape(-1, 2)) H, mask = cv2.findHomography(points_left, points_right) assert (mask == 1).all() projected_left = cv2.warpPerspective(left, H, (width, height)) """ Normalize this projected left image. """ left_normalized = preprocess_ncc(projected_left, ncc_size) """ Compute the NCC score between the right and left images. """ ncc = compute_ncc(right_normalized, left_normalized) volume.append(ncc) projected_gif_writer.append(np.uint8(projected_left)) ncc_gif_writer.append(np.uint8(255 * np.clip(ncc / 2 + 0.5, 0, 1))) sys.stdout.write('Progress: {0}\r'.format(int(100 * pos / len(depths)))) sys.stdout.flush() print '' toc = time.time() print 'Plane sweep took {0} seconds'.format(toc - tic) ncc_gif_writer.close()
points_right = np.float32(points_right.reshape(-1, 2)) H, mask = cv2.findHomography(points_left, points_right) assert (mask == 1).all() projected_left = cv2.warpPerspective(left, H, (width, height)) """ Normalize this projected left image. """ left_normalized = preprocess_ncc(projected_left, ncc_size) """ Compute the NCC score between the right and left images. """ ncc = compute_ncc(right_normalized, left_normalized) volume.append(ncc) projected_gif_writer.append(np.uint8(projected_left)) ncc_gif_writer.append(np.uint8(255 * np.clip(ncc / 2 + 0.5, 0, 1))) sys.stdout.write('Progress: {0}\r'.format(int(100 * pos / len(depths)))) sys.stdout.flush() print '' toc = time.time() print 'Plane sweep took {0} seconds'.format(toc - tic) ncc_gif_writer.close()