Add visualization for rendering and data

This commit is contained in:
MrKarimiD committed 2025-05-29 14:27:04 -04:00
1 parent b5987a1989
commit 80122b627c
5 files changed
+161 -22

No files matched your search

+36 -2
View File
@@ -85,8 +85,7 @@ if __name__ == '__main__':
old_path = os.path.join(renders_lin, old_path)
shutil.move(old_path, new_path)
print(f"Renamed {os.path.basename(old_path)} to {new_filename}")
print("Step 4b: Verifying filename consistency between GT and renders...")
try:
gt_files = set(f for f in os.listdir(gt_exr) if f.endswith('.exr'))
@@ -158,3 +157,38 @@ if __name__ == '__main__':
"--hdr_dir", gt_exr,
"--output_dir", gt_hdr
], check=True)
# 9. Convert EXR panos to LDR format:
print("Converting EXR panos to LDR visualization...")
subprocess.run([
"python", "lantern_scripts/tonemap.py",
"--data_dir", renders_lin,
"--out_dir", renders_lin
], check=True)
subprocess.run([
"python", "lantern_scripts/tonemap.py",
"--data_dir", gt_exr,
"--out_dir", gt_exr
], check=True)
subprocess.run([
"python", "lantern_scripts/tonemap.py",
"--data_dir", lin_renders,
"--out_dir", lin_renders
], check=True)
subprocess.run([
"python", "lantern_scripts/tonemap.py",
"--data_dir", gt_exr_renders,
"--out_dir", gt_exr_renders
], check=True)
# 9. Convert EXR panos to LDR format:
print("Preparing the HTML visualization...")
subprocess.run([
"python", "lantern_scripts/results_visualization.py",
"--gt_dir", gt_exr,
"--gt_render_dir", gt_exr_renders,
"--pandora_dir", renders_lin,
"--pandora_render_dir", lin_renders,
"--out_dir", args.input_dir,
"--name", args.metric_name
], check=True)
+21
View File
@@ -0,0 +1,21 @@
from os import makedirs
from html4vision import Col, imagetable
import argparse
import json
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--input_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr')
args = parser.parse_args()
cols = [
Col('id1', 'ID'), # 1-based indexing
Col('img', 'Left Pano', args.input_dir + 'left_e1/output_*.png'),
Col('img', 'Left Mask', args.input_dir + 'masks/left_e1/output_*.png.masked.png'),
Col('img', 'Right Pano', args.input_dir + 'right_e2/output_*.png'),
Col('img', 'Right Mask', args.input_dir + 'masks/right_e2/output_*.png.masked.png'),
]
# imagetable(cols, 'another-dir/pathrep.html', 'Path Replace Example', pathrep=('/mnt/data', '/home-local2/mokad6.extra.nobkp'))
imagetable(cols, args.input_dir + 'data_index.html', 'NeRF sequence', pathrep=(args.input_dir, './'), imscale=0.1, zebra=True, sticky_header=True, overlay_toggle=True)
+21 -17
View File
@@ -92,11 +92,13 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
si_mse = {}
angular = {}
psnr_error = {}
metrics = {}
for key in dataset_names:
mse[key] = []
si_mse[key] = []
angular[key] = []
psnr_error[key] = []
metrics[key] = {}
gt_dataset_files = sorted([os.path.join(gt_dataset_root, f) for f in os.listdir(gt_dataset_root) if f.endswith('.exr')])
@@ -121,6 +123,15 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
scale_invariant_mse_result = si_wrmse(gt_dataset_img_exr, result_dataset_img_exr, mask)
angular_result = angular_error(gt_dataset_img_exr, result_dataset_img_exr, mask)
psnr_result = psnr(gt_dataset_img_exr_for_PSNR, result_dataset_img_exr_for_PSNR)
key = gt_dataset_file.split('/')[-1]
metrics[dataset_name][key] = {
'mse': str(mse_result),
'si_rmse': str(scale_invariant_mse_result),
'angular': str(angular_result),
'psnr': str(psnr_result)
}
mse[dataset_name].append(mse_result)
si_mse[dataset_name].append(scale_invariant_mse_result)
angular[dataset_name].append(angular_result)
@@ -128,28 +139,22 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
si_mse[dataset_name].append(scale_invariant_mse_result)
mse[dataset_name] = remove_nan_and_sort(mse[dataset_name])
mse_ours = np.mean(mse[dataset_name])
si_mse_ours = np.mean(si_mse[dataset_name])
angular_ours = np.mean(angular[dataset_name])
psnr_ours = np.mean(psnr_error[dataset_name])
metrics[dataset_name]['mean'] = {
'mse': str(mse_ours),
'si_rmse': str(si_mse_ours),
'angular': str(angular_ours),
'psnr': str(psnr_ours)
}
# print(dataset_name + ', si_RMSE: {}'.format(si_mse_ours))
# print(dataset_name + ', RMSE: {}'.format(mse_ours))
# print(dataset_name + ', angular: {}'.format(angular_ours))
# print(dataset_name + ', PSNR: {}'.format(psnr_ours))
output_dict = {}
output_dict['model_name'] = dataset_name
output_dict['si_RMSE'] = str(si_mse_ours)
output_dict['RMSE'] = str(mse_ours)
output_dict['angular'] = str(angular_ours)
output_dict['PSNR'] = str(psnr_ours)
output_addr = output_folder + 'render_results.json'
output_addr = output_folder + dataset_name + '_results.json'
with open(output_addr, 'w') as f:
json.dump(output_dict, f, indent=4)
json.dump(metrics, f, indent=4)
if __name__ == '__main__':
argparser = argparse.ArgumentParser()
@@ -157,7 +162,6 @@ if __name__ == '__main__':
argparser.add_argument("--gt_dataset_root", type=str, default="/mnt/data/coffee_room2/GT/GT_exr_renders/")
argparser.add_argument("--output_folder", type=str, default="/mnt/data/coffee_room2/metrics/results_table/")
argparser.add_argument("--dataset_names", type=str, default="/mnt/data/coffee_room2/metrics/results_table/")
args = argparser.parse_args()
calculate_metrics(args.results_dataset_roots, args.gt_dataset_root, args.output_folder, args.dataset_names)
+77
View File
@@ -0,0 +1,77 @@
import os
from os import makedirs
from html4vision import Col, imagetable
import argparse
import json
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--gt_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr')
parser.add_argument('--gt_render_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr_renders')
parser.add_argument('--pandora_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/metrics/images/pandora_cam_opt_on_lin')
parser.add_argument('--pandora_render_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/metrics/images/pandora_cam_opt_on_lin_renders')
parser.add_argument('--out_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H')
parser.add_argument("--name", type=str, required=True, default="unaligned", help="Name of the method, used for naming output directories")
args = parser.parse_args()
results_json = os.path.join(args.out_dir, 'metrics/results_table')
results_json = os.path.join(results_json, args.name + '_results.json')
with open(results_json, 'r') as file:
metrics = json.load(file)
img_keys = metrics[args.name].keys() - ['mean']
gt = []
gt_render = []
out = []
out_render = []
mse = []
si_rmse = []
psnr = []
angular = []
for key in img_keys:
img_name = key.replace('exr', 'png')
mse.append(metrics[args.name][key]['mse'])
si_rmse.append(metrics[args.name][key]['si_rmse'])
psnr.append(metrics[args.name][key]['psnr'])
angular.append(metrics[args.name][key]['angular'])
gt.append( os.path.join(args.gt_dir, img_name) )
gt_render.append( os.path.join(args.gt_render_dir, img_name) )
out.append( os.path.join(args.pandora_dir, img_name) )
out_render.append( os.path.join(args.pandora_render_dir, img_name) )
cols = [
Col('text', 'Name', list(img_keys)), # Col('id1', 'ID'), # 1-based indexing
Col('img', 'GT Pano', gt),
Col('img', 'GT Render', gt_render),
Col('img', 'Pandora Output', out),
Col('img', 'Pandora Render', out_render),
Col('text', 'MSE', mse),
Col('text', 'si-RMSE', si_rmse),
Col('text', 'PSNR', psnr),
Col('text', 'Angular', angular),
]
# imagetable(cols, os.path.join(args.out_dir, 'results_' + args.name + '_index.html'), 'Pandora outputs', pathrep=(args.out_dir, './'),
# imscale=0.1,
# sort_style='materialize',
# sortable=True,
# zebra=True,
# sticky_header=True,
# overlay_toggle=True
# )
imagetable(cols, os.path.join(args.out_dir, 'results_' + args.name + '_index.html'), 'Pandora outputs', pathrep=(args.out_dir, './'),
sort_style='materialize',
imsize=(300, 300),
hori_center_img=True,
sortable=True,
zebra=True,
sticky_header=True,
overlay_toggle=True
)
+6 -3
View File
@@ -15,7 +15,8 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str, default='/Volumes/Momo/Adobe_2023/Evaluation/test_sets/weber_test_set_original_hdr_panos/')
parser.add_argument('--out_dir', type=str, default='/Users/momo/Desktop/camera_ready/FID_test_set_256x512/')
parser.add_argument("--resolution", type=int, default=256)
parser.add_argument('--do_resize', '-v', action='store_true', help='Enable verbose output')
parser.add_argument("--resolution", type=int, default=1024)
args = parser.parse_args()
test_images = []
@@ -37,6 +38,8 @@ if __name__ == "__main__":
pano_file = os.path.basename(pano_addr)
pano_file = pano_file.replace('.exr', '.png')
gt_ldr_addr = os.path.join(args.out_dir, pano_file)
# Image.fromarray(gt_ldr).resize((2 * args.resolution, args.resolution), resample=Image.LANCZOS).save(gt_ldr_addr)
Image.fromarray(gt_ldr).save(gt_ldr_addr)
if args.do_resize:
Image.fromarray(gt_ldr).resize((2 * args.resolution, args.resolution), resample=Image.LANCZOS).save(gt_ldr_addr)
else:
Image.fromarray(gt_ldr).save(gt_ldr_addr)
print("Done!")