diff --git a/scripts/run.py b/scripts/run.py index fce5b2a374335a4b2e247f53e255a517890e18d7..c7b9d0ce06db8d744e17964c75560a0d1a2361ce 100644 --- a/scripts/run.py +++ b/scripts/run.py @@ -68,6 +68,9 @@ def parse_args(): parser.add_argument("--sharpen", default=0, help="Set amount of sharpening applied to NeRF training images. Range 0.0 to 1.0.") + # parser.add_argument("--tomonerf", action="store_true", help="Apply tomography specific parameters to optimise NeRF output.") + parser.add_argument("--tomonerf", type=int, default=0, help="Which transforms to apply [single_channel, exponentiate img data, crop].") + parser.add_argument("--crop", nargs=3, type=float, help="Percentage to crop unit cube to.") return parser.parse_args() @@ -123,6 +126,50 @@ if __name__ == "__main__": elif args.network: testbed.reload_network_from_file(args.network) + if args.tomonerf: + print("***Entering NERF for Tomography mode***") + + if (format(args.tomonerf, 'b')[-1] == '1'): + print("TODO: Single channel mode") + # single channel + + if (format(args.tomonerf, 'b')[-2] == '1'): + print("TODO: Exponentiate data") + + if (format(args.tomonerf, 'b')[-3] == '1'): + print("TODO: Optimal cropping") + + # args.gui = True + args.width = args.height = 400 + print("Scaling image to be within unit cube...") + # "aabb_scale": 1, # nothing exists outside unit cube + # with open(args.rendering_params) as f: + # rendering_params = json.load(f) + # data_dir=os.path.dirname(args.test_transforms) + + # TODO: set scale, bounding box + # becomes 0.048, multiplied by 0.012 * + # from transforms.json training data, we have: + # "scale": 0.012, + # TODO: experiment with n_params, n_encoding_params + + # # Evaluate metrics on black background + # testbed.background_color = [0.0, 0.0, 0.0, 1.0] + # print(f"Cropbox is {testbed.crop_box()}") + crop_x, crop_y, crop_z = args.crop + + # box = np.array([[0.0, 0.0, -2.0, 0.0],[2.0, 0.,0.,0.],[0.,-2.0, 0.0, 0.0]], dtype=np.float32) + # testbed.set_crop_box(box) + crop_min = [(100-size)/200 for size in args.crop] + crop_max = [1-(100-size)/200 for size in args.crop] + testbed.render_aabb = ngp.BoundingBox(crop_min, crop_max) + print(f"Cropped to min {crop_min}, max {crop_max}") + + # print(f"Testbed options is {dir(testbed)}") + # print(f"Testbed.bounding_radius are {dir(testbed.bounding_radius)}") + else: + print("Tomonerf: Single channel mode") + ref_transforms = {} if args.screenshot_transforms: # try to load the given file straight away print("Screenshot transforms from ", args.screenshot_transforms) @@ -239,13 +286,16 @@ if __name__ == "__main__": testbed.render_ground_truth = False image = testbed.render(resolution[0], resolution[1], spp, True) - if i == 0: - write_image(f"ref.png", ref_image) - write_image(f"out.png", image) + if True: # i == 0: + + print(f"Testing against provided ref images") + print(f"Rendering GT as ref.png, out.png") + write_image(f"ref_{i}.png", ref_image) + write_image(f"out_{i}.png", image) diffimg = np.absolute(image - ref_image) diffimg[...,3:4] = 1.0 - write_image("diff.png", diffimg) + write_image("diff_{i}.png", diffimg) A = np.clip(linear_to_srgb(image[...,:3]), 0.0, 1.0) R = np.clip(linear_to_srgb(ref_image[...,:3]), 0.0, 1.0)