from photometric_stereo import photometric_stereo as ps ground_truth_normals, ground_truth_albedo = ps(warped_ground_truth_image, lights) # <codecell> from pybug.image import MaskedNDImage from scipy.ndimage.filters import gaussian_filter, median_filter from geometric_sfs import geometric_sfs as sfs, worthington_hancock_sfs from mapping import AEP, PGA, Spherical, ImageMapper, IdentityMapper # mapping_object = ImageMapper(PGA(intrinsic_mean_normals.as_vector(keep_channels=True))) mapping_object = ImageMapper(Spherical()) warped_intensity_image = MaskedNDImage(warped_intensity_image.pixels.copy(), mask=warped_intensity_image.mask) mean_normals_image = warped_intensity_image.from_vector(mean_normals, n_channels=3) # Normalise the image so that it has unit albedo? warped_intensity_image.masked_pixels /= ground_truth_albedo.masked_pixels # warped_intensity_image.masked_pixels /= np.max(warped_intensity_image.masked_pixels) worthington = worthington_hancock_sfs(warped_intensity_image, mean_normals_image, estimate_light, n_iters=40) # <codecell> # from geometric_sfs import horn_brooks # reconstructed_normals_horn = horn_brooks(warped_intensity_image, mean_normals, normal_model, estimate_light, n_iters=100, c_lambda=10, mapping_object=mapping_object) # <codecell> from pybug.visualize.viewmayavi import MayaviVectorViewer3d from pybug.image import DepthImage, RGBImage
mean_normals = model['mean_normals'] reference_frame = model['template'] try: intrinsic_mean_normals = model['intrinsic_mean_normals'] except Exception: intrinsic_mean_normals = None # Estimate light direction for image I = intensity_image.as_vector() estimate_light = np.dot(pinv2(mean_normals), I) print estimate_light # Perform SFS warped_intensity_image = MaskedNDImage(intensity_image.pixels.copy(), mask=intensity_image.mask) initial_estimate_image = warped_intensity_image.from_vector( mean_normals.copy(), n_channels=3) mapping_object = build_mapping_object(feature_space, initial_estimate_image, intrinsic_mean_normals) # Normalise the image so that it has unit albedo? #warped_intensity_image.masked_pixels /= ground_truth_albedo.masked_pixels #warped_intensity_image.masked_pixels /= np.max(warped_intensity_image.masked_pixels) reconstructed_normals = sfs(warped_intensity_image, initial_estimate_image, normal_model, estimate_light, n_iters=200, mapping_object=mapping_object) normals[subject_id][feature_space] = reconstructed_normals #reconstructed_depth = frankotchellappa(
with open(model_path, 'rb') as f: model = cPickle.load(f) normal_model = model['appearance_model'] reference_frame = model['template'] mean_normals = model['mean_normals'] reference_frame = model['template'] try: intrinsic_mean_normals = model['intrinsic_mean_normals'] except Exception: intrinsic_mean_normals = None # Perform SFS warped_intensity_image = MaskedNDImage(intensity_image.pixels.copy(), mask=intensity_image.mask) initial_estimate_image = warped_intensity_image.from_vector( mean_normals.copy(), n_channels=3) mapping_object = build_mapping_object(feature_space, initial_estimate_image, intrinsic_mean_normals) # Normalise the image so that it has unit albedo #warped_intensity_image.masked_pixels /= ground_truth_albedo.masked_pixels #warped_intensity_image.masked_pixels = \ # ((warped_intensity_image.masked_pixels - np.nanmin(warped_intensity_image.masked_pixels)) / # (np.nanmax(warped_intensity_image.masked_pixels) - np.nanmin(warped_intensity_image.masked_pixels))) reconstructed_normals = sfs(warped_intensity_image, initial_estimate_image, normal_model, sfs_light, n_iters=50, mapping_object=mapping_object) normals[subject_id][feature_space] = reconstructed_normals
ground_truth_normals, ground_truth_albedo = ps(warped_ground_truth_image, lights) # <codecell> from pybug.image import MaskedNDImage from scipy.ndimage.filters import gaussian_filter, median_filter from geometric_sfs import geometric_sfs as sfs, worthington_hancock_sfs from mapping import AEP, PGA, Spherical, ImageMapper, IdentityMapper # mapping_object = ImageMapper(PGA(intrinsic_mean_normals.as_vector(keep_channels=True))) mapping_object = ImageMapper(Spherical()) warped_intensity_image = MaskedNDImage(warped_intensity_image.pixels.copy(), mask=warped_intensity_image.mask) mean_normals_image = warped_intensity_image.from_vector(mean_normals, n_channels=3) # Normalise the image so that it has unit albedo? warped_intensity_image.masked_pixels /= ground_truth_albedo.masked_pixels # warped_intensity_image.masked_pixels /= np.max(warped_intensity_image.masked_pixels) worthington = worthington_hancock_sfs(warped_intensity_image, mean_normals_image, estimate_light, n_iters=40) # <codecell> # from geometric_sfs import horn_brooks # reconstructed_normals_horn = horn_brooks(warped_intensity_image, mean_normals, normal_model, estimate_light, n_iters=100, c_lambda=10, mapping_object=mapping_object) # <codecell>