diff --git a/dev_resources/docs/IQM_Vis.UI.rst b/dev_resources/docs/IQM_Vis.UI.rst index 463cd1d..3132af9 100644 --- a/dev_resources/docs/IQM_Vis.UI.rst +++ b/dev_resources/docs/IQM_Vis.UI.rst @@ -12,10 +12,18 @@ IQM\_Vis.UI.custom\_widgets module :undoc-members: :show-inheritance: -IQM\_Vis.UI.experiment\_mode module ------------------------------------ +IQM\_Vis.UI.experiment\_mode\_2AFC module +----------------------------------------- -.. automodule:: IQM_Vis.UI.experiment_mode +.. automodule:: IQM_Vis.UI.experiment_mode_2AFC + :members: + :undoc-members: + :show-inheritance: + +IQM\_Vis.UI.experiment\_mode\_JND module +---------------------------------------- + +.. automodule:: IQM_Vis.UI.experiment_mode_JND :members: :undoc-members: :show-inheritance: diff --git a/dev_resources/docs/IQM_Vis.examples.KODAK_dataset.rst b/dev_resources/docs/IQM_Vis.examples.KODAK_dataset.rst new file mode 100644 index 0000000..16b8484 --- /dev/null +++ b/dev_resources/docs/IQM_Vis.examples.KODAK_dataset.rst @@ -0,0 +1,10 @@ +IQM\_Vis.examples.KODAK\_dataset package +======================================== + +Module contents +--------------- + +.. automodule:: IQM_Vis.examples.KODAK_dataset + :members: + :undoc-members: + :show-inheritance: diff --git a/dev_resources/docs/IQM_Vis.examples.rst b/dev_resources/docs/IQM_Vis.examples.rst index d7e5ea7..f5d3290 100644 --- a/dev_resources/docs/IQM_Vis.examples.rst +++ b/dev_resources/docs/IQM_Vis.examples.rst @@ -7,6 +7,7 @@ Subpackages .. toctree:: :maxdepth: 4 + IQM_Vis.examples.KODAK_dataset IQM_Vis.examples.images Submodules @@ -36,14 +37,6 @@ IQM\_Vis.examples.dists module :undoc-members: :show-inheritance: -IQM\_Vis.examples.experiment module ------------------------------------ - -.. automodule:: IQM_Vis.examples.experiment - :members: - :undoc-members: - :show-inheritance: - IQM\_Vis.examples.kodak module ------------------------------ @@ -52,30 +45,6 @@ IQM\_Vis.examples.kodak module :undoc-members: :show-inheritance: -IQM\_Vis.examples.multiple module ---------------------------------- - -.. automodule:: IQM_Vis.examples.multiple - :members: - :undoc-members: - :show-inheritance: - -IQM\_Vis.examples.new\_api module ---------------------------------- - -.. automodule:: IQM_Vis.examples.new_api - :members: - :undoc-members: - :show-inheritance: - -IQM\_Vis.examples.simple module -------------------------------- - -.. automodule:: IQM_Vis.examples.simple - :members: - :undoc-members: - :show-inheritance: - Module contents --------------- diff --git a/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.rst b/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.rst new file mode 100644 index 0000000..734d612 --- /dev/null +++ b/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.rst @@ -0,0 +1,36 @@ +IQM\_Vis.UI.experiment\_mode\_2AFC +================================== + +.. automodule:: IQM_Vis.UI.experiment_mode_2AFC + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + sort_list + + + + + + .. rubric:: Classes + + .. autosummary:: + + make_experiment_2AFC + reset_image_widget_to_black + + + + + + + + + diff --git a/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_JND.rst b/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_JND.rst new file mode 100644 index 0000000..e79da52 --- /dev/null +++ b/dev_resources/docs/_autosummary/IQM_Vis.UI.experiment_mode_JND.rst @@ -0,0 +1,30 @@ +IQM\_Vis.UI.experiment\_mode\_JND +================================= + +.. automodule:: IQM_Vis.UI.experiment_mode_JND + + + + + + + + + + + + .. rubric:: Classes + + .. autosummary:: + + make_experiment_JND + reset_image_widget_to_black + + + + + + + + + diff --git a/dev_resources/docs/_autosummary/IQM_Vis.UI.images.rst b/dev_resources/docs/_autosummary/IQM_Vis.UI.images.rst index 60dbeb4..5aeb1f2 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.UI.images.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.UI.images.rst @@ -23,6 +23,7 @@ IQM\_Vis.UI.images ~images.change_to_specific_trans ~images.completed_range_results ~images.display_images + ~images.display_metric_JND_plot ~images.display_metric_correlation_plot ~images.display_metric_images ~images.display_metric_range_plot @@ -30,9 +31,11 @@ IQM\_Vis.UI.images ~images.display_metrics_graph ~images.display_metrics_text ~images.display_radar_plots + ~images.get_export_dir ~images.get_metrics_over_all_trans_with_init_values ~images.init_worker_thread ~images.load_experiment_from_dir + ~images.load_experiment_from_dir_JND ~images.load_human_experiment ~images.load_new_images_folder ~images.load_new_single_image diff --git a/dev_resources/docs/_autosummary/IQM_Vis.UI.rst b/dev_resources/docs/_autosummary/IQM_Vis.UI.rst index c9282f8..2b9acb7 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.UI.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.UI.rst @@ -1,4 +1,4 @@ -IQM\_Vis.UI +IQM\_Vis.UI =========== .. automodule:: IQM_Vis.UI @@ -28,7 +28,8 @@ IQM\_Vis.UI :recursive: IQM_Vis.UI.custom_widgets - IQM_Vis.UI.experiment_mode + IQM_Vis.UI.experiment_mode_2AFC + IQM_Vis.UI.experiment_mode_JND IQM_Vis.UI.images IQM_Vis.UI.layout IQM_Vis.UI.main diff --git a/dev_resources/docs/_autosummary/IQM_Vis.UI.widgets.rst b/dev_resources/docs/_autosummary/IQM_Vis.UI.widgets.rst index 577df46..e14ca15 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.UI.widgets.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.UI.widgets.rst @@ -13,12 +13,16 @@ IQM\_Vis.UI.widgets .. autosummary:: + ~widgets.JND_dataset_range_lower + ~widgets.JND_dataset_range_upper ~widgets.__init__ + ~widgets.change_dataset_name ~widgets.change_display_im_display_brightness ~widgets.change_display_im_rgb_brightness ~widgets.change_display_im_size ~widgets.change_graph_size - ~widgets.change_human_scores_after_exp + ~widgets.change_human_scores_after_exp_2AFC + ~widgets.change_human_scores_after_exp_JND ~widgets.change_num_steps ~widgets.change_plot_lims ~widgets.change_post_processing @@ -33,7 +37,8 @@ IQM\_Vis.UI.widgets ~widgets.export_trans_images ~widgets.generic_value_change ~widgets.init_widgets - ~widgets.launch_experiment + ~widgets.launch_experiment_2AFC + ~widgets.launch_experiment_JND ~widgets.make_slider_range ~widgets.open_mlp_new ~widgets.reset_slider_group diff --git a/dev_resources/docs/_autosummary/IQM_Vis.examples.KODAK_dataset.rst b/dev_resources/docs/_autosummary/IQM_Vis.examples.KODAK_dataset.rst new file mode 100644 index 0000000..8c62eee --- /dev/null +++ b/dev_resources/docs/_autosummary/IQM_Vis.examples.KODAK_dataset.rst @@ -0,0 +1,23 @@ +IQM\_Vis.examples.KODAK\_dataset +================================ + +.. automodule:: IQM_Vis.examples.KODAK_dataset + + + + + + + + + + + + + + + + + + + diff --git a/dev_resources/docs/_autosummary/IQM_Vis.examples.rst b/dev_resources/docs/_autosummary/IQM_Vis.examples.rst index 671010d..57ab827 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.examples.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.examples.rst @@ -1,4 +1,4 @@ -IQM\_Vis.examples +IQM\_Vis.examples ================= .. automodule:: IQM_Vis.examples @@ -27,13 +27,10 @@ IQM\_Vis.examples :toctree: :recursive: + IQM_Vis.examples.KODAK_dataset IQM_Vis.examples.all IQM_Vis.examples.dataset IQM_Vis.examples.dists - IQM_Vis.examples.experiment IQM_Vis.examples.images IQM_Vis.examples.kodak - IQM_Vis.examples.multiple - IQM_Vis.examples.new_api - IQM_Vis.examples.simple diff --git a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst index 7ba7f5e..2b20790 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst @@ -1,4 +1,4 @@ -IQM\_Vis.metrics.NLPD\_torch.layers +IQM\_Vis.metrics.NLPD\_torch.layers =================================== .. automodule:: IQM_Vis.metrics.NLPD_torch.layers @@ -21,11 +21,3 @@ IQM\_Vis.metrics.NLPD\_torch.layers -.. rubric:: Modules - -.. autosummary:: - :toctree: - :recursive: - - IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation - diff --git a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst index 26a8c71..26f0988 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst @@ -1,4 +1,4 @@ -IQM\_Vis.metrics.NLPD\_torch.pyramids +IQM\_Vis.metrics.NLPD\_torch.pyramids ===================================== .. automodule:: IQM_Vis.metrics.NLPD_torch.pyramids @@ -18,9 +18,6 @@ IQM\_Vis.metrics.NLPD\_torch.pyramids .. autosummary:: LaplacianPyramid - LaplacianPyramidGDN - SteerablePyramid - SteerableWavelet diff --git a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst index a61e1e9..8afe66a 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst @@ -1,4 +1,4 @@ -IQM\_Vis.metrics.NLPD\_torch.utils +IQM\_Vis.metrics.NLPD\_torch.utils ================================== .. automodule:: IQM_Vis.metrics.NLPD_torch.utils @@ -28,7 +28,4 @@ IQM\_Vis.metrics.NLPD\_torch.utils :recursive: IQM_Vis.metrics.NLPD_torch.utils.conv - IQM_Vis.metrics.NLPD_torch.utils.fourier - IQM_Vis.metrics.NLPD_torch.utils.interp1d - IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters diff --git a/dev_resources/docs/_autosummary/IQM_Vis.utils.save_utils.rst b/dev_resources/docs/_autosummary/IQM_Vis.utils.save_utils.rst index b6919a6..81dea92 100644 --- a/dev_resources/docs/_autosummary/IQM_Vis.utils.save_utils.rst +++ b/dev_resources/docs/_autosummary/IQM_Vis.utils.save_utils.rst @@ -1,4 +1,4 @@ -IQM\_Vis.utils.save\_utils +IQM\_Vis.utils.save\_utils ========================== .. automodule:: IQM_Vis.utils.save_utils @@ -20,6 +20,10 @@ IQM\_Vis.utils.save\_utils .. autosummary:: get_IQM_file + get_JND_image_names + get_JND_ref_image_dir + get_JND_ref_image_unprocessed_dir + get_JND_user_ID get_human_scores_file get_human_times_file get_image_name_from_human_scores @@ -31,9 +35,11 @@ IQM\_Vis.utils.save\_utils load_json_dict load_obj make_name_for_trans + save_2AFC_experiment_results + save_JND_experiment_results save_and_merge_df_as_csv + save_and_merge_rm_duplicates_df_as_csv save_df_as_csv - save_experiment_results save_json_dict save_obj diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.UI.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.UI.doctree index 074dcb2..fa85197 100644 Binary files a/dev_resources/docs/_build/doctrees/IQM_Vis.UI.doctree and b/dev_resources/docs/_build/doctrees/IQM_Vis.UI.doctree differ diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.doctree index c2b2bf4..81e453b 100644 Binary files a/dev_resources/docs/_build/doctrees/IQM_Vis.doctree and b/dev_resources/docs/_build/doctrees/IQM_Vis.doctree differ diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.examples.KODAK_dataset.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.examples.KODAK_dataset.doctree new file mode 100644 index 0000000..3096bda Binary files /dev/null and b/dev_resources/docs/_build/doctrees/IQM_Vis.examples.KODAK_dataset.doctree differ diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.examples.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.examples.doctree index 1137fa3..92a97a9 100644 Binary files a/dev_resources/docs/_build/doctrees/IQM_Vis.examples.doctree and b/dev_resources/docs/_build/doctrees/IQM_Vis.examples.doctree differ diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.metrics.SSIM.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.metrics.SSIM.doctree index d771272..4ca674f 100644 Binary files a/dev_resources/docs/_build/doctrees/IQM_Vis.metrics.SSIM.doctree and b/dev_resources/docs/_build/doctrees/IQM_Vis.metrics.SSIM.doctree differ diff --git a/dev_resources/docs/_build/doctrees/IQM_Vis.utils.doctree b/dev_resources/docs/_build/doctrees/IQM_Vis.utils.doctree index 067f8cf..f35239a 100644 Binary files a/dev_resources/docs/_build/doctrees/IQM_Vis.utils.doctree and b/dev_resources/docs/_build/doctrees/IQM_Vis.utils.doctree differ diff --git a/dev_resources/docs/_build/doctrees/Tutorials.doctree b/dev_resources/docs/_build/doctrees/Tutorials.doctree index ee823ea..a1f10b9 100644 Binary files a/dev_resources/docs/_build/doctrees/Tutorials.doctree and b/dev_resources/docs/_build/doctrees/Tutorials.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.doctree index 54bd521..0c3a027 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode.doctree index 2ad33d0..ac3da53 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.doctree new file mode 100644 index 0000000..7516fbc Binary files /dev/null and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_JND.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_JND.doctree new file mode 100644 index 0000000..74cbcc4 Binary files /dev/null and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.experiment_mode_JND.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.images.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.images.doctree index e902917..8f29657 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.images.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.images.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.widgets.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.widgets.doctree index d254164..7ef3aaa 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.widgets.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.UI.widgets.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.KODAK_dataset.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.KODAK_dataset.doctree new file mode 100644 index 0000000..75a8e9c Binary files /dev/null and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.KODAK_dataset.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.doctree index 01374a6..9cf5f06 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.experiment.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.experiment.doctree index 5b2b8df..b35f82b 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.experiment.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.experiment.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.multiple.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.multiple.doctree index 5a1e6ed..8f65d20 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.multiple.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.multiple.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.new_api.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.new_api.doctree index f8108cd..0ec7473 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.new_api.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.new_api.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.simple.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.simple.doctree index e5356fd..73538bc 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.simple.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.examples.simple.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.doctree index 624729a..896048f 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.doctree index 4648293..c19f5b6 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.doctree index f049bf7..0f5aa89 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.doctree index 182fb89..60341e5 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.doctree index c7584d5..aee3128 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.doctree index 9cb98e8..8a361b0 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.doctree index 6f09c1d..c87c842 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.doctree differ diff --git a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.utils.save_utils.doctree b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.utils.save_utils.doctree index 097e350..54364c5 100644 Binary files a/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.utils.save_utils.doctree and b/dev_resources/docs/_build/doctrees/_autosummary/IQM_Vis.utils.save_utils.doctree differ diff --git a/dev_resources/docs/_build/doctrees/environment.pickle b/dev_resources/docs/_build/doctrees/environment.pickle index 76933f6..de93caa 100644 Binary files a/dev_resources/docs/_build/doctrees/environment.pickle and b/dev_resources/docs/_build/doctrees/environment.pickle differ diff --git a/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_an_experiment.ipynb b/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb similarity index 62% rename from dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_an_experiment.ipynb rename to dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb index 18a3c8c..4974de7 100644 --- a/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_an_experiment.ipynb +++ b/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb @@ -5,18 +5,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Tutorial 4: Running an Experiment\n", + "# Tutorial 4: Running a 2AFC Experiment\n", "\n", - "In this tutorial we will go through how to setup and run an experiment.\n", + "In this tutorial we will go through how to setup and run a 2 Alternate Forced Choice experiment.\n", "\n", "First you need to Launch the UI with your required customisations (see previous tutorials).\n", "\n", "Things to setup:\n", - "- Load your own images\n", + "- Load your own images and select the image which you want to test\n", "\n", - "- Make sure that the settings are corrects (Image Display Size, Luminance Calibration etc.)\n", + "- Make sure that the settings are correct in the 'image settings' tab (Image Display Size, Luminance Calibration etc.)\n", "\n", - "- Only the required transforms are selected\n", + "- Only the required transforms are selected in the 'experiments' tab with the correct range and number of steps\n", + "\n", + "- Check that the Root Save Folder is correct\n", "\n", "Once you are ready, press the 'Run 2AFC Experiment' button, this will launch the experiment:\n", "\n", @@ -30,10 +32,12 @@ "source": [ "## Experiment Screen\n", "\n", - "The first screen will show the settings and images used for the experiment\n", + "The first screen will show the settings and images used for the experiment. Double checl the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same image but use different transforms or processing etc.\n", "\n", "![](./resources/experiment_1.png)\n", "\n", + "The Expected Number of Comparison shows how many clicks the user should expect to do.\n", + "\n", "If everything is correct, click the 'Setup' button. This will take you to the experiment information screen for the participant to read." ] }, @@ -58,6 +62,8 @@ "\n", "The experiment uses the quick sort algorithm with the user giving the pairwise most similar image until the images are sorted.\n", "\n", + "The user needs to click on the image which they believe is most similar to the reference image.\n", + "\n", "![](./resources/experiment_3.png)" ] }, @@ -66,7 +72,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Experiment Finsihed\n", + "### Experiment Finished\n", "\n", "Once the images are sorted you will be shown the sorting order and the folder when the experiments are saved. \n", "\n", @@ -82,15 +88,25 @@ "source": [ "# Visualising the experiment results\n", "\n", - "To visualise the experiment correlation plots, return to the main UI and load the experiment using the menu option: File>Load Human Scores. \n", - "\n", - "From here select the experiment image-results.csv. This will load the scores and the correlation plot against IQMs will be generated. \n", + "The experiment results will be automatically loaded into the 'Correlation' tab in IQM-Vis\n", "\n", "On the plot you can click on points to view the corresponding transformation that might disagree with the correlation with a metric.\n", + "\n", + "Use the right and left buttons below the graph to scroll through the different selected metrics.\n", + "\n", + "The Spearmean's and Pearson's correlation will be shown in the figure title.\n", + "\n", + "![](./resources/correlation_plot.png)\n", + "\n", "N.B. make sure the UI has that transformation loaded and the metrics selected you want to compare against.\n", "\n", - "![](./resources/correlation_plot.png)" + "To load previously saved experiments the experiment using the menu option: File>Load Human Scores, or use the 'Load Experiment' button below the graph." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { diff --git a/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_5-running_a_JND_experiment.ipynb b/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_5-running_a_JND_experiment.ipynb new file mode 100644 index 0000000..653a4d7 --- /dev/null +++ b/dev_resources/docs/_build/doctrees/nbsphinx/notebooks/Tutorial_5-running_a_JND_experiment.ipynb @@ -0,0 +1,133 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial 4: Running a JND Experiment\n", + "\n", + "In this tutorial we will go through how to setup and run a Just Noticable Difference experiment.\n", + "\n", + "First you need to Launch the UI with your required customisations (see previous tutorials).\n", + "\n", + "Things to setup:\n", + "- Load your own dataset of images\n", + "\n", + "- Select the range of images in the dataset to be used within 'Dataset Range (JND)'\n", + "\n", + "- Make sure that the settings are correct in the 'image settings' tab (Image Display Size, Luminance Calibration etc.)\n", + "\n", + "- Only ONE transform is selected in the 'experiments' tab with the correct range and number of steps\n", + "\n", + "- Check that the Root Save Folder is correct\n", + "\n", + "- Name the dataset for use with save folder naming by 'Dataset Name (JND)'\n", + "\n", + "Once you are ready, press the 'Run JND Experiment' button, this will launch the experiment:\n", + "\n", + "![](./resources/experiment_setup_JND.png)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Experiment Screen\n", + "\n", + "The first screen will show the settings and images used for the experiment. Double check the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same dataset name but use different transforms or processing etc.\n", + "\n", + "The first 25 images will be shown to get an idea if everything is correct.\n", + "\n", + "![](./resources/experiment_1_JDN.png)\n", + "\n", + "The Number of Comparison shows how many clicks the user will to do.\n", + "\n", + "If everything is correct, click the 'Setup' button. This will take you to the experiment information screen for the participant to read." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Info\n", + "\n", + "This will show the information for the participant. When they are ready, click the 'Start' button.\n", + "\n", + "![](./resources/experiment_2_JND.png)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Running\n", + "\n", + "The user needs to click the 'same' or 'different' button based on whether they think that the comparison images is the same or not as the reference image. \n", + "\n", + "![](./resources/experiment_3_JND.png)\n", + "\n", + "Note: users can also press the 'S' and 'D' keys on the keyboard to make their decisions." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Finished\n", + "\n", + "The save folder shown contains the experiment images and a csv file with all the experiment runs\n", + "\n", + "![](./resources/experiment_4_JND.png)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualising the experiment results\n", + "\n", + "The experiment results will be automatically loaded into the 'JND' tab in IQM-Vis\n", + "\n", + "This shows the user(s) decisions over the transform's parameter range.\n", + "\n", + "For example here, only 0.02 hue and above can be detected by humans.\n", + "\n", + "![](./resources/correlation_plot_JND.png)\n", + "\n", + "If you repeat the experiment with a new participant just click 'Run JND Experiment' again and the results will be merged into the existing database." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_a_2AFC_experiment copy.doctree b/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_a_2AFC_experiment copy.doctree new file mode 100644 index 0000000..316f60d Binary files /dev/null and b/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_a_2AFC_experiment copy.doctree differ diff --git a/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_an_experiment.doctree b/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_an_experiment.doctree deleted file mode 100644 index 6db7aa0..0000000 Binary files a/dev_resources/docs/_build/doctrees/notebooks/Tutorial_4-running_an_experiment.doctree and /dev/null differ diff --git a/dev_resources/docs/_build/doctrees/notebooks/Tutorial_5-running_a_JND_experiment.doctree b/dev_resources/docs/_build/doctrees/notebooks/Tutorial_5-running_a_JND_experiment.doctree new file mode 100644 index 0000000..a94db09 Binary files /dev/null and b/dev_resources/docs/_build/doctrees/notebooks/Tutorial_5-running_a_JND_experiment.doctree differ diff --git a/dev_resources/docs/_build/html/IQM_Vis.UI.html b/dev_resources/docs/_build/html/IQM_Vis.UI.html index 4005d26..435a2e3 100644 --- a/dev_resources/docs/_build/html/IQM_Vis.UI.html +++ b/dev_resources/docs/_build/html/IQM_Vis.UI.html @@ -119,162 +119,303 @@

Submodules -

IQM_Vis.UI.experiment_mode module

+
+

IQM_Vis.UI.experiment_mode_2AFC module

create experiment window

-
-class IQM_Vis.UI.experiment_mode.make_experiment(checked_transformation_params, data_store, image_display_size, rgb_brightness, display_brightness, default_save_dir='/home/matt/IQM-Vis-experiments', image_preprocessing='None', image_postprocessing='None', checked_metrics={})[source]
+
+class IQM_Vis.UI.experiment_mode_2AFC.make_experiment_2AFC(checked_transformation_params, data_store, image_display_size, rgb_brightness, display_brightness, default_save_dir='/home/matt/IQM-Vis', image_preprocessing='None', image_postprocessing='None', checked_metrics={})[source]

Bases: QMainWindow

-
-calc_max_comparisons(num_images)[source]
+
+calc_max_comparisons(num_images)[source]
-
-change_experiment_images(A_trans, B_trans)[source]
+
+change_experiment_images(A_trans, B_trans)[source]
-
-click_completed()[source]
+
+click_completed()[source]
-
-clicked_image(image_name, widget_name)[source]
+
+clicked_image(image_name, widget_name)[source]
-
-closeEvent(self, QCloseEvent)[source]
+
+closeEvent(self, QCloseEvent)[source]
-
-experiment_layout()[source]
+
+experiment_layout()[source]

setup

-
-finish_experiment()[source]
+
+finish_experiment()[source]
-
-get_all_images()[source]
+
+get_all_images()[source]

save image name

-
-get_metric_scores()[source]
+
+get_metric_scores()[source]

get IQM scores to save alongside the experiment for plotting/analysis purposes

-
-get_single_transform_im(single_trans_dict)[source]
+
+get_single_transform_im(single_trans_dict)[source]
-
-init_style(style='light', css_file=None)[source]
+
+get_trans_funcs()[source]
-
-partition(low, high)[source]
+
+get_unique_save_dir()[source]
+
+ +
+
+init_style(style='light', css_file=None)[source]
+
+ +
+
+partition(low, high)[source]

given an unsorted partition of the array between low and high, order elements lower than a given pivot point to the left and higher to the right

-
-quick_sort()[source]
+
+quick_sort()[source]
-
-quit()[source]
+
+quit()[source]
-
-reset_clicked_image
+
+reset_clicked_image
-
-reset_experiment()[source]
+
+reset_experiment()[source]
-
-save_experiment()[source]
+
+save_experiment()[source]
-
-saved_experiment
+
+saved_experiment
-
-setup_experiment()[source]
+
+setup_experiment()[source]
-
-show_all_images(tab='setup')[source]
+
+show_all_images(tab='setup')[source]
-
-start_experiment()[source]
+
+start_experiment()[source]
-
-swap_inds(i, j)[source]
+
+swap_inds(i, j)[source]
-
-toggle_experiment()[source]
+
+toggle_experiment()[source]
-
-class IQM_Vis.UI.experiment_mode.reset_image_widget_to_black(time=0.1)[source]
+
+class IQM_Vis.UI.experiment_mode_2AFC.reset_image_widget_to_black(time=0.1)[source]

Bases: QObject

change clicked image to black and pause

-
-change_to_solid(data)[source]
+
+change_to_solid(data)[source]
-
-completed
+
+completed
-
-stop()[source]
+
+stop()[source]
-
-IQM_Vis.UI.experiment_mode.sort_list(list1, list2)[source]
+
+IQM_Vis.UI.experiment_mode_2AFC.sort_list(list1, list2)[source]
+
+ +
+
+

IQM_Vis.UI.experiment_mode_JND module

+

create experiment window JND

+
+
+class IQM_Vis.UI.experiment_mode_JND.make_experiment_JND(checked_transformation_params, data_store, image_display_size, rgb_brightness, display_brightness, default_save_dir='/home/matt/IQM-Vis', dataset_name='dataset1', image_preprocessing='None', image_postprocessing='None', lower_im_num=1, upper_im_num=1, checked_metrics={})[source]
+

Bases: QMainWindow

+

https://www.verywellmind.com/what-is-the-just-noticeable-difference-2795306

+
+
+closeEvent(self, QCloseEvent)[source]
+
+ +
+
+experiment_layout()[source]
+

setup

+
+ +
+
+finish_experiment()[source]
+
+ +
+
+get_all_images()[source]
+
+ +
+
+get_metric_scores(calc=False)[source]
+

get IQM scores to save alongside the experiment for plotting/analysis purposes

+
+ +
+
+get_single_transform_im(single_trans_dict)[source]
+
+ +
+
+get_trans_funcs()[source]
+
+ +
+
+get_unique_save_dir()[source]
+

get directory that is unique based on if it’s the same experiment or not

+
+ +
+
+init_style(style='light', css_file=None)[source]
+
+ +
+
+quit()[source]
+
+ +
+
+reset_clicked_image
+
+ +
+
+reset_experiment()[source]
+
+ +
+
+save_experiment()[source]
+
+ +
+
+saved_experiment
+
+ +
+
+setup_experiment()[source]
+
+ +
+
+show_all_images(tab='setup')[source]
+
+ +
+
+start_experiment()[source]
+
+ +
+
+toggle_experiment()[source]
+
+ +
+
+user_decision(decision)[source]
+
+ +
+ +
+
+class IQM_Vis.UI.experiment_mode_JND.reset_image_widget_to_black(time=0.1)[source]
+

Bases: QObject

+

change clicked image to black and pause

+
+
+change_to_solid(data)[source]
+
+
+completed
+
+ +
+
+stop()[source]
+
+ +
+

IQM_Vis.UI.images module

@@ -329,6 +470,11 @@

Submodulesdisplay_images()[source]
+
+
+display_metric_JND_plot()[source]
+
+
display_metric_correlation_plot()[source]
@@ -364,6 +510,11 @@

Submodulesdisplay_radar_plots()[source]

+
+
+get_export_dir(i)[source]
+
+
get_metrics_over_all_trans_with_init_values()[source]
@@ -380,6 +531,11 @@

Submodulesload_experiment_from_dir()[source]

+
+
+load_experiment_from_dir_JND()[source]
+
+
load_human_experiment()[source]
@@ -481,7 +637,7 @@

Submodules
-class IQM_Vis.UI.main.make_app(app, data_stores: list, transformations: dict, metrics_info_format='graph', metrics_avg_graph=False, metric_range_graph=True, metric_params: dict = {}, image_display_size=300, default_save_dir='/home/matt/IQM-Vis-experiments', restrict_options=None, num_steps_range=11, num_step_experiment=6, num_images_scroll_show=7, test=False)[source]
+class IQM_Vis.UI.main.make_app(app, data_stores: list, transformations: dict, metrics_info_format='graph', metrics_avg_graph=False, metric_range_graph=True, metric_params: dict = {}, image_display_size=300, default_save_dir='/home/matt/IQM-Vis', default_dataset_name='dataset1', restrict_options=None, num_steps_range=11, num_step_experiment=6, num_images_scroll_show=7, test=False)[source]

Bases: widgets, layout, images

@@ -640,6 +796,24 @@

Submodules class IQM_Vis.UI.widgets.widgets[source]

Bases: object

+
+
+JND_dataset_range_lower(txt)[source]
+

change the dataset_name we are using

+
+ +
+
+JND_dataset_range_upper(txt)[source]
+

change the dataset_name we are using

+
+ +
+
+change_dataset_name(txt)[source]
+

change the dataset_name we are using

+
+
change_display_im_display_brightness()[source]
@@ -661,8 +835,13 @@

Submodules -
-change_human_scores_after_exp(path)[source]
+
+change_human_scores_after_exp_2AFC(path)[source]
+

+ +
+
+change_human_scores_after_exp_JND(path)[source]
@@ -739,9 +918,16 @@

Submodules -
-launch_experiment()[source]
-

+
+launch_experiment_2AFC()[source]
+

Launch the 2 alternate forced choice experiment

+
+ +
+
+launch_experiment_JND()[source]
+

launch the Just Noticable difference experiment

+
diff --git a/dev_resources/docs/_build/html/IQM_Vis.examples.KODAK_dataset.html b/dev_resources/docs/_build/html/IQM_Vis.examples.KODAK_dataset.html new file mode 100644 index 0000000..549d52d --- /dev/null +++ b/dev_resources/docs/_build/html/IQM_Vis.examples.KODAK_dataset.html @@ -0,0 +1,125 @@ + + + + + + + IQM_Vis.examples.KODAK_dataset package — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

IQM_Vis.examples.KODAK_dataset package

+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/IQM_Vis.examples.html b/dev_resources/docs/_build/html/IQM_Vis.examples.html index 5875001..86d9830 100644 --- a/dev_resources/docs/_build/html/IQM_Vis.examples.html +++ b/dev_resources/docs/_build/html/IQM_Vis.examples.html @@ -93,6 +93,10 @@

IQM_Vis.examples package

-

-
-

IQM_Vis.examples.experiment module

-
-
-IQM_Vis.examples.experiment.run()[source]
-
-

IQM_Vis.examples.kodak module

@@ -154,31 +150,6 @@

SubmodulesIQM_Vis.examples.kodak.run()[source]
-

-
-

IQM_Vis.examples.multiple module

-
-
-IQM_Vis.examples.multiple.run()[source]
-
- -
-
-

IQM_Vis.examples.new_api module

-

KODAK dataset

-
-
-IQM_Vis.examples.new_api.run()[source]
-
- -
-
-

IQM_Vis.examples.simple module

-
-
-IQM_Vis.examples.simple.run()[source]
-
-

Module contents

diff --git a/dev_resources/docs/_build/html/IQM_Vis.html b/dev_resources/docs/_build/html/IQM_Vis.html index 47d8b06..1b74b77 100644 --- a/dev_resources/docs/_build/html/IQM_Vis.html +++ b/dev_resources/docs/_build/html/IQM_Vis.html @@ -104,40 +104,73 @@

SubpackagesProgressBar -
  • IQM_Vis.UI.experiment_mode module
  • Module contents

    diff --git a/dev_resources/docs/_build/html/IQM_Vis.metrics.html b/dev_resources/docs/_build/html/IQM_Vis.metrics.html index 2084bd7..f7057d4 100644 --- a/dev_resources/docs/_build/html/IQM_Vis.metrics.html +++ b/dev_resources/docs/_build/html/IQM_Vis.metrics.html @@ -157,19 +157,8 @@

    SubpackagesIQM_Vis.metrics.SSIM package @@ -113,10 +111,6 @@

    Tutorials
    Tutorial 3: Customisation Details
    - -
    -
    Tutorial 4: Running an Experiment
    -

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode.html index 59e1981..f6d3e89 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode.html @@ -87,28 +87,8 @@
    -
    -

    IQM_Vis.UI.experiment_mode

    -

    create experiment window

    -

    Functions

    - - - - - - -

    sort_list(list1, list2)

    -

    Classes

    - - - - - - - - - -

    make_experiment(...[, default_save_dir, ...])

    reset_image_widget_to_black([time])

    change clicked image to black and pause

    +
    +

    IQM_Vis.UI.experiment_mode

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.html new file mode 100644 index 0000000..e64ac34 --- /dev/null +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_2AFC.html @@ -0,0 +1,142 @@ + + + + + + + IQM_Vis.UI.experiment_mode_2AFC — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    IQM_Vis.UI.experiment_mode_2AFC

    +

    create experiment window

    +

    Functions

    + + + + + + +

    sort_list(list1, list2)

    +

    Classes

    + + + + + + + + + +

    make_experiment_2AFC(...[, ...])

    reset_image_widget_to_black([time])

    change clicked image to black and pause

    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_JND.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_JND.html new file mode 100644 index 0000000..c06e6b1 --- /dev/null +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.experiment_mode_JND.html @@ -0,0 +1,134 @@ + + + + + + + IQM_Vis.UI.experiment_mode_JND — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    IQM_Vis.UI.experiment_mode_JND

    +

    create experiment window JND

    +

    Classes

    + + + + + + + + + +

    make_experiment_JND(...[, default_save_dir, ...])

    https://www.verywellmind.com/what-is-the-just-noticeable-difference-2795306

    reset_image_widget_to_black([time])

    change clicked image to black and pause

    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.html index a22d79b..571828d 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.html @@ -95,25 +95,28 @@

    IQM_Vis.UI.custom_widgets

    Custom SubClasses of PyQt6 widget to extent to the required functionality

    -

    IQM_Vis.UI.experiment_mode

    +

    IQM_Vis.UI.experiment_mode_2AFC

    create experiment window

    -

    IQM_Vis.UI.images(**kwargs)

    +

    IQM_Vis.UI.experiment_mode_JND

    +

    create experiment window JND

    + +

    IQM_Vis.UI.images(**kwargs)

    -

    IQM_Vis.UI.layout(**kwargs)

    +

    IQM_Vis.UI.layout(**kwargs)

    -

    IQM_Vis.UI.main

    +

    IQM_Vis.UI.main

    main entry point to initialise the UI

    -

    IQM_Vis.UI.threads

    +

    IQM_Vis.UI.threads

    thread and signal classes to makethe UI smoother useful info about PyQt6 threads: https://www.pythontutorial.net/pyqt/pyqt-qthread/

    -

    IQM_Vis.UI.utils

    +

    IQM_Vis.UI.utils

    -

    IQM_Vis.UI.widgets()

    +

    IQM_Vis.UI.widgets()

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.images.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.images.html index 5e58bc6..3cc1983 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.images.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.images.html @@ -130,25 +130,31 @@

    IQM_Vis.UI.images

    display_images()

    -

    display_metric_correlation_plot()

    +

    display_metric_JND_plot()

    -

    display_metric_images(metric_images, i)

    +

    display_metric_correlation_plot()

    -

    display_metric_range_plot()

    +

    display_metric_images(metric_images, i)

    -

    display_metrics(metrics, i)

    +

    display_metric_range_plot()

    -

    display_metrics_graph(metrics, i)

    +

    display_metrics(metrics, i)

    -

    display_metrics_text(metrics, i[, disp_len])

    +

    display_metrics_graph(metrics, i)

    -

    display_radar_plots()

    +

    display_metrics_text(metrics, i[, disp_len])

    +

    + +

    display_radar_plots()

    +

    + +

    get_export_dir(i)

    get_metrics_over_all_trans_with_init_values()

    @@ -160,37 +166,40 @@

    IQM_Vis.UI.images

    load_experiment_from_dir()

    -

    load_human_experiment()

    +

    load_experiment_from_dir_JND()

    +

    + +

    load_human_experiment()

    change the image dataset we are using

    -

    load_new_images_folder()

    +

    load_new_images_folder()

    change the image dataset we are using

    -

    load_new_single_image()

    +

    load_new_single_image()

    change the image we are using

    -

    plot_metric_range_mlp(i)

    +

    plot_metric_range_mlp(i)

    -

    plot_radar_graph(results, i)

    +

    plot_radar_graph(results, i)

    -

    plot_radar_mlp(i)

    +

    plot_radar_mlp(i)

    -

    redo_plots([calc_range])

    +

    redo_plots([calc_range])

    -

    set_preview_images(preview_num)

    +

    set_preview_images(preview_num)

    -

    set_save_dir_mpl([i])

    +

    set_save_dir_mpl([i])

    -

    stopped_range_worker([signal])

    +

    stopped_range_worker([signal])

    -

    update_datastore_image_list(image_list[, ...])

    +

    update_datastore_image_list(image_list[, ...])

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.widgets.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.widgets.html index 09bf4cc..ea96f25 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.widgets.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.UI.widgets.html @@ -100,22 +100,34 @@

    IQM_Vis.UI.widgetsMethods

    + + + + + + - + + + + - + - + - + - + + + + @@ -160,31 +172,34 @@

    IQM_Vis.UI.widgets

    - - + + + + + - + - + - + - + - + - + - + - + diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.KODAK_dataset.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.KODAK_dataset.html new file mode 100644 index 0000000..4f727a5 --- /dev/null +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.KODAK_dataset.html @@ -0,0 +1,122 @@ + + + + + + + IQM_Vis.examples.KODAK_dataset — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    IQM_Vis.examples.KODAK_dataset

    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.experiment.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.experiment.html index 67ede52..c9f51ab 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.experiment.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.experiment.html @@ -87,16 +87,8 @@
    -
    -

    IQM_Vis.examples.experiment

    -

    Functions

    -

    JND_dataset_range_lower(txt)

    change the dataset_name we are using

    JND_dataset_range_upper(txt)

    change the dataset_name we are using

    __init__()

    change_display_im_display_brightness()

    change_dataset_name(txt)

    change the dataset_name we are using

    change_display_im_display_brightness()

    change_display_im_rgb_brightness()

    change_display_im_rgb_brightness()

    change_display_im_size()

    change_display_im_size()

    change_graph_size()

    change_graph_size()

    change_human_scores_after_exp(path)

    change_human_scores_after_exp_2AFC(path)

    change_human_scores_after_exp_JND(path)

    change_num_steps()

    init_widgets(**kwargs)

    create all the widgets we need and init params

    launch_experiment()

    launch_experiment_2AFC()

    Launch the 2 alternate forced choice experiment

    launch_experiment_JND()

    launch the Just Noticable difference experiment

    make_slider_range(sliders_dict, key, _min, _max)

    make_slider_range(sliders_dict, key, _min, _max)

    open_mlp_new(mpl_canvas)

    open_mlp_new(mpl_canvas)

    reset_slider_group(param_group[, ...])

    reset_slider_group(param_group[, ...])

    reset_sliders()

    reset_sliders()

    set_image_name_text()

    set_image_name_text()

    update_image_settings()

    update_image_settings()

    button to apply new image settings

    update_progress(v)

    update_progress(v)

    update_status_bar(v[, time])

    update_status_bar(v[, time])

    - - - - - -

    run()

    +
    +

    IQM_Vis.examples.experiment

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.html index 32869e5..6699509 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.html @@ -92,16 +92,16 @@

    Modules

    - - - - + - + + + + - + @@ -110,15 +110,6 @@ - - - - - - - - -

    IQM_Vis.examples.all

    run all avaiable metrics/ transforms

    IQM_Vis.examples.dataset

    IQM_Vis.examples.KODAK_dataset

    IQM_Vis.examples.dists

    IQM_Vis.examples.all

    run all avaiable metrics/ transforms

    IQM_Vis.examples.dataset

    IQM_Vis.examples.experiment

    IQM_Vis.examples.dists

    IQM_Vis.examples.images

    IQM_Vis.examples.kodak

    KODAK dataset

    IQM_Vis.examples.multiple

    IQM_Vis.examples.new_api

    KODAK dataset

    IQM_Vis.examples.simple

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.multiple.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.multiple.html index c81e21f..e926184 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.multiple.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.multiple.html @@ -87,16 +87,8 @@
    -
    -

    IQM_Vis.examples.multiple

    -

    Functions

    - - - - - - -

    run()

    +
    +

    IQM_Vis.examples.multiple

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.new_api.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.new_api.html index b10ed55..7eaf57a 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.new_api.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.new_api.html @@ -87,17 +87,8 @@
    -
    -

    IQM_Vis.examples.new_api

    -

    KODAK dataset

    -

    Functions

    - - - - - - -

    run()

    +
    +

    IQM_Vis.examples.new_api

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.simple.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.simple.html index 9681fc4..733709e 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.simple.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.examples.simple.html @@ -87,16 +87,8 @@
    -
    -

    IQM_Vis.examples.simple

    -

    Functions

    - - - - - - -

    run()

    +
    +

    IQM_Vis.examples.simple

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.html index ffca1e2..c1e377a 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.html @@ -87,19 +87,8 @@
    -
    -

    IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation

    -

    The expert.layers.divisive_normalisation module holds classes of -layers for a network that use divisive normalisation. This includes -generalised divisive normalisation.

    -

    Classes

    - - - - - - -

    GDN(n_channels[, kernel_size, stride, ...])

    Generalised Divisve Normalisation proposed in [BALLE2015GDN].

    +
    +

    IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.html index c670127..05abac0 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.layers.html @@ -89,14 +89,6 @@

    IQM_Vis.metrics.NLPD_torch.layers

    -

    Modules

    - - - - - - -

    IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation

    The expert.layers.divisive_normalisation module holds classes of layers for a network that use divisive normalisation.

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.html index 1c598b0..e11813c 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.html @@ -97,15 +97,6 @@

    LaplacianPyramid(k[, dims, filt, trainable])

    -

    LaplacianPyramidGDN(k[, dims, filt])

    -

    - -

    SteerablePyramid([stages, num_orientations, ...])

    -

    Steerable pyramid model implemented in spatial domain, introduced in [SIMON1995PYR].

    - -

    SteerableWavelet([stages, order, twidth])

    -

    Steerable wavelet pyramid.

    -
    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.html index 0819d97..987d934 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.html @@ -87,36 +87,8 @@
    -
    -

    IQM_Vis.metrics.NLPD_torch.utils.fourier

    -

    The expert.utils.fourier module holds functions for use in Fourier -domain and wavelet transforms

    -

    Functions

    - - - - - - - - - - - - - - - - - - - - - - - - -

    fftshift(x[, dim])

    Similar to np.fft.fftshift but applies to PyTorch Tensors

    harmonic_column(harmonic, angles, phase)

    For a singular harmonic, generates the neccesary values to compute steering matrix.

    ifftshift(x[, dim])

    Similar to np.fft.ifftshift but applies to PyTorch Tensors

    point_operation_filter(image, samples, ...)

    Performs 1-D Interpolation.

    raised_cosine([width, position, func_min, ...])

    Raised cosine function.

    roll(x, shift, dim)

    Similar to np.roll but applies to PyTorch Tensors https://github.com/khammernik/sigmanet

    steer_to_harmonics(harmonics, angles[, phase])

    Maps a directional basis set onto the angular Fourier harmonics.

    +
    +

    IQM_Vis.metrics.NLPD_torch.utils.fourier

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.html index 722bae0..a17b878 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.html @@ -95,15 +95,6 @@

    IQM_Vis.metrics.NLPD_torch.utils.conv

    The expert.utils.conv module holds util functions for convolutions, like padding to maintain the size of the image.

    -

    IQM_Vis.metrics.NLPD_torch.utils.fourier

    -

    The expert.utils.fourier module holds functions for use in Fourier domain and wavelet transforms

    - -

    IQM_Vis.metrics.NLPD_torch.utils.interp1d

    -

    - -

    IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters

    -

    The expert.utils.pyramid_filters module holds filters used in the exeprt.models.pyramids module.

    -
    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.html index 6cda1ee..44e0002 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.html @@ -87,16 +87,8 @@
    -
    -

    IQM_Vis.metrics.NLPD_torch.utils.interp1d

    -

    Classes

    - - - - - - -

    Interp1d(*args, **kwargs)

    +
    +

    IQM_Vis.metrics.NLPD_torch.utils.interp1d

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.html index 336afaa..1b941a4 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.html @@ -87,14 +87,8 @@
    -
    -

    IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters

    -

    The expert.utils.pyramid_filters module holds filters used in the -exeprt.models.pyramids module.

    -

    Holds learnt filters to be used in steerable pyramids.

    -

    Stores the learnt filters for steerable pyramids in the spatial domain. -All filters are taken from _, which contains the MATLAB implementations -for _[SIMON1995].

    +
    +

    IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters

    diff --git a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.utils.save_utils.html b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.utils.save_utils.html index 6698724..30e731b 100644 --- a/dev_resources/docs/_build/html/_autosummary/IQM_Vis.utils.save_utils.html +++ b/dev_resources/docs/_build/html/_autosummary/IQM_Vis.utils.save_utils.html @@ -104,6 +104,18 @@

    get_IQM_file(dir)

    +

    get_JND_image_names(dir)

    +

    load the image names from a JND experiment

    + +

    get_JND_ref_image_dir(dir)

    +

    + +

    get_JND_ref_image_unprocessed_dir(dir)

    +

    + +

    get_JND_user_ID(dir)

    +

    +

    get_human_scores_file(dir)

    @@ -137,14 +149,20 @@

    make_name_for_trans(trans)

    +

    save_2AFC_experiment_results(trans_names, ...)

    +

    save all the experiment reults as csvs

    + +

    save_JND_experiment_results(...[, IQM_scores_df])

    +

    +

    save_and_merge_df_as_csv(df, file)

    df need to be indexed

    -

    save_df_as_csv(df, file[, index])

    -

    +

    save_and_merge_rm_duplicates_df_as_csv(df, file)

    +

    save only new IQM rows

    -

    save_experiment_results(trans_names, ...[, ...])

    -

    save all the experiment reults as csvs

    +

    save_df_as_csv(df, file[, index])

    +

    save_json_dict(path, dict_)

    diff --git a/dev_resources/docs/_build/html/_images/correlation_plot.png b/dev_resources/docs/_build/html/_images/correlation_plot.png index 54e03b8..ac04a2d 100644 Binary files a/dev_resources/docs/_build/html/_images/correlation_plot.png and b/dev_resources/docs/_build/html/_images/correlation_plot.png differ diff --git a/dev_resources/docs/_build/html/_images/correlation_plot_JND.png b/dev_resources/docs/_build/html/_images/correlation_plot_JND.png new file mode 100644 index 0000000..990d55a Binary files /dev/null and b/dev_resources/docs/_build/html/_images/correlation_plot_JND.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_1.png b/dev_resources/docs/_build/html/_images/experiment_1.png index c750414..a2274cd 100644 Binary files a/dev_resources/docs/_build/html/_images/experiment_1.png and b/dev_resources/docs/_build/html/_images/experiment_1.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_1_JDN.png b/dev_resources/docs/_build/html/_images/experiment_1_JDN.png new file mode 100644 index 0000000..b449178 Binary files /dev/null and b/dev_resources/docs/_build/html/_images/experiment_1_JDN.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_2.png b/dev_resources/docs/_build/html/_images/experiment_2.png index efbb9d9..daff8bb 100644 Binary files a/dev_resources/docs/_build/html/_images/experiment_2.png and b/dev_resources/docs/_build/html/_images/experiment_2.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_2_JND.png b/dev_resources/docs/_build/html/_images/experiment_2_JND.png new file mode 100644 index 0000000..6d94470 Binary files /dev/null and b/dev_resources/docs/_build/html/_images/experiment_2_JND.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_3.png b/dev_resources/docs/_build/html/_images/experiment_3.png index b367020..a64800c 100644 Binary files a/dev_resources/docs/_build/html/_images/experiment_3.png and b/dev_resources/docs/_build/html/_images/experiment_3.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_3_JND.png b/dev_resources/docs/_build/html/_images/experiment_3_JND.png new file mode 100644 index 0000000..ba37941 Binary files /dev/null and b/dev_resources/docs/_build/html/_images/experiment_3_JND.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_4.png b/dev_resources/docs/_build/html/_images/experiment_4.png index 29da878..928191c 100644 Binary files a/dev_resources/docs/_build/html/_images/experiment_4.png and b/dev_resources/docs/_build/html/_images/experiment_4.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_4_JND.png b/dev_resources/docs/_build/html/_images/experiment_4_JND.png new file mode 100644 index 0000000..fd85f98 Binary files /dev/null and b/dev_resources/docs/_build/html/_images/experiment_4_JND.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_setup.png b/dev_resources/docs/_build/html/_images/experiment_setup.png index efa50e7..1c36de9 100644 Binary files a/dev_resources/docs/_build/html/_images/experiment_setup.png and b/dev_resources/docs/_build/html/_images/experiment_setup.png differ diff --git a/dev_resources/docs/_build/html/_images/experiment_setup_JND.png b/dev_resources/docs/_build/html/_images/experiment_setup_JND.png new file mode 100644 index 0000000..d4c9473 Binary files /dev/null and b/dev_resources/docs/_build/html/_images/experiment_setup_JND.png differ diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/custom_widgets.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/custom_widgets.html index e2d2819..402737a 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/custom_widgets.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/custom_widgets.html @@ -103,7 +103,7 @@

    Source code for IQM_Vis.UI.custom_widgets

             super().__init__()
             self.name = name
     
    -
    [docs] def mousePressEvent(self, event): +
    [docs] def mousePressEvent(self, event=None): self.clicked.emit(self.objectName(), self.name)
    diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_2AFC.html similarity index 86% rename from dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode.html rename to dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_2AFC.html index 1716d1e..31153cf 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_2AFC.html @@ -3,7 +3,7 @@ - IQM_Vis.UI.experiment_mode — IQM-Vis 0.2 documentation + IQM_Vis.UI.experiment_mode_2AFC — IQM-Vis 0.2 documentation @@ -77,7 +77,7 @@
    • - +
    @@ -86,7 +86,7 @@
    -

    Source code for IQM_Vis.UI.experiment_mode

    +  

    Source code for IQM_Vis.UI.experiment_mode_2AFC

     '''
     create experiment window
     '''
    @@ -119,7 +119,7 @@ 

    Source code for IQM_Vis.UI.experiment_mode

     from IQM_Vis.utils import gui_utils, plot_utils, image_utils, save_utils
     
     
    -
    [docs]class make_experiment(QMainWindow): +
    [docs]class make_experiment_2AFC(QMainWindow): saved_experiment = pyqtSignal(str) reset_clicked_image = pyqtSignal(dict) @@ -143,6 +143,8 @@

    Source code for IQM_Vis.UI.experiment_mode

             self.rgb_brightness = rgb_brightness
             self.display_brightness = display_brightness
             self.default_save_dir = default_save_dir
    +        self.default_save_dir = os.path.join(default_save_dir, '2AFC')
    +        
             
             self.processing = {'pre': image_preprocessing,
                                'post': image_postprocessing}
    @@ -161,11 +163,18 @@ 

    Source code for IQM_Vis.UI.experiment_mode

             self.saved = False
             self.quit_experiment = False
             self.get_all_images()
    +        
    +        # make the experiment directory
    +        self.default_save_dir = os.path.join(
    +            self.default_save_dir, self.image_name)
    +        # make unique save dir name
    +        self.new_save_dir = self.get_unique_save_dir()
    +        
             self._init_experiment_window_widgets()
             self.get_metric_scores()
             self.experiment_layout()
             self.setCentralWidget(self.experiments_tab)
    -        self.setWindowTitle('Experiment')
    +        self.setWindowTitle('2AFC Experiment')
             # move to centre of the screen
             qr = self.frameGeometry()
             cp = self.screen().availableGeometry().center()
    @@ -173,7 +182,7 @@ 

    Source code for IQM_Vis.UI.experiment_mode

             self.move(qr.topLeft())
             self.show_all_images()
     
    -
    [docs] def closeEvent(self, event): +
    [docs] def closeEvent(self, event): # Ask for confirmation if not saved if not self.saved: answer = QMessageBox.question(self, @@ -198,10 +207,10 @@

    Source code for IQM_Vis.UI.experiment_mode

                 self.clicked_event.set()
                 event.accept()
    -
    [docs] def quit(self): +
    [docs] def quit(self): self.close()
    -
    [docs] def show_all_images(self, tab='setup'): +
    [docs] def show_all_images(self, tab='setup'): self.widget_experiments[tab]['images'].axes.axis('off') rows = int(len(self.experiment_transforms)**0.5) cols = int(np.ceil(len(self.experiment_transforms)/rows)) @@ -217,7 +226,7 @@

    Source code for IQM_Vis.UI.experiment_mode

             # time.sleep(5)
             # QApplication.processEvents()
                 
    -
    [docs] def get_all_images(self): +
    [docs] def get_all_images(self): ''' save image name ''' self.image_name = self.data_store.get_reference_image_name() ''' load all transformed images and sort them via MSE ''' @@ -269,13 +278,13 @@

    Source code for IQM_Vis.UI.experiment_mode

                 self.experiment_transforms.append(data)
             self.calc_max_comparisons(num_images=len(self.experiment_transforms))
    -
    [docs] def calc_max_comparisons(self, num_images): +
    [docs] def calc_max_comparisons(self, num_images): # calc expected number of comparisons - # http://homepages.math.uic.edu/~leon/cs-mcs401-r07/handouts/quicksort-continued.pdf self.min_expected_comps = num_images * np.log(num_images) self.max_expected_comps = 1.39 * num_images * np.log(num_images)
    -
    [docs] def get_metric_scores(self): +
    [docs] def get_metric_scores(self): '''get IQM scores to save alongside the experiment for plotting/analysis purposes''' IQM_scores = {} for data in self.experiment_transforms: @@ -304,7 +313,7 @@

    Source code for IQM_Vis.UI.experiment_mode

             self.widget_experiments['setup']['images'] = gui_utils.MplCanvas(size=None)
             self.widget_experiments['setup']['text'] = QLabel(self)
             self.widget_experiments['setup']['text'].setText(f'''
    -        Experiment to be setup with the above images using the settings:
    +        2AFC Experiment to be setup with the above images using the settings:
                 Save folder: {self.default_save_dir}
                 Image Display Size: {self.image_display_size}
                 Image Calibration:
    @@ -341,8 +350,9 @@ 

    Source code for IQM_Vis.UI.experiment_mode

                       self.widget_experiments['preamble']['quit_button'], self.quit)
     
             ''' experiment tab '''
    +        self.exp_info_text = 'Click on which image, A or B, is most similar to the reference image (or use left/right arrows)'
             self.widget_experiments['exp']['info'] = QLabel(
    -            'Click on which image, A or B, is most similar to the reference image', self)
    +            self.exp_info_text, self)
             for image in ['Reference', 'A', 'B']:
                 self.widget_experiments['exp'][image] = {}
                 self.widget_experiments['exp'][image]['data'] = ClickLabel(image)
    @@ -352,6 +362,12 @@ 

    Source code for IQM_Vis.UI.experiment_mode

                 self.widget_experiments['exp'][image]['label'].setAlignment(Qt.AlignmentFlag.AlignCenter)
             self.widget_experiments['exp']['A']['data'].clicked.connect(self.clicked_image)
             self.widget_experiments['exp']['B']['data'].clicked.connect(self.clicked_image)
    +        # shortcuts keyboard
    +        QShortcut(QKeySequence(
    +            "left"), self.widget_experiments['exp']['A']['data'], self.widget_experiments['exp']['A']['data'].mousePressEvent)
    +        QShortcut(QKeySequence(
    +            "right"), self.widget_experiments['exp']['B']['data'], self.widget_experiments['exp']['B']['data'].mousePressEvent)
    +        # quit
             self.widget_experiments['exp']['quit_button'] = QPushButton('Quit', self)
             self.widget_experiments['exp']['quit_button'].clicked.connect(self.quit)
             QShortcut(QKeySequence("Ctrl+Q"),
    @@ -368,7 +384,7 @@ 

    Source code for IQM_Vis.UI.experiment_mode

                     self.widget_experiments['final']['quit_button'], self.quit)
             self.widget_experiments['final']['save_label'] = QLabel('Not saved yet', self)
     
    -
    [docs] def experiment_layout(self): +
    [docs] def experiment_layout(self): ''' setup ''' experiment_text = QVBoxLayout() experiment_text.addWidget(self.widget_experiments['setup']['text']) @@ -446,13 +462,17 @@

    Source code for IQM_Vis.UI.experiment_mode

             # return experiment_mode_layout
     
         ''' experiment running functions'''
    -
    [docs] def setup_experiment(self): +
    [docs] def setup_experiment(self): + self.click_counter = 0 + self.max_text = f'{int(self.min_expected_comps)}-{int(self.max_expected_comps)}' + self.widget_experiments['exp']['info'].setText( + f'{self.exp_info_text} {self.click_counter}/{self.max_text}') self.experiments_tab.setCurrentIndex(1) self.experiments_tab.setTabEnabled(0, False) self.experiments_tab.setTabEnabled(2, False) self.experiments_tab.setTabEnabled(3, False)
    -
    [docs] def toggle_experiment(self): +
    [docs] def toggle_experiment(self): if self.running_experiment: self.reset_experiment() self.experiments_tab.setTabEnabled(0, True) @@ -468,11 +488,12 @@

    Source code for IQM_Vis.UI.experiment_mode

                 # self.widget_experiments['preamble']['start_button'].setText('Reset')
                 self.running_experiment = True
    -
    [docs] def reset_experiment(self): +
    [docs] def reset_experiment(self): self.experiments_tab.setCurrentIndex(1) self.init_style('light')
    -
    [docs] def start_experiment(self): +
    [docs] def start_experiment(self): + self.running_experiment = True self.init_style('dark') self.experiments_tab.setCurrentIndex(2) @@ -485,43 +506,48 @@

    Source code for IQM_Vis.UI.experiment_mode

             self.sorting_thread.start()
    # self.quick_sort(0, len(self.experiment_transforms)-1) -
    [docs] def finish_experiment(self): +
    [docs] def finish_experiment(self): + self.running_experiment = False self.experiments_tab.setTabEnabled(3, True) self.show_all_images(tab='final') self.init_style('light') self.experiments_tab.setCurrentIndex(3) - # self.experiments_tab.setTabEnabled(2, False) + self.experiments_tab.setTabEnabled(2, False) self.save_experiment() if self.saved == True: self.widget_experiments['final']['save_label'].setText(f'Saved to {self.default_save_dir}') else: self.widget_experiments['final']['save_label'].setText(f'Save failed to {self.default_save_dir}')
    - -
    [docs] def save_experiment(self): +
    [docs] def get_trans_funcs(self): # get the current transform functions trans_funcs = {} for single_trans in self.experiment_trans_params: trans_name = list(single_trans.keys())[0] trans_funcs[trans_name] = self.checked_transformation_params[trans_name]['function'] - # make the experiment directory - self.default_save_dir = os.path.join( - self.default_save_dir, self.image_name) + return trans_funcs
    + +
    [docs] def get_unique_save_dir(self): + # get the current transform functions + trans_funcs = self.get_trans_funcs() + # get a unique directory (same image with diff trans need a new dir) i = 1 unique_dir_found = False new_dir = True while unique_dir_found == False: - exp_save_dir = f'{self.default_save_dir}-experiment-{i}' + exp_save_dir = os.path.join( + self.default_save_dir, f'experiment-{i}') if os.path.exists(exp_save_dir): # get transform funcs and params exp_trans_params = save_utils.load_obj( os.path.join(exp_save_dir, 'transforms', 'transform_params.pkl')) exp_trans_funcs = save_utils.load_obj( os.path.join(exp_save_dir, 'transforms', 'transform_functions.pkl')) - + # get image processing saved params - processing_file = save_utils.get_image_processing_file(exp_save_dir) + processing_file = save_utils.get_image_processing_file( + exp_save_dir) procesing_same = False if os.path.exists(processing_file): processing = save_utils.load_json_dict(processing_file) @@ -529,7 +555,9 @@

    Source code for IQM_Vis.UI.experiment_mode

                             procesing_same = True
     
                     # check if experiment is the same
    -                if (exp_trans_params == self.original_params_order) and (trans_funcs == exp_trans_funcs) and procesing_same:
    +                if ((exp_trans_params == self.original_params_order) 
    +                    and (trans_funcs == exp_trans_funcs) 
    +                    and procesing_same):
                         self.default_save_dir = exp_save_dir
                         unique_dir_found = True
                         new_dir = False
    @@ -538,6 +566,12 @@ 

    Source code for IQM_Vis.UI.experiment_mode

                 else:
                     self.default_save_dir = exp_save_dir
                     unique_dir_found = True
    +        return new_dir
    + +
    [docs] def save_experiment(self): + # get the current transform functions + trans_funcs = self.get_trans_funcs() + # make all the dirs and subdirs os.makedirs(self.default_save_dir, exist_ok=True) os.makedirs(os.path.join(self.default_save_dir, 'images'), exist_ok=True) @@ -551,7 +585,7 @@

    Source code for IQM_Vis.UI.experiment_mode

                 if hasattr(self, 'ref_image_unprocessed'):
                     image_utils.save_image(self.ref_image_unprocessed,
                                             save_utils.get_original_unprocessed_image_file(self.default_save_dir))
    -        if new_dir == True:
    +        if self.new_save_dir == True:
                 for trans in self.experiment_transforms:
                     image_utils.save_image(
                         trans['image'], os.path.join(self.default_save_dir, 'images', f'{save_utils.make_name_for_trans(trans)}.png'))
    @@ -571,7 +605,7 @@ 

    Source code for IQM_Vis.UI.experiment_mode

             exp_order = []
             for trans in self.experiment_transforms:
                 exp_order.append(save_utils.make_name_for_trans(trans))
    -        csv_file = save_utils.save_experiment_results(
    +        csv_file = save_utils.save_2AFC_experiment_results(
                 self.original_params_order,
                 exp_order,
                 self.default_save_dir,
    @@ -580,9 +614,8 @@ 

    Source code for IQM_Vis.UI.experiment_mode

             self.saved = True
             self.saved_experiment.emit(csv_file)
    - ''' sorting algorithm resource: https://www.geeksforgeeks.org/quick-sort/''' -
    [docs] def quick_sort(self): +
    [docs] def quick_sort(self): self.times_taken = [] self._quick_sort(0, len(self.experiment_transforms)-1) if self.quit_experiment != True: @@ -602,7 +635,7 @@

    Source code for IQM_Vis.UI.experiment_mode

                 # Recursive call on the right of pivot
                 self._quick_sort(pi + 1, high)
     
    -
    [docs] def partition(self, low, high): +
    [docs] def partition(self, low, high): ''' given an unsorted partition of the array between low and high, order elements lower than a given pivot point to the left and higher to the right''' # Choose the end element as pivot @@ -643,9 +676,15 @@

    Source code for IQM_Vis.UI.experiment_mode

             # Return the position from where partition is done
             return self.comp_pointer + 1
    -
    [docs] def clicked_image(self, image_name, widget_name): +
    [docs] def clicked_image(self, image_name, widget_name): if self.able_to_click == False: return + if self.running_experiment == False: + return + self.click_counter += 1 + + self.widget_experiments['exp']['info'].setText(f'{self.exp_info_text} {self.click_counter+1}/{self.max_text}') + self.able_to_click = False # get comparison to pivot trans_str = image_name[len(self.image_name)+1:] @@ -659,20 +698,20 @@

    Source code for IQM_Vis.UI.experiment_mode

                     'widget': self.widget_experiments['exp'][widget_name]['data']}
             self.reset_clicked_image.emit(data)  # change to black image, after x amount of time will change to experimetn image
    -
    [docs] def click_completed(self): +
    [docs] def click_completed(self): # unlock the wait self.clicked_event.set()
    -
    [docs] def swap_inds(self, i, j): +
    [docs] def swap_inds(self, i, j): (self.experiment_transforms[i], self.experiment_transforms[j]) = (self.experiment_transforms[j], self.experiment_transforms[i])
    -
    [docs] def get_single_transform_im(self, single_trans_dict): +
    [docs] def get_single_transform_im(self, single_trans_dict): trans_name = list(single_trans_dict)[0] return image_utils.get_transform_image(self.data_store, {trans_name: self.checked_transformation_params[trans_name]}, single_trans_dict)
    -
    [docs] def change_experiment_images(self, A_trans, B_trans): +
    [docs] def change_experiment_images(self, A_trans, B_trans): A = A_trans['image'] B = B_trans['image'] @@ -686,7 +725,7 @@

    Source code for IQM_Vis.UI.experiment_mode

                 f'{self.image_name}-{save_utils.make_name_for_trans(B_trans)}')
    ''' UI ''' -
    [docs] def init_style(self, style='light', css_file=None): +
    [docs] def init_style(self, style='light', css_file=None): if css_file == None: dir = os.path.dirname(os.path.abspath(__file__)) # css_file = os.path.join(dir, 'style-light.css') @@ -698,7 +737,7 @@

    Source code for IQM_Vis.UI.experiment_mode

                 warnings.warn('Cannot load css style sheet - file not found')
    -
    [docs]class reset_image_widget_to_black(QObject): +
    [docs]class reset_image_widget_to_black(QObject): ''' change clicked image to black and pause ''' completed = pyqtSignal(float) @@ -709,7 +748,7 @@

    Source code for IQM_Vis.UI.experiment_mode

             self.black_array = np.zeros([100, 100, 3])
             # self.black_array[:, :, 1] = 1 # blue
     
    -
    [docs] @pyqtSlot(dict) +
    [docs] @pyqtSlot(dict) def change_to_solid(self, data): t_start = time.time() image_display_size = data['image_display_size'] @@ -739,7 +778,7 @@

    Source code for IQM_Vis.UI.experiment_mode

             # all complete so send signal 
             self.completed.emit(1.0)
    -
    [docs] def stop(self): +
    [docs] def stop(self): self.running = False
    def __del__(self): @@ -747,7 +786,7 @@

    Source code for IQM_Vis.UI.experiment_mode

             self.stop()
    -
    [docs]def sort_list(list1, list2): +
    [docs]def sort_list(list1, list2): # sort list1 based on list2 inds = np.argsort(list2) sorted_list1 = [] diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_JND.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_JND.html new file mode 100644 index 0000000..e92c412 --- /dev/null +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/experiment_mode_JND.html @@ -0,0 +1,791 @@ + + + + + + IQM_Vis.UI.experiment_mode_JND — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + + +
    • +
    • +
    +
    +
    +
    +
    + +

    Source code for IQM_Vis.UI.experiment_mode_JND

    +'''
    +create experiment window JND
    +'''
    +# Author: Matt Clifford <matt.clifford@bristol.ac.uk>
    +# License: BSD 3-Clause License
    +
    +import os
    +import random
    +import threading
    +import warnings
    +import time
    +from functools import partial
    +import copy
    +
    +import numpy as np
    +import pandas as pd
    +from PyQt6.QtWidgets import (QMainWindow,
    +                             QHBoxLayout,
    +                             QVBoxLayout,
    +                             QTabWidget,
    +                             QApplication,
    +                             QPushButton,
    +                             QLabel,
    +                             QMessageBox)
    +
    +from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot, QObject, QThread
    +from PyQt6.QtGui import QShortcut, QKeySequence
    +
    +import IQM_Vis
    +from IQM_Vis.UI.custom_widgets import ClickLabel
    +from IQM_Vis.UI import utils
    +from IQM_Vis.utils import gui_utils, plot_utils, image_utils, save_utils
    +
    +
    +
    [docs]class make_experiment_JND(QMainWindow): + '''https://www.verywellmind.com/what-is-the-just-noticeable-difference-2795306''' + saved_experiment = pyqtSignal(str) + reset_clicked_image = pyqtSignal(dict) + + def __init__(self, + checked_transformation_params, + data_store, + image_display_size, + rgb_brightness, + display_brightness, + default_save_dir=save_utils.DEFAULT_SAVE_DIR, + dataset_name='dataset1', + image_preprocessing='None', + image_postprocessing='None', + lower_im_num=1, + upper_im_num=1, + checked_metrics={}): + super().__init__() + self.checked_transformation_params = checked_transformation_params + if self.checked_transformation_params == {}: + return + elif len(self.checked_transformation_params) != 1: + raise AttributeError(f'Just Noticable difference experiment can only use one transform/distortion') + + self.checked_metrics = checked_metrics + self.data_store = copy.copy(data_store) + self.image_display_size = image_display_size + self.rgb_brightness = rgb_brightness + self.display_brightness = display_brightness + self.default_save_dir = os.path.join(default_save_dir, 'JND') + self.dataset_name = dataset_name + self.default_save_dir = os.path.join( + self.default_save_dir, self.dataset_name) + self.dataset_name = dataset_name + self.curr_im_ind = 0 + self.save_im_format = '.png' + self.lower_im_num = lower_im_num + self.upper_im_num = upper_im_num + + self.processing = {'pre': image_preprocessing, + 'post': image_postprocessing} + + # self.image_change_worker = reset_image_widget_to_black() + # self.image_change_worker.completed.connect(self.click_completed) + # self.image_worker_thread = QThread() + # self.reset_clicked_image.connect(self.image_change_worker.change_to_solid) + # self.image_change_worker.moveToThread(self.image_worker_thread) + # self.image_worker_thread.start() + + self.stop_event = threading.Event() + self.saved = False + self.quit_experiment = False + self._init_experiment_window_widgets() + self.experiment_layout() + self.setCentralWidget(self.experiments_tab) + self.setWindowTitle('JND Experiment') + # move to centre of the screen + qr = self.frameGeometry() + cp = self.screen().availableGeometry().center() + qr.moveCenter(cp) + self.move(qr.topLeft()) + # wait for the window to show before loading images + # self.show() + QApplication.processEvents() + # get all images and show them + self.get_all_images() + + # make unique save dir name + self.new_save_dir = self.get_unique_save_dir() + + self.show_all_images() + self.get_metric_scores() + +
    [docs] def closeEvent(self, event): + # Ask for confirmation if not saved + if not self.saved: + answer = QMessageBox.question(self, + "Confirm Exit...", + "Are you sure you want to exit?\nAll unsaved data will be lost.", + QMessageBox.StandardButton.No | QMessageBox.StandardButton.Yes, + QMessageBox.StandardButton.Yes) + else: + answer = QMessageBox.StandardButton.Yes + + event.ignore() + if answer == QMessageBox.StandardButton.Yes: + self.quit_experiment = True + if hasattr(self, 'range_worker'): + self.range_worker.stop() + if hasattr(self, 'image_worker_thread'): + if self.image_worker_thread.isRunning(): + self.image_worker_thread.quit() + self.image_worker_thread.wait() + self.image_change_worker.stop() + self.stop_event.set() + # self.clicked_event.set() + event.accept()
    + +
    [docs] def quit(self): + self.close()
    + +
    [docs] def show_all_images(self, tab='setup'): + self.widget_experiments['setup']['text'].setText(f''' + JND Experiment to be setup with the above images using the settings: + Save folder: {self.default_save_dir} + Image Display Size: {self.image_display_size} + Image Calibration: + Max RGB Brightness: {self.rgb_brightness} + Max Display Brightness: {self.display_brightness} + + Number of Comparisons: {int(len(self.experiment_transforms))} + + Click the Setup button to setup up the experiment and hand over to the test subject. + ''') + self.widget_experiments[tab]['images'].axes.axis('off') + rows = min(int(len(self.experiment_transforms)**0.5), 5) + cols = min(int(np.ceil(len(self.experiment_transforms)/rows)), 5) + for i, trans in enumerate(self.experiment_transforms): + if i == rows*cols: + break + ax = self.widget_experiments[tab]['images'].figure.add_subplot( + rows, cols, i+1) + ax.imshow(image_utils.calibrate_brightness( + trans['image'], self.rgb_brightness, self.display_brightness, ubyte=False)) + if tab == 'final': + ax.set_ylabel('') + ax.set_xlabel(trans['user_decision'], fontsize=6) + ax.set_xticks([]) + ax.set_yticks([]) + else: + ax.axis('off') + ax.set_title(save_utils.make_name_for_trans(trans), fontsize=6)
    + # self.widget_experiments[tab]['images'].figure.tight_layout() + + # time.sleep(5) + # QApplication.processEvents() + +
    [docs] def get_all_images(self): + + # get all the transform values + self.experiment_trans_params = plot_utils.get_all_single_transform_params( + self.checked_transformation_params, num_steps='from_dict') + + # save the experiment ordering before reordering (for saving to csv col ordering) + self.original_params_order = [] + for single_trans in self.experiment_trans_params: + trans_name = list(single_trans.keys())[0] + param = single_trans[trans_name] + data = {'transform_name': trans_name, + 'transform_value': param} + self.original_params_order.append( + save_utils.make_name_for_trans(data)) + + + # all images in the dataset + self.all_ref_images = {} + self.experiment_transforms = [] + + for i in range(max(self.lower_im_num-1, 0), min(len(self.data_store), self.upper_im_num)): + # load the image in dataset + self.data_store[i] + # REFERENCE image + ref_image = self.data_store.get_reference_image() + ref_name = self.data_store.get_reference_image_name() + # save name and image + self.all_ref_images[ref_name] = ref_image + # if hasattr(self.data_store, 'get_reference_unprocessed'): + # self.ref_image_unprocessed = self.data_store.get_reference_unprocessed() + # get all transformed images + for single_trans in self.experiment_trans_params: + trans_name = list(single_trans.keys())[0] + param = single_trans[trans_name] + img = self.get_single_transform_im(single_trans) + data = {'transform_name': trans_name, + 'transform_value': param, + 'image': img, + 'ref_name': ref_name} + self.experiment_transforms.append(data) + + # add reference image to list + data = {'transform_name': 'None', + 'transform_value': 'None', + 'image': ref_image, + 'ref_name': ref_name} + self.experiment_transforms.append(data) + + # update user + self.widget_experiments['setup']['text'].setText( + f'''Loading all images in the dataset {i+1}/{len(self.data_store)}''') + + # shuffle the images list + random.shuffle(self.experiment_transforms)
    + +
    [docs] def get_metric_scores(self, calc=False): + '''get IQM scores to save alongside the experiment for plotting/analysis purposes''' + self.IQM_scores_df = None + if len(self.checked_metrics) == 0: + return + if calc == True: + ''' this currently doesn't work and might be a bit taxing to do for all images''' + IQM_scores = {} + for data in self.experiment_transforms: + score_dict = self.data_store.get_metrics(transformed_image=data['image'], + metrics_to_use=self.checked_metrics) + scores = [] + metrics = [] + for name, score in score_dict.items(): + metrics.append(name) + scores.append(float(score)) + IQM_scores[save_utils.make_name_for_trans(data)] = scores + IQM_scores['IQM'] = metrics + self.IQM_scores_df = pd.DataFrame.from_dict(IQM_scores) + self.IQM_scores_df.set_index('IQM', inplace=True)
    + + def _init_experiment_window_widgets(self): + self.widget_experiments = {'exp': {}, 'preamble': {}, 'setup': {}, 'final':{}} + ''' setup tab ''' + self.widget_experiments['setup']['start_button'] = QPushButton( + 'Setup', self) + self.widget_experiments['setup']['start_button'].clicked.connect(self.setup_experiment) + self.widget_experiments['setup']['quit_button'] = QPushButton('Quit', self) + self.widget_experiments['setup']['quit_button'].clicked.connect(self.quit) + QShortcut(QKeySequence("Ctrl+Q"), + self.widget_experiments['setup']['quit_button'], self.quit) + self.widget_experiments['setup']['images'] = gui_utils.MplCanvas(size=None) + self.widget_experiments['setup']['text'] = QLabel(self) + self.widget_experiments['setup']['text'].setText(f'''Loading all images in the dataset''') + # self.widget_experiments['setup']['text'].setAlignment( + # Qt.AlignmentFlag.AlignCenter) + + ''' info tab ''' + self.widget_experiments['preamble']['text'] = QLabel(self) + self.widget_experiments['preamble']['text'].setText(''' + For this experiment you will be shown a reference image a comparison image. + + You need to click SAME or DIFFERENT whether you think the comparison image is the same or different to the reference image. + + + + + When you are ready, click the Start button to begin the experiment ''') + self.running_experiment = False + self.widget_experiments['preamble']['start_button'] = QPushButton('Start', self) + self.widget_experiments['preamble']['start_button'].clicked.connect(self.toggle_experiment) + + self.widget_experiments['preamble']['quit_button'] = QPushButton('Quit', self) + self.widget_experiments['preamble']['quit_button'].clicked.connect( + self.quit) + QShortcut(QKeySequence("Ctrl+Q"), + self.widget_experiments['preamble']['quit_button'], self.quit) + + ''' experiment tab ''' + self.exp_info_text = 'Click same or different for the two images shown (or press the S or D key)' + self.widget_experiments['exp']['info'] = QLabel(self.exp_info_text, self) + for image in ['Reference', 'Comparison']: + self.widget_experiments['exp'][image] = {} + self.widget_experiments['exp'][image]['data'] = ClickLabel(image) + self.widget_experiments['exp'][image]['data'].setAlignment(Qt.AlignmentFlag.AlignCenter) + # image label + self.widget_experiments['exp'][image]['label'] = QLabel(image, self) + self.widget_experiments['exp'][image]['label'].setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.widget_experiments['exp']['same_button'] = QPushButton('SAME', self) + self.widget_experiments['exp']['same_button'].clicked.connect(partial(self.user_decision, 'same')) + self.widget_experiments['exp']['diff_button'] = QPushButton('DIFFERENT', self) + self.widget_experiments['exp']['diff_button'].clicked.connect(partial(self.user_decision, 'diff')) + self.widget_experiments['exp']['quit_button'] = QPushButton('Quit', self) + self.widget_experiments['exp']['quit_button'].clicked.connect(self.quit) + QShortcut(QKeySequence("S"), self.widget_experiments['exp']['same_button'], partial( + self.user_decision, 'same')) + QShortcut(QKeySequence("D"), self.widget_experiments['exp']['same_button'], partial( + self.user_decision, 'diff')) + QShortcut(QKeySequence("Ctrl+Q"), + self.widget_experiments['exp']['quit_button'], self.quit) + + ''' finish tab ''' + self.widget_experiments['final']['order_text'] = QLabel( + 'Experiment Results:', self) + self.widget_experiments['final']['images'] = gui_utils.MplCanvas(size=None) + self.widget_experiments['final']['quit_button'] = QPushButton('Quit', self) + self.widget_experiments['final']['quit_button'].clicked.connect( + self.quit) + QShortcut(QKeySequence("Ctrl+Q"), + self.widget_experiments['final']['quit_button'], self.quit) + self.widget_experiments['final']['save_label'] = QLabel('Not saved yet', self) + +
    [docs] def experiment_layout(self): + ''' setup ''' + experiment_text = QVBoxLayout() + experiment_text.addWidget(self.widget_experiments['setup']['text']) + experiment_setup_buttons = QHBoxLayout() + experiment_setup_buttons.addWidget( + self.widget_experiments['setup']['start_button']) + experiment_setup_buttons.addWidget( + self.widget_experiments['setup']['quit_button']) + experiment_text.addLayout(experiment_setup_buttons) + + experiment_mode_setup = QVBoxLayout() + experiment_mode_setup.addWidget(self.widget_experiments['setup']['images']) + experiment_mode_setup.addLayout(experiment_text) + experiment_mode_setup.setAlignment(Qt.AlignmentFlag.AlignCenter) + experiment_mode_setup.addStretch() + + + ''' info ''' + experiment_info_buttons = QHBoxLayout() + experiment_info_buttons.addWidget( + self.widget_experiments['preamble']['start_button']) + experiment_info_buttons.addWidget( + self.widget_experiments['preamble']['quit_button']) + + experiment_mode_info = QVBoxLayout() + experiment_mode_info.addWidget( + self.widget_experiments['preamble']['text']) + experiment_mode_info.setAlignment(Qt.AlignmentFlag.AlignCenter) + experiment_mode_info.addLayout(experiment_info_buttons) + + ''' experiment ''' + same_diff_button = QHBoxLayout() + same_diff_button.addWidget(self.widget_experiments['exp']['same_button']) + same_diff_button.addWidget(self.widget_experiments['exp']['diff_button']) + same_diff_button.setAlignment(Qt.AlignmentFlag.AlignCenter) + + info = QVBoxLayout() + info.addWidget(self.widget_experiments['exp']['info']) + info.setAlignment(Qt.AlignmentFlag.AlignCenter) + + quit_button = QVBoxLayout() + quit_button.addWidget(self.widget_experiments['exp']['quit_button']) + quit_button.setAlignment(Qt.AlignmentFlag.AlignCenter) + + layouts = [] + for im in ['Reference', 'Comparison']: + _layout = QVBoxLayout() + for _, widget in self.widget_experiments['exp'][im].items(): + _layout.addWidget(widget) + _layout.setAlignment(Qt.AlignmentFlag.AlignTop) + layouts.append(_layout) + + # add images to h box + experiment_images = QHBoxLayout() + for layout in layouts: + experiment_images.addLayout(layout) + experiment_images.setAlignment(Qt.AlignmentFlag.AlignTop) + + run_experiment = QVBoxLayout() + run_experiment.addLayout(info) + run_experiment.addLayout(same_diff_button) + run_experiment.addLayout(experiment_images) + run_experiment.addLayout(quit_button) + run_experiment.setAlignment(Qt.AlignmentFlag.AlignCenter) + + ''' finished ''' + finish_experiment = QVBoxLayout() + finish_experiment.addWidget(self.widget_experiments['final']['order_text']) + finish_experiment.addWidget(self.widget_experiments['final']['images']) + finish_experiment.addWidget(self.widget_experiments['final']['save_label']) + finish_experiment.addWidget(self.widget_experiments['final']['quit_button']) + finish_experiment.setAlignment(Qt.AlignmentFlag.AlignCenter) + finish_experiment.addStretch() + + self.experiments_tab = QTabWidget() + for tab_layout, tab_name in zip([experiment_mode_setup, experiment_mode_info, run_experiment, finish_experiment], + ['setup', 'info', 'run', 'finish']): + utils.add_layout_to_tab(self.experiments_tab, tab_layout, tab_name)
    + # experiment_mode_layout = QVBoxLayout() + # experiment_mode_layout.addWidget(self.experiments_tab) + # return experiment_mode_layout + + ''' experiment running functions''' +
    [docs] def setup_experiment(self): + self.experiments_tab.setCurrentIndex(1) + self.experiments_tab.setTabEnabled(0, False) + self.experiments_tab.setTabEnabled(2, False) + self.experiments_tab.setTabEnabled(3, False)
    + +
    [docs] def toggle_experiment(self): + if self.running_experiment: + self.reset_experiment() + self.experiments_tab.setTabEnabled(0, True) + self.experiments_tab.setTabEnabled(1, True) + self.running_experiment = False + # self.widget_experiments['preamble']['start_button'].setText('Start') + + else: + self.experiments_tab.setTabEnabled(2, True) + self.start_experiment() + self.experiments_tab.setTabEnabled(0, False) + self.experiments_tab.setTabEnabled(1, False) + # self.widget_experiments['preamble']['start_button'].setText('Reset') + self.running_experiment = True
    + +
    [docs] def reset_experiment(self): + self.experiments_tab.setCurrentIndex(1) + self.init_style('light')
    + +
    [docs] def start_experiment(self): + self.init_style('dark') + self.experiments_tab.setCurrentIndex(2) + + # Display reference image + gui_utils.change_im(self.widget_experiments['exp']['Reference']['data'], + self.all_ref_images[self.experiment_transforms[self.curr_im_ind]['ref_name']], + resize=self.image_display_size, + rgb_brightness=self.rgb_brightness, + display_brightness=self.display_brightness) + + # exp data holder + self.time0 = time.time() + self.curr_im_ind = 0 + # Display comparison image + gui_utils.change_im(self.widget_experiments['exp']['Comparison']['data'], + self.experiment_transforms[self.curr_im_ind]['image'], + resize=self.image_display_size, + rgb_brightness=self.rgb_brightness, + display_brightness=self.display_brightness)
    + +
    [docs] def finish_experiment(self): + self.experiments_tab.setTabEnabled(3, True) + self.show_all_images(tab='final') + self.init_style('light') + self.experiments_tab.setCurrentIndex(3) + # self.experiments_tab.setTabEnabled(2, False) + + # save experiment to file + self.save_experiment() + if self.saved == True: + self.widget_experiments['final']['save_label'].setText(f'Saved to {self.default_save_dir}') + else: + self.widget_experiments['final']['save_label'].setText(f'Save failed to {self.default_save_dir}')
    + +
    [docs] def get_trans_funcs(self): + # get the current transform functions + trans_funcs = {} + for single_trans in self.experiment_trans_params: + trans_name = list(single_trans.keys())[0] + trans_funcs[trans_name] = self.checked_transformation_params[trans_name]['function'] + return trans_funcs
    + +
    [docs] def get_unique_save_dir(self): + '''get directory that is unique based on if it's the same experiment or not''' + trans_funcs = self.get_trans_funcs() + + # get a unique directory (same image with diff trans need a new dir) + i = 1 + unique_dir_found = False + new_dir = True + while unique_dir_found == False: + exp_save_dir = os.path.join(self.default_save_dir, f'experiment-{i}') + if os.path.exists(exp_save_dir): + # get transform funcs and params + exp_trans_params = save_utils.load_obj( + os.path.join(exp_save_dir, 'transforms', 'transform_params.pkl')) + exp_trans_funcs = save_utils.load_obj( + os.path.join(exp_save_dir, 'transforms', 'transform_functions.pkl')) + + # get ref image names + im_names = save_utils.get_JND_image_names(exp_save_dir) + im_names.sort() + curr_im_names = list(self.all_ref_images.keys()) + # add file extension to names + curr_im_names = [f'{name}{self.save_im_format}' for name in curr_im_names] + curr_im_names.sort() + + # get image processing saved params + processing_file = save_utils.get_image_processing_file( + exp_save_dir) + procesing_same = False + if os.path.exists(processing_file): + processing = save_utils.load_json_dict(processing_file) + if processing == self.processing: + procesing_same = True + + # check if experiment is the same + if ((exp_trans_params == self.original_params_order) + and (trans_funcs == exp_trans_funcs) + and procesing_same + and (im_names == curr_im_names)): + self.default_save_dir = exp_save_dir + unique_dir_found = True + new_dir = False + else: + i += 1 + else: + self.default_save_dir = exp_save_dir + unique_dir_found = True + + return new_dir
    + +
    [docs] def save_experiment(self): + # get the current transform functions + trans_funcs = self.get_trans_funcs() + + # make all the dirs and subdirs + os.makedirs(self.default_save_dir, exist_ok=True) + os.makedirs(os.path.join(save_utils.get_JND_ref_image_dir(self.default_save_dir)), exist_ok=True) + os.makedirs(os.path.join(self.default_save_dir, 'images'), exist_ok=True) + os.makedirs(os.path.join(self.default_save_dir, 'transforms'), exist_ok=True) + + if not os.path.exists(save_utils.get_JND_ref_image_unprocessed_dir(self.default_save_dir)): + if hasattr(self, 'ref_image_unprocessed'): + image_utils.save_image(self.ref_image_unprocessed, + save_utils.get_original_unprocessed_image_file(self.default_save_dir)) + if self.new_save_dir == True: + # save experiment images + for name, im in self.all_ref_images.items(): + image_utils.save_image(im, + os.path.join(save_utils.get_JND_ref_image_dir(self.default_save_dir), + f'{name}{self.save_im_format}')) + for trans in self.experiment_transforms: + image_utils.save_image( + trans['image'], + os.path.join(self.default_save_dir, + 'images', + f"{save_utils.make_name_for_trans(trans)}-{trans['ref_name']}{self.save_im_format}", + )) + # save the transformations + save_utils.save_obj( + save_utils.get_transform_params_file(self.default_save_dir), + self.original_params_order) + save_utils.save_obj( + save_utils.get_transform_functions_file(self.default_save_dir), + dict(sorted(trans_funcs.items()))) + # save the image pre/post processing options + save_utils.save_json_dict( + save_utils.get_image_processing_file(self.default_save_dir), + self.processing) + + # save the experiment results + csv_file = save_utils.save_JND_experiment_results( + self.experiment_transforms, + self.default_save_dir, + self.IQM_scores_df) + self.saved = True + self.saved_experiment.emit(csv_file)
    + +
    [docs] def user_decision(self, decision): + if decision not in ['same', 'diff']: + raise ValueError(f'user decision for JND experiment needs to be same or diff') + # make sure we don't go beyond the data set with acciental key presses + if self.curr_im_ind >= len(self.experiment_transforms): + return + # save time it took + + # log decision + self.experiment_transforms[self.curr_im_ind]['user_decision'] = decision + self.experiment_transforms[self.curr_im_ind]['time_taken'] = time.time()-self.time0 + + # move to next image + self.curr_im_ind += 1 + if self.curr_im_ind == len(self.experiment_transforms): + self.finish_experiment() + else: + # Display reference image + gui_utils.change_im(self.widget_experiments['exp']['Reference']['data'], + self.all_ref_images[self.experiment_transforms[self.curr_im_ind]['ref_name']], + resize=self.image_display_size, + rgb_brightness=self.rgb_brightness, + display_brightness=self.display_brightness) + # Comparison image + gui_utils.change_im(self.widget_experiments['exp']['Comparison']['data'], + self.experiment_transforms[self.curr_im_ind]['image'], + resize=self.image_display_size, + rgb_brightness=self.rgb_brightness, + display_brightness=self.display_brightness) + self.widget_experiments['exp']['info'].setText( + f'{self.exp_info_text} {self.curr_im_ind+1}/{len(self.experiment_transforms)}') + + # reset time + self.time0 = time.time()
    + +
    [docs] def get_single_transform_im(self, single_trans_dict): + trans_name = list(single_trans_dict)[0] + return image_utils.get_transform_image(self.data_store, + {trans_name: self.checked_transformation_params[trans_name]}, + single_trans_dict)
    + + ''' UI ''' +
    [docs] def init_style(self, style='light', css_file=None): + if css_file == None: + dir = os.path.dirname(os.path.abspath(__file__)) + # css_file = os.path.join(dir, 'style-light.css') + css_file = os.path.join(dir, f'style-{style}.css') + if os.path.isfile(css_file): + with open(css_file, 'r') as file: + self.setStyleSheet(file.read()) + else: + warnings.warn('Cannot load css style sheet - file not found')
    + + +
    [docs]class reset_image_widget_to_black(QObject): + ''' change clicked image to black and pause ''' + completed = pyqtSignal(float) + + def __init__(self, time=0.1): + super().__init__() + self.running = True + self.time = time + self.black_array = np.zeros([100, 100, 3]) + # self.black_array[:, :, 1] = 1 # blue + +
    [docs] @pyqtSlot(dict) + def change_to_solid(self, data): + t_start = time.time() + image_display_size = data['image_display_size'] + widget = data['widget'] + # make clicked image black to show user + gui_utils.change_im(widget, + self.black_array, + resize=image_display_size) + # pause for half the time needed (will use the loop below to wait for full time and also see if image has turned black yet) + time.sleep(self.time/2) + m = 1 + t_time = time.time() - t_start + # wait until black image is shown + while (not (m == 0 or m == 63.75)) and (t_time < self.time): # 63.75 is when 4th channel is all ones , rest are 0 + time.sleep(self.time/10) + # get the image data from the widget to check if it's been made black yet + pixmap = widget.pixmap() + q_img = pixmap.toImage() + ptr = q_img.bits() + ptr = q_img.constBits() + ptr.setsize(q_img.sizeInBytes()) + np_img = np.array(ptr, copy=False).reshape( + q_img.height(), q_img.width(), 4) + m = np_img.mean() + # calc if the time is up yet + t_time = time.time() - t_start + # all complete so send signal + self.completed.emit(1.0)
    + +
    [docs] def stop(self): + self.running = False
    + + def __del__(self): + # close app upon garbage collection + self.stop()
    +
    + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/images.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/images.html index 129db42..6c27b6c 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/images.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/images.html @@ -94,6 +94,7 @@

    Source code for IQM_Vis.UI.images

     # License: BSD 3-Clause License
     
     import os
    +from functools import partial
     import imghdr
     import glob
     import numpy as np
    @@ -101,7 +102,7 @@ 

    Source code for IQM_Vis.UI.images

     from PyQt6.QtWidgets import QApplication, QFileDialog
     from PyQt6.QtCore import pyqtSignal, QThread
     import IQM_Vis
    -from IQM_Vis.utils import gui_utils, plot_utils, image_utils
    +from IQM_Vis.utils import gui_utils, plot_utils, image_utils, save_utils
     
     # sub class used by IQM_Vis.main.make_app to control all of the image widgets
     
    [docs]class images: @@ -334,9 +335,9 @@

    Source code for IQM_Vis.UI.images

                     "CSV Files (*.csv)",)
             except:
                 return
    -        self._change_human_exp(file)
    + self._change_human_exp_2AFC(file)
    - def _change_human_exp(self, file, change_image=True): + def _change_human_exp_2AFC(self, file, change_image=True): # load image if change_image == True: self._load_experiment_image(os.path.dirname(file)) @@ -356,16 +357,78 @@

    Source code for IQM_Vis.UI.images

             self._load_experiment_extras(os.path.dirname(file))
             self.update_status_bar(f'Loaded experiment file: {file}', 10000)
     
    +    def _change_human_exp_JND(self, file):
    +        # load the csv human scores file and take mean of all experiments
    +        self.update_status_bar(f'Loading experiment file: {file}', 10000)
    +        if os.path.exists(file):
    +            # now extract all the useful data from the csv
    +            df = pd.read_csv(file)
    +            # unique values for transform in df
    +            transforms = list(df['Transform'].unique())
    +            if 'None<>None' in transforms:
    +                transforms.remove('None<>None')
    +            trans_types = {}
    +            params = {}
    +            for single_trans in transforms:
    +                trans, trans_value = gui_utils.get_trans_dict_from_str(
    +                    single_trans)
    +                trans_types[trans] = 1 # just to get the keys
    +                params[trans_value] = 1 # just to get the keys
    +
    +            # currently only one transformation type is supported
    +            if len(trans_types) > 1:
    +                self.update_status_bar(
    +                    'Warning: More than one transformation type in JND file', 10000)
    +                return
    +            
    +            transform_name = list(trans_types.keys())[0]
    +            self.current_JND_transform = transform_name
    +            params = list(params.keys())
    +            params.sort()
    +
    +            # get the decisions for each parameter
    +            decisions = {}
    +            for param in params:
    +                name = save_utils.make_name_for_trans({'transform_name': transform_name, 
    +                                                       'transform_value': param})
    +                user_choices = df[df['Transform']
    +                                      == f'{name}']['UserDecision'].values
    +                # convert to plotable format
    +                values = []
    +                for choice in user_choices:
    +                    if choice == 'diff':
    +                        values.append(1)
    +                    elif choice == 'same':
    +                        values.append(0)
    +                    else:
    +                        values.append(-1)
    +                decisions[param] = values
    +            
    +            self.JND_trans = transform_name
    +            self.human_experiment_scores_JND = []
    +            for i, data_store in enumerate(self.data_stores):
    +                self.human_experiment_scores_JND.append(decisions)
    +            self.human_scores_JND_file = file
    +        else:
    +            self.update_status_bar(f'No experiment file: {file}', 10000)
    +            return
    +        self._load_experiment_extras_JND(os.path.dirname(file))
    +        self.update_status_bar(f'Loaded experiment file: {file}', 10000)
    +
         def _load_experiment(self, dir, change_image=True):
             file = IQM_Vis.utils.save_utils.get_human_scores_file(dir)
    -        self._change_human_exp(file, change_image=change_image)
    +        self._change_human_exp_2AFC(file, change_image=change_image)
    +
    +    def _load_experiment_JND(self, dir):
    +        file = IQM_Vis.utils.save_utils.get_human_scores_file(dir)
    +        self._change_human_exp_JND(file)
     
     
    [docs] def load_experiment_from_dir(self): # get the file opener for the user try: start_dir = IQM_Vis.utils.save_utils.DEFAULT_SAVE_DIR dir = QFileDialog.getExistingDirectory(self, - 'Choose Experiment Folder', + 'Choose 2AFC Experiment Folder', start_dir) except: return @@ -374,6 +437,20 @@

    Source code for IQM_Vis.UI.images

                 return   
             self._load_experiment(dir)
    +
    [docs] def load_experiment_from_dir_JND(self): + # get the file opener for the user + try: + start_dir = IQM_Vis.utils.save_utils.DEFAULT_SAVE_DIR + dir = QFileDialog.getExistingDirectory(self, + 'Choose JND Experiment Folder', + start_dir) + except: + return + + if dir == '': + return + self._load_experiment_JND(dir)
    + def _load_experiment_image(self, dir): # load image if available already exp_image_name = IQM_Vis.utils.save_utils.get_image_name_from_human_scores(dir) @@ -420,6 +497,33 @@

    Source code for IQM_Vis.UI.images

             self.display_metric_correlation_plot()
             self.tabs['graph'].setCurrentIndex(3)
     
    +    def _load_experiment_extras_JND(self, dir):
    +        # load the image processing if available
    +        processing_file = IQM_Vis.utils.save_utils.get_image_processing_file(dir)
    +        if os.path.exists(processing_file):
    +            processing = IQM_Vis.utils.save_utils.load_json_dict(
    +                processing_file)
    +            updated = False
    +            for name, options_var, change_func in zip(['pre', 'post'], 
    +                                                      [self.pre_processing_options, self.post_processing_options], 
    +                                                      [self.change_pre_processing, self.change_post_processing]):
    +                if processing[name] in options_var:
    +                    if processing[name] != self.widget_settings[f'image_{name}_processing']['widget'].currentText():
    +                        self.widget_settings[f'image_{name}_processing']['widget'].setCurrentText(
    +                            processing[name])
    +                        change_func()
    +                        updated = True
    +                else:
    +                    self.update_status_bar(
    +                        f'Could not load image setting: {processing[name]}')
    +            if updated == True:
    +                self.update_image_settings()
    +        else:
    +            self.update_status_bar(f'Warning: No settings file ({processing_file}), make sure image pre/post processing settings are correct')
    +
    +        self.display_metric_JND_plot()
    +        self.tabs['graph'].setCurrentIndex(4)
    +
         '''
         metric updaters
         '''
    @@ -599,10 +703,14 @@ 

    Source code for IQM_Vis.UI.images

             # show fig in new window
             gui_utils.matplotlib.pyplot.show()
    +
    [docs] def get_export_dir(self, i): + image_name = f"{self.data_stores[i].get_reference_image_name()}" + save_path = os.path.join(self.default_save_dir, 'exports', image_name) + return save_path
    +
    [docs] def set_save_dir_mpl(self, i=0): # set the default save path - image_name = f"{self.data_stores[i].get_reference_image_name()}-export" - save_path = os.path.join(self.default_save_dir, image_name) + save_path = self.get_export_dir(i) if not os.path.exists(save_path): os.makedirs(save_path) gui_utils.matplotlib.rcParams['savefig.directory'] = save_path
    @@ -610,6 +718,57 @@

    Source code for IQM_Vis.UI.images

         '''
         metric correlation plots
         '''
    +
    [docs] def display_metric_JND_plot(self): + for i, data_store in enumerate(self.data_stores): + axes = self.widget_row[i]['metrics']['JND']['data'] + all = {} # to calucalte std of each + for val, decisions in self.human_experiment_scores_JND[i].items(): + for decision in decisions: + if val in all.keys(): + all[val].append(decision) + else: + all[val] = [decision] + + # calculate mean and std decision of each val + x = [] + y = [] + e = [] + labels = [] + for val, decisions in all.items(): + x.append(val) + y.append(np.mean(decisions)) + e.append(np.std(decisions)) + labels.append(f'{self.JND_trans}={val}') + + sp = plot_utils.scatter_plotter(axes, + x_label=f'{self.current_JND_transform} Value', + y_label='User Decision') + sp.plot(x, y, annotations=labels, error=e) + + # # make interactive hover for points + # annot = sp.ax.axes.annotate("", xy=(0, 0), xytext=(0, 0), textcoords="offset points", + # bbox=dict(boxstyle="round", fc="w"), + # arrowprops=dict(arrowstyle="->") + # ) + # annot.set_visible(False) + # sp.ax.figure.canvas.mpl_connect( + # "motion_notify_event", partial(plot_utils.hover_scatter, sp, annot)) + # sp.ax.figure.canvas.mpl_connect( + # "pick_event", partial(plot_utils.click_scatter, sp, plot_utils.change_trans_value_signal)) + + + # sp = plot_utils.scatter_plotter(axes, + # x_label=f'{self.current_JND_transform} Value', + # y_label='User Decision') + # sp.plot(x, y) + sp.show()
    + + # ax.scatter(x, y) + # ax.set_xlabel(f'{self.current_JND_transform} Value') + # ax.set_ylabel('User Decision') + # # ax.set_title(f'{self.current_JND_transform} vs User Decision') + # plot.show() +
    [docs] def display_metric_correlation_plot(self): if self.checked_metrics == []: for i, data_store in enumerate(self.data_stores): diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/layout.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/layout.html index 7250ab1..56807d5 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/layout.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/layout.html @@ -201,6 +201,19 @@

    Source code for IQM_Vis.UI.layout

                     '''load experiment'''
                     correlation_graph.addWidget(self.widget_controls['button']['load_exp'])
                     utils.add_layout_to_tab(self.tabs['graph'], correlation_graph, 'Correlation')
    +            if 'JND' in self.widget_row[i]['metrics'].keys():
    +                JND_graph = QVBoxLayout()
    +                JND_graph.addWidget(self.widget_row[i]['metrics']['JND']['label'])
    +                graph = QGridLayout()
    +                graph.addWidget(self.widget_row[i]['metrics']['JND']['data'], 0, 0, im_height, im_width)
    +                JND_graph.addLayout(graph)  # need for matplotlib? - test this...    (grid)
    +                '''graph controls''' # will add to last one since there is one widget to control all
    +                graph_controls = QHBoxLayout()
    +                JND_graph.addLayout(graph_controls)
    +                '''load experiment'''
    +                JND_graph.addWidget(self.widget_controls['button']['load_exp_JND'])
    +                utils.add_layout_to_tab(self.tabs['graph'], JND_graph, 'JND')
    +
                 graph_layouts.addWidget(self.tabs['graph'])
                 graph_layouts.addStretch()
     
    @@ -281,9 +294,31 @@ 

    Source code for IQM_Vis.UI.layout

             save_button_exp.addWidget(self.widget_controls['button']['exp_change_save'])
             save_button_exp.addStretch()
             experiment_controls.addLayout(save_button_exp)
    +        # Dataset Name
    +        dataset_name_exp = QHBoxLayout()
    +        dataset_name_exp.addWidget(
    +            self.widget_controls['label']['exp_change_dataset_name'])
    +        dataset_name_exp.addWidget(
    +            self.widget_controls['button']['exp_change_dataset_name'])
    +        dataset_name_exp.addStretch()
    +        experiment_controls.addLayout(dataset_name_exp)
    +        # Dataset Range nums
    +        dataset_range_exp = QHBoxLayout()
    +        dataset_range_exp.addWidget(
    +            self.widget_controls['label']['exp_im_nums'])
    +        dataset_range_exp.addWidget(
    +            self.widget_controls['label']['range_edit_lower'])
    +        dataset_range_exp.addWidget(
    +            self.widget_controls['label']['exp_im_nums_dash'])
    +        dataset_range_exp.addWidget(
    +            self.widget_controls['label']['range_edit_upper'])
    +        dataset_range_exp.addStretch()
    +        experiment_controls.addLayout(dataset_range_exp)
    +
             # run experiment button
             experiment_button = QHBoxLayout()
    -        experiment_button.addWidget(self.widget_controls['button']['launch_exp'])
    +        experiment_button.addWidget(self.widget_controls['button']['launch_exp_2AFC'])
    +        experiment_button.addWidget(self.widget_controls['button']['launch_exp_JND'])
             experiment_button.addStretch()
             experiment_controls.addLayout(experiment_button)
     
    diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/main.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/main.html
    index 1c9e2eb..d98716a 100644
    --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/main.html
    +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/main.html
    @@ -112,6 +112,7 @@ 

    Source code for IQM_Vis.UI.main

                      metric_params: dict={},
                      image_display_size=300,
                      default_save_dir=IQM_Vis.utils.save_utils.DEFAULT_SAVE_DIR,
    +                 default_dataset_name='dataset1',
                      restrict_options=None,
                      num_steps_range=11,
                      num_step_experiment=6,
    @@ -133,6 +134,7 @@ 

    Source code for IQM_Vis.UI.main

             self.metric_range_graph = metric_range_graph
             self.metric_params = metric_params
             self.default_save_dir = default_save_dir
    +        self.default_dataset_name = default_dataset_name
             self.restrict_options = restrict_options
     
             self.data_lims = {'fixed': 1, 'range_data': 1}
    @@ -424,7 +426,6 @@ 

    Source code for IQM_Vis.UI.main

             self.widget_controls['label']['exp_change_save'].setText(f'Save Folder: {self.default_save_dir}')
             self.widget_controls['label']['export_change_save'].setText(f'Save Folder: {self.default_save_dir}')
    -
    [docs]def set_checked_menu_from_iterable(main_menu, iterable, name, action_store, connect_func, restrict_options=None): _menu = main_menu.addMenu(name) _menu.triggered.connect(connect_func) diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/widgets.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/widgets.html index b0bf33b..80bc117 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/widgets.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/UI/widgets.html @@ -121,6 +121,8 @@

    Source code for IQM_Vis.UI.widgets

             '''
             create all the widgets we need and init params
             '''
    +        self.export_in_progress = False
    +        self.last_export = None
             self.tool_tip_style = """QToolTip {background-color: black; color: white; border: black solid 1px}"""
             # first setup the slider data
             self.sliders = {'transforms': {}, 'metric_params': {}}
    @@ -184,6 +186,7 @@ 

    Source code for IQM_Vis.UI.widgets

                     self.widget_row[i]['metrics']['range']['data'].setStyleSheet(self.tool_tip_style)
                     self.widget_row[i]['metrics']['range']['save_button'] = QPushButton('Adjust or Save', self)
                     self.widget_row[i]['metrics']['range']['save_button'].clicked.connect(partial(self.plot_metric_range_mlp, i))
    +            # correlation graphs
                 self.widget_row[i]['metrics']['correlation'] = {}
                 self.widget_row[i]['metrics']['correlation']['label'] = QLabel(self)
                 self.widget_row[i]['metrics']['correlation']['label'].setAlignment(Qt.AlignmentFlag.AlignCenter)
    @@ -191,6 +194,15 @@ 

    Source code for IQM_Vis.UI.widgets

                 self.widget_row[i]['metrics']['correlation']['data'] = gui_utils.MplCanvas(size=(self.graph_size/10, self.graph_size/10))
                 self.widget_row[i]['metrics']['correlation']['data'].setToolTip('Human scores versus IQMs.\nMean shown with points\nStandard deviation shown with bars.\nClick points to show image.')
                 self.widget_row[i]['metrics']['correlation']['data'].setStyleSheet(self.tool_tip_style)
    +            # JND graphs
    +            self.widget_row[i]['metrics']['JND'] = {}
    +            self.widget_row[i]['metrics']['JND']['label'] = QLabel(self)
    +            self.widget_row[i]['metrics']['JND']['label'].setAlignment(Qt.AlignmentFlag.AlignCenter)
    +            self.widget_row[i]['metrics']['JND']['label'].setText('Just Noticeable Difference')
    +            self.widget_row[i]['metrics']['JND']['data'] = gui_utils.MplCanvas(size=(self.graph_size/10, self.graph_size/10))
    +            self.widget_row[i]['metrics']['JND']['data'].setToolTip(
    +                'Just Noticeable Difference shows the perceivable effect of a distortion for a human subject.')
    +            self.widget_row[i]['metrics']['JND']['data'].setStyleSheet(self.tool_tip_style)
     
     
             '''buttons'''
    @@ -239,12 +251,19 @@ 

    Source code for IQM_Vis.UI.widgets

                     self.widget_controls['images'][im].mousePressEvent = partial(self.change_data_click_im, im)
                     self.widget_im_num_hash[im] = im # store the ind number of each im widget preview
     
    -        # launch experiment button
    -        self.widget_controls['button']['launch_exp'] = QPushButton('Run Experiment', self)
    -        self.widget_controls['button']['launch_exp'].clicked.connect(self.launch_experiment)
    -        # load experiment button
    +        # launch experiment buttons
    +        self.widget_controls['button']['launch_exp_2AFC'] = QPushButton('Run 2AFC Experiment', self)
    +        self.widget_controls['button']['launch_exp_2AFC'].setToolTip('Two Alternative Forced Choice Experiment')
    +        self.widget_controls['button']['launch_exp_2AFC'].clicked.connect(self.launch_experiment_2AFC)
    +        self.widget_controls['button']['launch_exp_JND'] = QPushButton('Run JND Experiment', self)
    +        self.widget_controls['button']['launch_exp_JND'].setToolTip('Just Noticeable Difference Experiment')
    +        self.widget_controls['button']['launch_exp_JND'].clicked.connect(self.launch_experiment_JND)
    +        # load 2AFC experiment button
             self.widget_controls['button']['load_exp'] = QPushButton('Load Experiment', self)
             self.widget_controls['button']['load_exp'].clicked.connect(self.load_experiment_from_dir)
    +        # load JNDexperiment button
    +        self.widget_controls['button']['load_exp_JND'] = QPushButton('Load Experiment', self)
    +        self.widget_controls['button']['load_exp_JND'].clicked.connect(self.load_experiment_from_dir_JND)
             # export images button
             self.widget_controls['button']['export_images'] = QPushButton('Export Images', self)
             self.widget_controls['button']['export_images'].clicked.connect(self.export_trans_images)
    @@ -316,9 +335,33 @@ 

    Source code for IQM_Vis.UI.widgets

                 self.widget_experiment_params[trans_name]['steps_edit'].setText(f"{self.num_step_experiment}")
             # change save folder button
             self.widget_controls['label']['exp_change_save'] = QLabel(self)
    -        self.widget_controls['label']['exp_change_save'].setText(f'Save Folder: {self.default_save_dir}')
    +        self.widget_controls['label']['exp_change_save'].setText(f'Root Save Folder: {self.default_save_dir}')
             self.widget_controls['button']['exp_change_save'] = QPushButton('Change', self)
             self.widget_controls['button']['exp_change_save'].clicked.connect(self.change_save_folder)
    +        # dataset name
    +        self.widget_controls['label']['exp_change_dataset_name'] = QLabel(self)
    +        self.widget_controls['label']['exp_change_dataset_name'].setText(f'Dataset Name (JND)')
    +        self.widget_controls['button']['exp_change_dataset_name'] = QLineEdit(self)
    +        self.widget_controls['button']['exp_change_dataset_name'].setText(
    +            self.default_dataset_name)
    +        self.widget_controls['button']['exp_change_dataset_name'].textChanged.connect(
    +            self.change_dataset_name)
    +        self.widget_controls['label']['exp_im_nums'] = QLabel(self)
    +        self.widget_controls['label']['exp_im_nums'].setText('Dataset Range (JND):')
    +        self.widget_controls['label']['exp_im_nums_dash'] = QLabel(self)
    +        self.widget_controls['label']['exp_im_nums_dash'].setText('-')
    +        self.widget_controls['label']['range_edit_lower'] = QLineEdit()
    +        self.widget_controls['label']['range_edit_lower'].setValidator(QIntValidator())
    +        self.exp_range_lower = 1
    +        self.widget_controls['label']['range_edit_lower'].setText(
    +            f"{self.exp_range_lower}")
    +        self.widget_controls['label']['range_edit_lower'].textChanged.connect(self.JND_dataset_range_lower)
    +        self.widget_controls['label']['range_edit_upper'] = QLineEdit()
    +        self.widget_controls['label']['range_edit_upper'].setValidator(QIntValidator())
    +        self.exp_range_upper = len(self.data_stores[0])
    +        self.widget_controls['label']['range_edit_upper'].setText(
    +            f"{self.exp_range_upper}")
    +        self.widget_controls['label']['range_edit_upper'].textChanged.connect(self.JND_dataset_range_upper)
     
             ''' export options '''
             self.widget_export = {}
    @@ -586,6 +629,36 @@ 

    Source code for IQM_Vis.UI.widgets

                 self.plot_data_lim = self.data_lims['fixed']
             self.redo_plots(calc_range=False)
    + +
    [docs] def change_dataset_name(self, txt): + ''' change the dataset_name we are using ''' + self.default_dataset_name = txt
    + +
    [docs] def JND_dataset_range_lower(self, txt): + ''' change the dataset_name we are using ''' + try: + self.exp_range_lower = int(txt) + except: + return + if self.exp_range_lower < 1: + self.exp_range_lower = 1 + elif self.exp_range_lower > self.exp_range_upper: + self.exp_range_lower = self.exp_range_upper + self.widget_controls['label']['range_edit_lower'].setText( + f"{self.exp_range_lower}")
    + +
    [docs] def JND_dataset_range_upper(self, txt): + ''' change the dataset_name we are using ''' + try: + self.exp_range_upper = int(txt) + except: + return + if self.exp_range_upper < self.exp_range_lower: + self.exp_range_upper = self.exp_range_lower + elif self.exp_range_upper > len(self.data_stores[0]): + self.exp_range_upper = len(self.data_stores[0]) + self.widget_controls['label']['range_edit_upper'].setText( + f"{self.exp_range_upper}")
    ''' images settings apply ''' @@ -728,11 +801,11 @@

    Source code for IQM_Vis.UI.widgets

                         self.widget_export[trans][widget].setStyleSheet(f"QLineEdit {{color: gray;}}\nQLabel {{color: gray;}}")
    [docs] def export_trans_images(self): + self.export_in_progress = True # make save folder - image_name = f"{self.data_stores[0].get_reference_image_name()}-export" - + dir_folder = self.get_export_dir(0) save_folder = os.path.join( - self.default_save_dir, image_name, f"images-{str(datetime.datetime.now()).split('.')[0]}") + dir_folder, f"images-{str(datetime.datetime.now()).split('.')[0]}") if not os.path.exists(save_folder): os.makedirs(save_folder) @@ -769,7 +842,11 @@

    Source code for IQM_Vis.UI.widgets

                 trans_info = {'transform_name': trans_name, 'transform_value': param}
                 image_utils.save_image(img, os.path.join(
                     save_folder, f'{save_utils.make_name_for_trans(trans_info)}.png'))
    -        self.status_bar.showMessage(f'Images saved to {save_folder}', 5000)
    + self.status_bar.showMessage(f'Images saved to {save_folder}', 5000) + self.export_in_progress = False + self.last_export = save_folder
    + +
    [docs] def open_mlp_new(self, mpl_canvas): fig = gui_utils.break_out_mlp(mpl_canvas) @@ -791,8 +868,46 @@

    Source code for IQM_Vis.UI.widgets

                     else:
                         self.widget_experiment_params[trans][widget].setStyleSheet(f"QLineEdit {{color: gray;}}\nQLabel {{color: gray;}}")
    +
    [docs] def launch_experiment_JND(self): + '''launch the Just Noticable difference experiment''' + # first get all the checked transforms and their parameters + checked_transformation_params = {} + for trans in self.widget_experiment_params: + if self.widget_experiment_params[trans]['check_box'].isChecked(): + data = {'min': make_float_from_text(self.widget_experiment_params[trans]['min_edit'].text()), + 'max': make_float_from_text(self.widget_experiment_params[trans]['max_edit'].text()), + 'num_steps': int(self.widget_experiment_params[trans]['steps_edit'].text()), + 'function': self.checked_transformations[trans]['function']} + name = self.widget_experiment_params[trans]['name'].text() + checked_transformation_params[name] = data + + # check that we only have one transform selected to JND test to work + if len(checked_transformation_params) != 1: + # show message to UI if more than one transform + self.status_bar.showMessage( + '!!! Select only one tranform/distortion for Just Noticable Difference Experiment !!!', 10000) + else: + # run JND experiment + self.experiment_JND = IQM_Vis.UI.make_experiment_JND(checked_transformation_params, + self.data_stores[0], + self.image_display_size, + self.rgb_brightness, + self.display_brightness, + self.default_save_dir, + self.default_dataset_name, + self.pre_processing_option, + self.post_processing_option, + self.exp_range_lower, + self.exp_range_upper, + self.checked_metrics) + self.experiment_JND.saved_experiment.connect( + self.change_human_scores_after_exp_JND) + self.experiment_JND.show() + self.experiment_JND.showFullScreen()
    + -
    [docs] def launch_experiment(self): +
    [docs] def launch_experiment_2AFC(self): + '''Launch the 2 alternate forced choice experiment''' # first get all the checked transforms and their parameters checked_transformation_params = {} for trans in self.widget_experiment_params: @@ -804,7 +919,7 @@

    Source code for IQM_Vis.UI.widgets

                     name = self.widget_experiment_params[trans]['name'].text()
                     checked_transformation_params[name] = data
             if self.checked_transformations != {}:
    -            self.experiment = IQM_Vis.UI.make_experiment(checked_transformation_params,
    +            self.experiment_2AFC = IQM_Vis.UI.make_experiment_2AFC(checked_transformation_params,
                                                              self.data_stores[0],
                                                              self.image_display_size,
                                                              self.rgb_brightness,
    @@ -813,16 +928,20 @@ 

    Source code for IQM_Vis.UI.widgets

                                                              self.pre_processing_option,
                                                              self.post_processing_option,
                                                              self.checked_metrics)
    -            self.experiment.saved_experiment.connect(
    -                self.change_human_scores_after_exp)
    -            self.experiment.show()
    -            self.experiment.showFullScreen()
    +            self.experiment_2AFC.saved_experiment.connect(
    +                self.change_human_scores_after_exp_2AFC)
    +            self.experiment_2AFC.show()
    +            self.experiment_2AFC.showFullScreen()
             else:
                 self.status_bar.showMessage('Cannot run experiment without transforms', 5000)
    -
    [docs] @pyqtSlot(str) - def change_human_scores_after_exp(self, path): - self._change_human_exp(path)
    +
    [docs] @pyqtSlot(str) + def change_human_scores_after_exp_2AFC(self, path): + self._change_human_exp_2AFC(path)
    + +
    [docs] @pyqtSlot(str) + def change_human_scores_after_exp_JND(self, path): + self._change_human_exp_JND(path)
    ''' diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/dataset.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/dataset.html index 2b30e86..b67f5d1 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/dataset.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/dataset.html @@ -110,9 +110,10 @@

    Source code for IQM_Vis.examples.dataset

     
         # make dataset list of images
         file_path = os.path.dirname(os.path.abspath(__file__))
    -    dataset = [os.path.join(file_path, 'images', 'waves1.jpeg'),
    -               os.path.join(file_path, 'images', 'waves2.jpeg'),
    -               os.path.join(file_path, 'images', 'waves3.jpeg')]
    +    dataset = [IQM_Vis.examples.images.IMAGE1,
    +               IQM_Vis.examples.images.IMAGE2,
    +               IQM_Vis.examples.images.IMAGE3]
    +    
         data = IQM_Vis.dataset_holder(dataset,
                                       metric,
                                       metric_images,
    diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/experiment.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/experiment.html
    deleted file mode 100644
    index 6b34624..0000000
    --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/experiment.html
    +++ /dev/null
    @@ -1,170 +0,0 @@
    -
    -
    -
    -  
    -  
    -  IQM_Vis.examples.experiment — IQM-Vis 0.2 documentation
    -      
    -      
    -      
    -  
    -  
    -        
    -        
    -        
    -        
    -    
    -    
    -    
    -     
    -
    -
    - 
    -  
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -

    Source code for IQM_Vis.examples.experiment

    -# Author: Matt Clifford <matt.clifford@bristol.ac.uk>
    -# License: BSD 3-Clause License
    -
    -import os
    -import numpy as np
    -import IQM_Vis
    -
    -
    -
    [docs]def run(): - # metrics functions must return a single value - metric = {'DISTS': IQM_Vis.metrics.DISTS(), - 'MAE': IQM_Vis.metrics.MAE(), - '1-SSIM': IQM_Vis.metrics.SSIM(), - # '1-MS_SSIM': IQM_Vis.metrics.MS_SSIM(), - 'NLPD': IQM_Vis.metrics.NLPD(), - # 'LPIPS': IQM_Vis.metrics.LPIPS(), - } - - # metrics images return a numpy image - metric_images = {} - - # make dataset list of images - file_path = os.path.dirname(os.path.abspath(__file__)) - dataset = [os.path.join(file_path, 'images', 'waves1.jpeg'), - os.path.join(file_path, 'images', 'waves2.jpeg'), - os.path.join(file_path, 'images', 'waves3.jpeg')] - data = IQM_Vis.dataset_holder(dataset, - metric, - metric_images, - IQM_Vis.utils.load_image, - ) - - # define the transformations - transformations = { - # 'contrast': {'min': 0.5, 'max': 2.5, 'function': IQM_Vis.transforms.contrast, 'init_value': 1.0}, - 'Gaussian Noise': {'min': 0, 'max': 0.3, 'function': IQM_Vis.transforms.Gaussian_noise, 'init_value': 0.0}, - # 'hue': {'min': -0.5, 'max': 0.5, 'function': IQM_Vis.transforms.hue}, - # 'saturation': {'min': -0.5, 'max': 0.5, 'function': IQM_Vis.transforms.saturation}, - # 'jpg compr': {'init_value': 101, 'min': 1, 'max': 101, 'function': IQM_Vis.transforms.jpeg_compression}, - # # only odd ints - # 'blur': {'min': 1, 'max': 41, 'normalise': 'odd', 'function': IQM_Vis.transforms.blur}, - } - - # use the API to create the UI - IQM_Vis.make_UI(data, - transformations, - restrict_options=4, - num_steps_range=6)
    - -if __name__ == '__main__': - run() -
    - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/kodak.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/kodak.html index de7ac95..89d5f5a 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/kodak.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/kodak.html @@ -91,22 +91,14 @@

    Source code for IQM_Vis.examples.kodak

     # Author: Matt Clifford <matt.clifford@bristol.ac.uk>
     # License: BSD 3-Clause License
     
    -import os
    -import glob
     import IQM_Vis
    +from IQM_Vis.examples.KODAK_dataset import KODAK_IMAGES
     
     
    [docs]def run(): - file_path = os.path.dirname(os.path.abspath(__file__)) - dir = os.path.join(file_path, 'KODAK-dataset') - image_list = glob.glob(os.path.join(dir, '*')) - # remove and folders - image_list = [f for f in image_list if os.path.isfile(f)] - image_list.sort() - metrs = IQM_Vis.metrics.get_all_metrics() if '1-MS_SSIM' in metrs: metrs.pop('1-MS_SSIM') - data = IQM_Vis.dataset_holder(image_list, + data = IQM_Vis.dataset_holder(KODAK_IMAGES, metrs, # IQM_Vis.metrics.get_all_metric_images() ) diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/multiple.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/multiple.html deleted file mode 100644 index e2f57a7..0000000 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/multiple.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - IQM_Vis.examples.multiple — IQM-Vis 0.2 documentation - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -

    Source code for IQM_Vis.examples.multiple

    -# Author: Matt Clifford <matt.clifford@bristol.ac.uk>
    -# License: BSD 3-Clause License
    -
    -import os
    -import numpy as np
    -import IQM_Vis
    -
    -
    -
    [docs]def run(): - file_path = os.path.dirname(os.path.abspath(__file__)) - - # metrics functions must return a single value - metric = {'MAE': IQM_Vis.metrics.MAE(), - 'MSE': IQM_Vis.metrics.MSE(), - '1-SSIM': IQM_Vis.metrics.SSIM()} - - # metrics images return a numpy image - metric_images = {'MSE': IQM_Vis.metrics.MSE(return_image=True), - 'SSIM': IQM_Vis.metrics.SSIM(return_image=True)} - - # first row of images - row_1 = IQM_Vis.dataset_holder([os.path.join(file_path, 'images', 'waves2.jpeg')], - metric, - metric_images) - # second row of images - row_2 = IQM_Vis.dataset_holder([os.path.join(file_path, 'images', 'waves3.jpeg')], - metric, - metric_images) - # define the transformations - transformations = { - 'rotation':{'min':-180, 'max':180, 'function':IQM_Vis.transforms.rotation}, # normal input - 'blur':{'min':1, 'max':41, 'normalise':'odd', 'function':IQM_Vis.transforms.blur}, # only odd ints - 'brightness':{'min':-1.0, 'max':1.0, 'function':IQM_Vis.transforms.brightness}, # normal but with float - } - - # use the API to create the UI - IQM_Vis.make_UI([row_1, row_2], - transformations)
    - - -if __name__ == '__main__': - run() -
    - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/new_api.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/new_api.html deleted file mode 100644 index 245ef21..0000000 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/new_api.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - IQM_Vis.examples.new_api — IQM-Vis 0.2 documentation - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -

    Source code for IQM_Vis.examples.new_api

    -''' KODAK dataset '''
    -# Author: Matt Clifford <matt.clifford@bristol.ac.uk>
    -# License: BSD 3-Clause License
    -
    -import os
    -import glob
    -import IQM_Vis
    -
    -
    [docs]def run(): - # file_path = os.path.dirname(os.path.abspath(__file__)) - # dir = os.path.join(file_path, 'KODAK-dataset') - - dir = os.path.join(os.path.expanduser('~'), 'Desktop', 'demo') - image_list = glob.glob(os.path.join(dir, '*')) - # remove and folders - image_list = [f for f in image_list if os.path.isfile(f)] - image_list.sort() - - metrs = IQM_Vis.metrics.get_all_metrics() - metrs.pop('1-MS_SSIM') - - metr_ims = IQM_Vis.metrics.get_all_metric_images() - metr_ims.pop('MSE') - - IQM_Vis.make_UI(transformations=IQM_Vis.transforms.get_all_transforms(), - image_list=image_list, - metrics=metrs, - metric_images=metr_ims, - restrict_options=3 - ) - IQM_Vis.make_UI()
    - -if __name__ == '__main__': - run() -
    - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/simple.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/simple.html deleted file mode 100644 index eeadfdb..0000000 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/examples/simple.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - IQM_Vis.examples.simple — IQM-Vis 0.2 documentation - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -

    Source code for IQM_Vis.examples.simple

    -# Author: Matt Clifford <matt.clifford@bristol.ac.uk>
    -# License: BSD 3-Clause License
    -
    -import os
    -import numpy as np
    -import IQM_Vis
    -
    -
    -
    [docs]def run(): - file_path = os.path.dirname(os.path.abspath(__file__)) - # define simple metrics - metric = {'MAE': lambda im1, im2: np.abs(im1 - im2).mean()} - metric_im = {'MAE': lambda im1, im2: np.abs(im1 - im2)} - # add numpy image and the metrics to the data handler - data_store = IQM_Vis.dataset_holder(image_list=[os.path.join(file_path, 'images', 'waves3.jpeg')], - metrics=metric, - metric_images=metric_im) - # define the transformations - trans = {'brightness': {'min':-1.0, 'max':1.0, 'init_value':0, 'function':lambda im, val: np.clip(im + val, 0, 1)}} - # use the API to create the UI - IQM_Vis.make_UI([data_store], - trans, - metrics_info_format='text')
    - - -if __name__ == '__main__': - run() -
    - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/metrics/SSIM/ssim.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/metrics/SSIM/ssim.html index 7fec2ec..94eb71d 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/metrics/SSIM/ssim.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/metrics/SSIM/ssim.html @@ -196,63 +196,65 @@

    Source code for IQM_Vis.metrics.SSIM.ssim

         return ssim_per_channel, cs
     
     
    -
    [docs]def ssim( - X: Tensor, - Y: Tensor, - data_range: float = 255, - size_average: bool = True, - win_size: int = 11, - win_sigma: float = 1.5, - win: Optional[Tensor] = None, - K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), - nonnegative_ssim: bool = False, -) -> Tensor: - r""" interface of ssim - Args: - X (torch.Tensor): a batch of images, (N,C,H,W) - Y (torch.Tensor): a batch of images, (N,C,H,W) - data_range (float or int, optional): value range of input images. (usually 1.0 or 255) - size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar - win_size: (int, optional): the size of gauss kernel - win_sigma: (float, optional): sigma of normal distribution - win (torch.Tensor, optional): 1-D gauss kernel. if None, a new kernel will be created according to win_size and win_sigma - K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. - nonnegative_ssim (bool, optional): force the ssim response to be nonnegative with relu - - Returns: - torch.Tensor: ssim results - """ - if not X.shape == Y.shape: - raise ValueError(f"Input images should have the same dimensions, but got {X.shape} and {Y.shape}.") - - for d in range(len(X.shape) - 1, 1, -1): - X = X.squeeze(dim=d) - Y = Y.squeeze(dim=d) - - if len(X.shape) not in (4, 5): - raise ValueError(f"Input images should be 4-d or 5-d tensors, but got {X.shape}") - - #if not X.type() == Y.type(): - # raise ValueError(f"Input images should have the same dtype, but got {X.type()} and {Y.type()}.") - - if win is not None: # set win_size - win_size = win.shape[-1] - - if not (win_size % 2 == 1): - raise ValueError("Window size should be odd.") - - if win is None: - win = _fspecial_gauss_1d(win_size, win_sigma) - win = win.repeat([X.shape[1]] + [1] * (len(X.shape) - 1)) - - ssim_per_channel, cs = _ssim(X, Y, data_range=data_range, win=win, size_average=False, K=K) - if nonnegative_ssim: - ssim_per_channel = torch.relu(ssim_per_channel) +# not currently used to commenting for coverage + +# def ssim( +# X: Tensor, +# Y: Tensor, +# data_range: float = 255, +# size_average: bool = True, +# win_size: int = 11, +# win_sigma: float = 1.5, +# win: Optional[Tensor] = None, +# K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), +# nonnegative_ssim: bool = False, +# ) -> Tensor: +# r""" interface of ssim +# Args: +# X (torch.Tensor): a batch of images, (N,C,H,W) +# Y (torch.Tensor): a batch of images, (N,C,H,W) +# data_range (float or int, optional): value range of input images. (usually 1.0 or 255) +# size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar +# win_size: (int, optional): the size of gauss kernel +# win_sigma: (float, optional): sigma of normal distribution +# win (torch.Tensor, optional): 1-D gauss kernel. if None, a new kernel will be created according to win_size and win_sigma +# K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. +# nonnegative_ssim (bool, optional): force the ssim response to be nonnegative with relu + +# Returns: +# torch.Tensor: ssim results +# """ +# if not X.shape == Y.shape: +# raise ValueError(f"Input images should have the same dimensions, but got {X.shape} and {Y.shape}.") + +# for d in range(len(X.shape) - 1, 1, -1): +# X = X.squeeze(dim=d) +# Y = Y.squeeze(dim=d) + +# if len(X.shape) not in (4, 5): +# raise ValueError(f"Input images should be 4-d or 5-d tensors, but got {X.shape}") + +# #if not X.type() == Y.type(): +# # raise ValueError(f"Input images should have the same dtype, but got {X.type()} and {Y.type()}.") + +# if win is not None: # set win_size +# win_size = win.shape[-1] + +# if not (win_size % 2 == 1): +# raise ValueError("Window size should be odd.") + +# if win is None: +# win = _fspecial_gauss_1d(win_size, win_sigma) +# win = win.repeat([X.shape[1]] + [1] * (len(X.shape) - 1)) + +# ssim_per_channel, cs = _ssim(X, Y, data_range=data_range, win=win, size_average=False, K=K) +# if nonnegative_ssim: +# ssim_per_channel = torch.relu(ssim_per_channel) - if size_average: - return ssim_per_channel.mean() - else: - return ssim_per_channel.mean(1)
    +# if size_average: +# return ssim_per_channel.mean() +# else: +# return ssim_per_channel.mean(1)
    [docs]def ms_ssim( @@ -337,90 +339,92 @@

    Source code for IQM_Vis.metrics.SSIM.ssim

             return ms_ssim_val.mean(1)
    -
    [docs]class SSIM(torch.nn.Module): - def __init__( - self, - data_range: float = 255, - size_average: bool = True, - win_size: int = 11, - win_sigma: float = 1.5, - channel: int = 3, - spatial_dims: int = 2, - K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), - nonnegative_ssim: bool = False, - ) -> None: - r""" class for ssim - Args: - data_range (float or int, optional): value range of input images. (usually 1.0 or 255) - size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar - win_size: (int, optional): the size of gauss kernel - win_sigma: (float, optional): sigma of normal distribution - channel (int, optional): input channels (default: 3) - K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. - nonnegative_ssim (bool, optional): force the ssim response to be nonnegative with relu. - """ - - super(SSIM, self).__init__() - self.win_size = win_size - self.win = _fspecial_gauss_1d(win_size, win_sigma).repeat([channel, 1] + [1] * spatial_dims) - self.size_average = size_average - self.data_range = data_range - self.K = K - self.nonnegative_ssim = nonnegative_ssim - -
    [docs] def forward(self, X: Tensor, Y: Tensor) -> Tensor: - return ssim( - X, - Y, - data_range=self.data_range, - size_average=self.size_average, - win=self.win, - K=self.K, - nonnegative_ssim=self.nonnegative_ssim, - )
    - - -
    [docs]class MS_SSIM(torch.nn.Module): - def __init__( - self, - data_range: float = 255, - size_average: bool = True, - win_size: int = 11, - win_sigma: float = 1.5, - channel: int = 3, - spatial_dims: int = 2, - weights: Optional[List[float]] = None, - K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), - ) -> None: - r""" class for ms-ssim - Args: - data_range (float or int, optional): value range of input images. (usually 1.0 or 255) - size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar - win_size: (int, optional): the size of gauss kernel - win_sigma: (float, optional): sigma of normal distribution - channel (int, optional): input channels (default: 3) - weights (list, optional): weights for different levels - K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. - """ - - super(MS_SSIM, self).__init__() - self.win_size = win_size - self.win = _fspecial_gauss_1d(win_size, win_sigma).repeat([channel, 1] + [1] * spatial_dims) - self.size_average = size_average - self.data_range = data_range - self.weights = weights - self.K = K - -
    [docs] def forward(self, X: Tensor, Y: Tensor) -> Tensor: - return ms_ssim( - X, - Y, - data_range=self.data_range, - size_average=self.size_average, - win=self.win, - weights=self.weights, - K=self.K, - )
    +# not currently used to commenting for coverage + +# class SSIM(torch.nn.Module): +# def __init__( +# self, +# data_range: float = 255, +# size_average: bool = True, +# win_size: int = 11, +# win_sigma: float = 1.5, +# channel: int = 3, +# spatial_dims: int = 2, +# K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), +# nonnegative_ssim: bool = False, +# ) -> None: +# r""" class for ssim +# Args: +# data_range (float or int, optional): value range of input images. (usually 1.0 or 255) +# size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar +# win_size: (int, optional): the size of gauss kernel +# win_sigma: (float, optional): sigma of normal distribution +# channel (int, optional): input channels (default: 3) +# K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. +# nonnegative_ssim (bool, optional): force the ssim response to be nonnegative with relu. +# """ + +# super(SSIM, self).__init__() +# self.win_size = win_size +# self.win = _fspecial_gauss_1d(win_size, win_sigma).repeat([channel, 1] + [1] * spatial_dims) +# self.size_average = size_average +# self.data_range = data_range +# self.K = K +# self.nonnegative_ssim = nonnegative_ssim + +# def forward(self, X: Tensor, Y: Tensor) -> Tensor: +# return ssim( +# X, +# Y, +# data_range=self.data_range, +# size_average=self.size_average, +# win=self.win, +# K=self.K, +# nonnegative_ssim=self.nonnegative_ssim, +# ) + + +# class MS_SSIM(torch.nn.Module): +# def __init__( +# self, +# data_range: float = 255, +# size_average: bool = True, +# win_size: int = 11, +# win_sigma: float = 1.5, +# channel: int = 3, +# spatial_dims: int = 2, +# weights: Optional[List[float]] = None, +# K: Union[Tuple[float, float], List[float]] = (0.01, 0.03), +# ) -> None: +# r""" class for ms-ssim +# Args: +# data_range (float or int, optional): value range of input images. (usually 1.0 or 255) +# size_average (bool, optional): if size_average=True, ssim of all images will be averaged as a scalar +# win_size: (int, optional): the size of gauss kernel +# win_sigma: (float, optional): sigma of normal distribution +# channel (int, optional): input channels (default: 3) +# weights (list, optional): weights for different levels +# K (list or tuple, optional): scalar constants (K1, K2). Try a larger K2 constant (e.g. 0.4) if you get a negative or NaN results. +# """ + +# super(MS_SSIM, self).__init__() +# self.win_size = win_size +# self.win = _fspecial_gauss_1d(win_size, win_sigma).repeat([channel, 1] + [1] * spatial_dims) +# self.size_average = size_average +# self.data_range = data_range +# self.weights = weights +# self.K = K + +# def forward(self, X: Tensor, Y: Tensor) -> Tensor: +# return ms_ssim( +# X, +# Y, +# data_range=self.data_range, +# size_average=self.size_average, +# win=self.win, +# weights=self.weights, +# K=self.K, +# )
    diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/ui_wrapper.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/ui_wrapper.html index 23bbf3d..de1d6e5 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/ui_wrapper.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/ui_wrapper.html @@ -105,13 +105,15 @@

    Source code for IQM_Vis.ui_wrapper

     try:
         from PyQt6.QtWidgets import QApplication
         import IQM_Vis
    -    from IQM_Vis.UI.main import make_app
         from IQM_Vis.utils import image_utils
    -    from IQM_Vis.examples.images import DEFAULT_IMAGES
         import matplotlib
         matplotlib.use("Qt5Agg")
     except ImportError:
         warnings.warn('Cannot load PyQt6 library - running IQM_Vis package in headless mode')
    +    
    +from IQM_Vis.UI.main import make_app
    +from IQM_Vis.examples.images import DEFAULT_IMAGES
    +
     
     
    [docs]class make_UI: def __init__(self, @@ -124,6 +126,7 @@

    Source code for IQM_Vis.ui_wrapper

                      metrics_avg_graph: bool=True,
                      metric_params: dict={},
                      default_save_dir=IQM_Vis.utils.save_utils.DEFAULT_SAVE_DIR,
    +                 default_dataset_name='dataset1',
                      restrict_options=None,
                      num_steps_range=11,
                      debug=False, 
    @@ -138,6 +141,7 @@ 

    Source code for IQM_Vis.ui_wrapper

             self.metrics_avg_graph = metrics_avg_graph
             self.metric_params = metric_params
             self.default_save_dir = default_save_dir
    +        self.default_dataset_name = default_dataset_name
             self.restrict_options = restrict_options
             self.num_steps_range = num_steps_range
             self.debug = debug
    @@ -154,15 +158,16 @@ 

    Source code for IQM_Vis.ui_wrapper

                 self._check_inputs()
             self.app = QApplication(sys.argv)
             self.window = make_app(self.app,
    -                          self.data_store,
    -                          self.transformations,
    -                          metrics_info_format=self.metrics_info_format,
    -                          metrics_avg_graph=self.metrics_avg_graph,
    -                          metric_params=self.metric_params,
    -                          default_save_dir=self.default_save_dir,
    -                          restrict_options=self.restrict_options,
    -                          num_steps_range=self.num_steps_range,
    -                          test=self.test)
    +                               self.data_store,
    +                               self.transformations,
    +                               metrics_info_format=self.metrics_info_format,
    +                               metrics_avg_graph=self.metrics_avg_graph,
    +                               metric_params=self.metric_params,
    +                               default_save_dir=self.default_save_dir,
    +                               default_dataset_name=self.default_dataset_name,
    +                               restrict_options=self.restrict_options,
    +                               num_steps_range=self.num_steps_range,
    +                               test=self.test)
             if self.test == False:
                 sys.exit(self.app.exec())
    diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/gui_utils.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/gui_utils.html index ee6a845..960c18a 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/gui_utils.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/gui_utils.html @@ -168,12 +168,17 @@

    Source code for IQM_Vis.utils.gui_utils

     
     
    [docs]def get_trans_dict_from_str(trans_str, return_dict=False): # determine which experiment formatting we are using - splitter = '=' - if len(trans_str.split(splitter)) == 1: + if len(trans_str.split('-----')) != 1: splitter = '-----' # legacy code experiment format - illegible with negative numbers - if len(trans_str.split(splitter)) == 1: + elif len(trans_str.split('::')) != 1: splitter = '::' # legacy code experiment format - didn't work with windows filesystem - + elif len(trans_str.split('<>')) != 1: + splitter = '<>' # newer code experiment format + elif len(trans_str.split('=')) != 1: + splitter = '=' # legacy experiment format + else: + raise ValueError('No splitter found in transformation string') + # split the string into the transformation and the value trans = splitter.join(trans_str.split(splitter)[:-1]) # error with duplicated columns in csv with pandas load try: diff --git a/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/save_utils.html b/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/save_utils.html index 347f682..eecce72 100644 --- a/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/save_utils.html +++ b/dev_resources/docs/_build/html/_modules/IQM_Vis/utils/save_utils.html @@ -98,7 +98,9 @@

    Source code for IQM_Vis.utils.save_utils

     import pickle
     import pandas as pd
     
    -DEFAULT_SAVE_DIR = os.path.join(os.path.expanduser("~"), 'IQM-Vis-experiments')
    +from IQM_Vis.utils import image_utils
    +
    +DEFAULT_SAVE_DIR = os.path.join(os.path.expanduser("~"), 'IQM-Vis')
     
     ''' getters for experiment files from save dir '''
     
    [docs]def get_human_scores_file(dir): @@ -154,6 +156,24 @@

    Source code for IQM_Vis.utils.save_utils

         except:
             return None
    +
    [docs]def get_JND_image_names(dir): + ''' load the image names from a JND experiment ''' + images_dir = get_JND_ref_image_dir(dir) + if not os.path.exists(images_dir): + return None + try: + # get all file names in the directory + return os.listdir(images_dir) + except: + return None
    + +
    [docs]def get_JND_ref_image_dir(dir): + return os.path.join(dir, 'reference_images')
    + +
    [docs]def get_JND_ref_image_unprocessed_dir(dir): + return os.path.join(dir, 'reference_images_unprocessed')
    + +
    [docs]def save_df_as_csv(df, file, index=False): if os.path.exists(file): df_saved = pd.read_csv(file) @@ -170,8 +190,68 @@

    Source code for IQM_Vis.utils.save_utils

             df.set_index(index_name, inplace=True)
         df.to_csv(file, index=True)
    + +
    [docs]def save_and_merge_rm_duplicates_df_as_csv(df, file): + '''save only new IQM rows''' + if os.path.exists(file): + df_saved = pd.read_csv(file) + index_name = df.index.name + df = pd.merge(df.reset_index(), df_saved, how='outer') + df.set_index(index_name, inplace=True) + # remove duplicates + df = df[~df.index.duplicated(keep='last')] + # sort columns for consistency + cols = df.columns.tolist() + cols.sort() + df.to_csv(file, index=True, columns=cols)
    + + +
    [docs]def get_JND_user_ID(dir): + human_experiment_csv_file = get_human_scores_file(dir) + if not os.path.exists(human_experiment_csv_file): + return 1 + df = pd.read_csv(human_experiment_csv_file) + # get the last user ID + return df['User ID'].max() + 1
    + +
    [docs]def save_JND_experiment_results(experiment_results, + save_dir, + IQM_scores_df=None): + + # User ID + ID = get_JND_user_ID(save_dir) + results = {'ImageName': [], + 'UserDecision': [], + 'Transform': [], + 'TimeTaken': [], + 'User ID': []} + for image_data in experiment_results: + results['ImageName'].append(image_data['ref_name']) + results['UserDecision'].append(image_data['user_decision']) + results['Transform'].append(make_name_for_trans(image_data)) + results['TimeTaken'].append(image_data['time_taken']) + results['User ID'].append(ID) + # results[make_name_for_trans(image_data)] = [image_data['user_decision']] + + # make df + df = pd.DataFrame.from_dict(results) + # save results + human_experiment_csv_file = get_human_scores_file(save_dir) + save_df_as_csv(df, human_experiment_csv_file, index=False) + + # save IQM results + if not isinstance(IQM_scores_df, type(None)) and not IQM_scores_df.empty: + IQM_file = get_IQM_file(save_dir) + save_and_merge_rm_duplicates_df_as_csv(IQM_scores_df, IQM_file) + + return human_experiment_csv_file
    + -
    [docs]def save_experiment_results(trans_names, results_order, save_dir, times_taken=None, IQM_scores_df=None): +
    [docs]def save_2AFC_experiment_results(trans_names, + results_order, + save_dir, + times_taken=None, + IQM_scores_df=None): '''save all the experiment reults as csvs''' # make HIQM scores from ordering : HIQM = pos/num_pos results = {} @@ -196,9 +276,10 @@

    Source code for IQM_Vis.utils.save_utils

             save_df_as_csv(pd.DataFrame.from_dict(data), times_file)
     
         # save IQM results
    -    if not isinstance(IQM_scores_df, type(None)):
    +    if not isinstance(IQM_scores_df, type(None)) and not IQM_scores_df.empty:
    +        print(IQM_scores_df)
             IQM_file = get_IQM_file(save_dir)
    -        save_and_merge_df_as_csv(IQM_scores_df, IQM_file)
    +        save_and_merge_rm_duplicates_df_as_csv(IQM_scores_df, IQM_file)
     
         return human_experiment_csv_file
    @@ -210,9 +291,9 @@

    Source code for IQM_Vis.utils.save_utils

         with open(path, 'r') as fp:
             return json.load(fp)
    -
    [docs]def make_name_for_trans(trans): - splitter = '-----' + # splitter = '-----' + splitter = '<>' return f"{trans['transform_name']}{splitter}{trans['transform_value']}"
    diff --git a/dev_resources/docs/_build/html/_modules/index.html b/dev_resources/docs/_build/html/_modules/index.html index d37b4ab..8ffad95 100644 --- a/dev_resources/docs/_build/html/_modules/index.html +++ b/dev_resources/docs/_build/html/_modules/index.html @@ -87,7 +87,8 @@

    All modules for which code is available

  • init_layout() (IQM_Vis.UI.layout.layout method)
  • -
  • init_style() (IQM_Vis.UI.experiment_mode.make_experiment method) +
  • init_style() (IQM_Vis.UI.experiment_mode_2AFC.make_experiment_2AFC method)
  • @@ -586,13 +636,6 @@

    I

    -
  • - IQM_Vis.examples.experiment - -
  • @@ -610,24 +653,10 @@

    I

  • - IQM_Vis.examples.multiple - -
  • -
  • - IQM_Vis.examples.new_api - -
  • -
  • - IQM_Vis.examples.simple + IQM_Vis.examples.KODAK_dataset
  • @@ -656,13 +685,6 @@

    I

  • -
  • - IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation - -
  • @@ -684,29 +706,6 @@

    I

  • -
  • - IQM_Vis.metrics.NLPD_torch.utils.fourier - -
  • -
  • - IQM_Vis.metrics.NLPD_torch.utils.interp1d - -
  • - -
      -
    • - IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters - -
    • @@ -730,6 +729,8 @@

      I

    • module, [1]
    + +
    • IQM_Vis.metrics.SSIM @@ -787,10 +788,17 @@

      I

  • - IQM_Vis.UI.experiment_mode + IQM_Vis.UI.experiment_mode_2AFC + +
  • +
  • + IQM_Vis.UI.experiment_mode_JND
  • @@ -894,6 +902,12 @@

    I

    J

    + @@ -902,7 +916,9 @@

    J

    L

    - - - - - - - - - @@ -190,11 +175,6 @@

    Python Module Index

    - - - - - - - - - - - - + + + diff --git a/dev_resources/docs/_build/html/searchindex.js b/dev_resources/docs/_build/html/searchindex.js index 6d978e3..1b728dd 100644 --- a/dev_resources/docs/_build/html/searchindex.js +++ b/dev_resources/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["IQM_Vis", "IQM_Vis.UI", "IQM_Vis.data_handlers", "IQM_Vis.examples", "IQM_Vis.examples.images", "IQM_Vis.metrics", "IQM_Vis.metrics.SSIM", "IQM_Vis.transforms", "IQM_Vis.utils", "Tutorials", "_autosummary/IQM_Vis", "_autosummary/IQM_Vis.UI", "_autosummary/IQM_Vis.UI.custom_widgets", "_autosummary/IQM_Vis.UI.experiment_mode", "_autosummary/IQM_Vis.UI.images", "_autosummary/IQM_Vis.UI.layout", "_autosummary/IQM_Vis.UI.main", "_autosummary/IQM_Vis.UI.threads", "_autosummary/IQM_Vis.UI.utils", "_autosummary/IQM_Vis.UI.widgets", "_autosummary/IQM_Vis.data_handlers", "_autosummary/IQM_Vis.data_handlers.data_api", "_autosummary/IQM_Vis.data_handlers.data_api_abstract", "_autosummary/IQM_Vis.examples", "_autosummary/IQM_Vis.examples.all", "_autosummary/IQM_Vis.examples.dataset", "_autosummary/IQM_Vis.examples.dists", "_autosummary/IQM_Vis.examples.experiment", "_autosummary/IQM_Vis.examples.images", "_autosummary/IQM_Vis.examples.kodak", "_autosummary/IQM_Vis.examples.multiple", "_autosummary/IQM_Vis.examples.new_api", "_autosummary/IQM_Vis.examples.simple", "_autosummary/IQM_Vis.metrics", "_autosummary/IQM_Vis.metrics.NLPD_torch", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation", "_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.conv", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters", "_autosummary/IQM_Vis.metrics.SSIM", "_autosummary/IQM_Vis.metrics.metric_utils", "_autosummary/IQM_Vis.metrics.non_perceptual", "_autosummary/IQM_Vis.metrics.perceptual_DL", "_autosummary/IQM_Vis.metrics.perceptual_trad", "_autosummary/IQM_Vis.transforms", "_autosummary/IQM_Vis.transforms.additive_noise", "_autosummary/IQM_Vis.transforms.affine", "_autosummary/IQM_Vis.transforms.effects", "_autosummary/IQM_Vis.ui_wrapper", "_autosummary/IQM_Vis.utils", "_autosummary/IQM_Vis.utils.gui_utils", "_autosummary/IQM_Vis.utils.image_utils", "_autosummary/IQM_Vis.utils.plot_utils", "_autosummary/IQM_Vis.utils.save_utils", "_autosummary/IQM_Vis.version", "about", "getting_started", "index", "modules", "notebooks/Tutorial_1-making_the_UI", "notebooks/Tutorial_2-Customisation", "notebooks/Tutorial_3-Advanced-Customisations", "notebooks/Tutorial_4-running_an_experiment", "what-are-IQMs"], "filenames": ["IQM_Vis.rst", "IQM_Vis.UI.rst", "IQM_Vis.data_handlers.rst", "IQM_Vis.examples.rst", "IQM_Vis.examples.images.rst", "IQM_Vis.metrics.rst", "IQM_Vis.metrics.SSIM.rst", "IQM_Vis.transforms.rst", "IQM_Vis.utils.rst", "Tutorials.rst", "_autosummary/IQM_Vis.rst", "_autosummary/IQM_Vis.UI.rst", "_autosummary/IQM_Vis.UI.custom_widgets.rst", "_autosummary/IQM_Vis.UI.experiment_mode.rst", "_autosummary/IQM_Vis.UI.images.rst", "_autosummary/IQM_Vis.UI.layout.rst", "_autosummary/IQM_Vis.UI.main.rst", "_autosummary/IQM_Vis.UI.threads.rst", "_autosummary/IQM_Vis.UI.utils.rst", "_autosummary/IQM_Vis.UI.widgets.rst", "_autosummary/IQM_Vis.data_handlers.rst", "_autosummary/IQM_Vis.data_handlers.data_api.rst", "_autosummary/IQM_Vis.data_handlers.data_api_abstract.rst", "_autosummary/IQM_Vis.examples.rst", "_autosummary/IQM_Vis.examples.all.rst", "_autosummary/IQM_Vis.examples.dataset.rst", "_autosummary/IQM_Vis.examples.dists.rst", "_autosummary/IQM_Vis.examples.experiment.rst", "_autosummary/IQM_Vis.examples.images.rst", "_autosummary/IQM_Vis.examples.kodak.rst", "_autosummary/IQM_Vis.examples.multiple.rst", "_autosummary/IQM_Vis.examples.new_api.rst", "_autosummary/IQM_Vis.examples.simple.rst", "_autosummary/IQM_Vis.metrics.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.conv.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.rst", "_autosummary/IQM_Vis.metrics.SSIM.rst", "_autosummary/IQM_Vis.metrics.metric_utils.rst", "_autosummary/IQM_Vis.metrics.non_perceptual.rst", "_autosummary/IQM_Vis.metrics.perceptual_DL.rst", "_autosummary/IQM_Vis.metrics.perceptual_trad.rst", "_autosummary/IQM_Vis.transforms.rst", "_autosummary/IQM_Vis.transforms.additive_noise.rst", "_autosummary/IQM_Vis.transforms.affine.rst", "_autosummary/IQM_Vis.transforms.effects.rst", "_autosummary/IQM_Vis.ui_wrapper.rst", "_autosummary/IQM_Vis.utils.rst", "_autosummary/IQM_Vis.utils.gui_utils.rst", "_autosummary/IQM_Vis.utils.image_utils.rst", "_autosummary/IQM_Vis.utils.plot_utils.rst", "_autosummary/IQM_Vis.utils.save_utils.rst", "_autosummary/IQM_Vis.version.rst", "about.rst", "getting_started.rst", "index.rst", "modules.rst", "notebooks/Tutorial_1-making_the_UI.ipynb", "notebooks/Tutorial_2-Customisation.ipynb", "notebooks/Tutorial_3-Advanced-Customisations.ipynb", "notebooks/Tutorial_4-running_an_experiment.ipynb", "what-are-IQMs.rst"], "titles": ["IQM_Vis package", "IQM_Vis.UI package", "IQM_Vis.data_handlers package", "IQM_Vis.examples package", "IQM_Vis.examples.images package", "IQM_Vis.metrics package", "IQM_Vis.metrics.SSIM package", "IQM_Vis.transforms package", "IQM_Vis.utils package", "Tutorials", "IQM_Vis", "IQM_Vis.UI", "IQM_Vis.UI.custom_widgets", "IQM_Vis.UI.experiment_mode", "IQM_Vis.UI.images", "IQM_Vis.UI.layout", "IQM_Vis.UI.main", "IQM_Vis.UI.threads", "IQM_Vis.UI.utils", "IQM_Vis.UI.widgets", "IQM_Vis.data_handlers", "IQM_Vis.data_handlers.data_api", "IQM_Vis.data_handlers.data_api_abstract", "IQM_Vis.examples", "IQM_Vis.examples.all", "IQM_Vis.examples.dataset", "IQM_Vis.examples.dists", "IQM_Vis.examples.experiment", "IQM_Vis.examples.images", "IQM_Vis.examples.kodak", "IQM_Vis.examples.multiple", "IQM_Vis.examples.new_api", "IQM_Vis.examples.simple", "IQM_Vis.metrics", "IQM_Vis.metrics.NLPD_torch", "IQM_Vis.metrics.NLPD_torch.layers", "IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation", "IQM_Vis.metrics.NLPD_torch.pyramids", "IQM_Vis.metrics.NLPD_torch.utils", "IQM_Vis.metrics.NLPD_torch.utils.conv", "IQM_Vis.metrics.NLPD_torch.utils.fourier", "IQM_Vis.metrics.NLPD_torch.utils.interp1d", "IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters", "IQM_Vis.metrics.SSIM", "IQM_Vis.metrics.metric_utils", "IQM_Vis.metrics.non_perceptual", "IQM_Vis.metrics.perceptual_DL", "IQM_Vis.metrics.perceptual_trad", "IQM_Vis.transforms", "IQM_Vis.transforms.additive_noise", "IQM_Vis.transforms.affine", "IQM_Vis.transforms.effects", "IQM_Vis.ui_wrapper", "IQM_Vis.utils", "IQM_Vis.utils.gui_utils", "IQM_Vis.utils.image_utils", "IQM_Vis.utils.plot_utils", "IQM_Vis.utils.save_utils", "IQM_Vis.version", "About IQM-Vis", "Getting Started", "IQM-Vis documentation", "IQM_Vis", "Tutorial 1: Making the UI", "Tutorial 2: Simple Customisation", "Tutorial 3: Customisation Details", "Tutorial 4: Running an Experiment", "IQMs"], "terms": {"ui": [0, 2, 8, 52, 56, 61, 62, 64, 66], "custom_widget": [0, 62], "clicklabel": [0, 1], "click": [0, 1, 8, 63, 66], "mousepressev": [0, 1], "progressbar": [0, 1], "experiment_mod": [0, 62], "make_experi": [0, 1], "calc_max_comparison": [0, 1], "change_experiment_imag": [0, 1], "click_complet": [0, 1], "clicked_imag": [0, 1], "closeev": [0, 1], "experiment_layout": [0, 1], "finish_experi": [0, 1], "get_all_imag": [0, 1], "get_metric_scor": [0, 1], "get_single_transform_im": [0, 1], "init_styl": [0, 1], "partit": [0, 1], "quick_sort": [0, 1], "quit": [0, 1], "reset_clicked_imag": [0, 1], "reset_experi": [0, 1], "save_experi": [0, 1], "saved_experi": [0, 1], "setup_experi": [0, 1], "show_all_imag": [0, 1], "start_experi": [0, 1], "swap_ind": [0, 1], "toggle_experi": [0, 1], "reset_image_widget_to_black": [0, 1], "change_to_solid": [0, 1], "complet": [0, 1], "stop": [0, 1], "sort_list": [0, 1], "imag": [0, 2, 3, 5, 6, 7, 8, 21, 39, 43, 51, 54, 55, 57, 59, 61, 62, 65, 66, 67], "change_data": [0, 1], "change_data_click_im": [0, 1], "change_metric_correlations_graph": [0, 1], "change_metric_range_graph": [0, 1], "change_preview_imag": [0, 1], "change_to_data_num": [0, 1], "change_to_specific_tran": [0, 1], "completed_range_result": [0, 1], "display_imag": [0, 1], "display_metric_correlation_plot": [0, 1], "display_metric_imag": [0, 1], "display_metric_range_plot": [0, 1], "display_metr": [0, 1], "display_metrics_graph": [0, 1], "display_metrics_text": [0, 1], "display_radar_plot": [0, 1], "get_metrics_over_all_trans_with_init_valu": [0, 1], "init_worker_thread": [0, 1], "load_experiment_from_dir": [0, 1], "load_human_experi": [0, 1], "load_new_images_fold": [0, 1], "load_new_single_imag": [0, 1], "plot_metric_range_mlp": [0, 1], "plot_radar_graph": [0, 1], "plot_radar_mlp": [0, 1], "redo_plot": [0, 1], "request_range_work": [0, 1], "set_preview_imag": [0, 1], "set_save_dir_mpl": [0, 1], "stopped_range_work": [0, 1], "update_datastore_image_list": [0, 1], "view_correlation_inst": [0, 1], "message_on_plot": [0, 1], "layout": [0, 62], "init_layout": [0, 1], "main": [0, 62, 63, 64, 65, 66], "make_app": [0, 1], "change_save_fold": [0, 1], "clear_all_cache_data": [0, 1], "construct_ui": [0, 1], "get_menu_checkbox": [0, 1], "load_all_metric_imag": [0, 1], "load_all_metr": [0, 1], "load_all_transform": [0, 1], "make_menu": [0, 1], "make_status_bar": [0, 1], "reset_correlation_data": [0, 1], "set_checked_menu_from_iter": [0, 1], "thread": [0, 62], "get_range_results_work": [0, 1], "current_imag": [0, 1], "do_work": [0, 1], "progress": [0, 1], "util": [0, 2, 62], "add_layout_to_tab": [0, 1], "widget": [0, 8, 12, 54, 62], "custom_float_valid": [0, 1], "valid": [0, 1], "get_float_valid": [0, 1], "is_almost_float": [0, 1], "is_float": [0, 1], "make_float_from_text": [0, 1], "change_display_im_display_bright": [0, 1], "change_display_im_rgb_bright": [0, 1], "change_display_im_s": [0, 1], "change_graph_s": [0, 1], "change_human_scores_after_exp": [0, 1], "change_num_step": [0, 1], "change_plot_lim": [0, 1], "change_post_process": [0, 1], "change_pre_process": [0, 1], "change_text_exp_tran": [0, 1], "change_text_export_tran": [0, 1], "colour_lineedit": [0, 1], "disable_settings_button": [0, 1], "display_slider_num": [0, 1], "edit_slider_v": [0, 1], "enable_settings_button": [0, 1], "export_trans_imag": [0, 1], "generic_value_chang": [0, 1], "init_widget": [0, 1], "launch_experi": [0, 1], "make_slider_rang": [0, 1], "open_mlp_new": [0, 1], "reset_slider_group": [0, 1], "reset_slid": [0, 1], "set_image_name_text": [0, 1], "update_image_set": [0, 1], "update_progress": [0, 1], "update_status_bar": [0, 1], "data_handl": [0, 62], "data_api": [0, 8, 62], "cache_metric_cal": [0, 2], "__call__": [0, 2, 5, 43, 62, 65], "cache_track": [0, 2], "dataset_hold": [0, 2], "add_metr": [0, 2], "add_metric_imag": [0, 2], "clear_all_cach": [0, 2], "get_image_dataset_list": [0, 2], "get_image_to_transform": [0, 2], "get_image_to_transform_nam": [0, 2], "get_metric_imag": [0, 2], "get_metr": [0, 2], "get_reference_imag": [0, 2], "get_reference_image_by_index": [0, 2], "get_reference_image_nam": [0, 2], "get_reference_unprocess": [0, 2], "load_image_list": [0, 2], "get_image_nam": [0, 2], "data_api_abstract": [0, 62], "base_dataload": [0, 2], "metric_imag": [0, 1, 2, 64], "metric": [0, 1, 2, 3, 8, 21, 24, 59, 61, 62, 66, 67], "base_dataset_load": [0, 2], "exampl": [0, 2, 52, 60, 62, 64, 65, 67], "all": [0, 1, 2, 5, 6, 7, 8, 42, 62, 63, 66], "run": [0, 3, 6, 24, 59, 60, 61, 63], "dataset": [0, 1, 8, 29, 31, 59, 62, 65], "dist": [0, 5, 62], "correct": [0, 3, 59, 66], "load_and_calibrate_imag": [0, 3], "experi": [0, 1, 8, 13, 57, 61, 62, 67], "kodak": [0, 31, 62, 65], "multipl": [0, 62], "new_api": [0, 62], "simpl": [0, 59, 61, 62], "ssim": [0, 5, 61, 64, 67], "metric_util": [0, 62], "non_perceptu": [0, 62], "mae": [0, 5, 64, 65], "mse": [0, 5, 64], "rmse": [0, 5], "one_over_psnr": [0, 5], "perceptual_dl": [0, 62], "lpip": [0, 5], "perceptual_trad": [0, 62], "ms_ssim": [0, 5, 6], "nlpd": [0, 5], "get_all_iqm_param": [0, 5], "get_all_metric_imag": [0, 5], "get_all_metr": [0, 5], "transform": [0, 1, 2, 3, 5, 8, 21, 24, 37, 40, 59, 61, 62, 66], "additive_nois": [0, 62], "gaussian_nois": [0, 7], "noise_hyperspher": [0, 7], "salt_and_pepper_nois": [0, 7], "affin": [0, 62], "rotat": [0, 2, 7, 59, 63, 64], "x_shift": [0, 7], "y_shift": [0, 7], "zoom_imag": [0, 7], "effect": [0, 61, 62], "binary_threshold": [0, 7], "blur": [0, 6, 7, 64], "bright": [0, 7, 64, 65], "brightness_hsv": [0, 7], "contrast": [0, 7], "hue": [0, 7], "jpeg_compress": [0, 7, 64], "satur": [0, 7], "get_all_transform": [0, 7], "gui_util": [0, 62], "mplcanva": [0, 8], "change_im": [0, 8], "get_image_pair_nam": [0, 8], "get_metric_image_nam": [0, 8], "get_resolut": [0, 8], "get_trans_dict_from_str": [0, 8], "get_transformed_image_nam": [0, 8], "str_to_len": [0, 8], "image_util": [0, 62], "calibrate_bright": [0, 8], "crop_centr": [0, 8], "get_transform_imag": [0, 8], "load_imag": [0, 2, 8], "resize_imag": [0, 8], "resize_to_longest_sid": [0, 8], "save_imag": [0, 8], "plot_util": [0, 62], "bar_plott": [0, 8], "plot": [0, 1, 8, 56, 59, 66], "set_plot_lim": [0, 8], "set_styl": [0, 8], "show": [0, 8, 59, 62, 65, 66], "click_scatt": [0, 8], "compute_metric_for_human_correl": [0, 8], "compute_metrics_over_rang": [0, 8], "compute_metrics_over_range_single_tran": [0, 8], "get_all_single_transform_param": [0, 8], "get_all_slider_valu": [0, 8], "get_correlation_plot": [0, 8], "get_radar_plots_avg_plot": [0, 8], "get_transform_range_plot": [0, 8], "hover_scatt": [0, 8], "line_plott": [0, 8], "radar_plott": [0, 8], "scatter_plott": [0, 8], "update_annot": [0, 8], "save_util": [0, 62], "default_save_dir": [0, 1, 8], "get_iqm_fil": [0, 8], "get_human_scores_fil": [0, 8], "get_human_times_fil": [0, 8], "get_image_name_from_human_scor": [0, 8], "get_image_processing_fil": [0, 8], "get_original_image_fil": [0, 8], "get_original_unprocessed_image_fil": [0, 8], "get_transform_functions_fil": [0, 8], "get_transform_params_fil": [0, 8], "load_json_dict": [0, 8], "load_obj": [0, 8], "make_name_for_tran": [0, 8], "save_and_merge_df_as_csv": [0, 8], "save_df_as_csv": [0, 8], "save_experiment_result": [0, 8], "save_json_dict": [0, 8], "save_obj": [0, 8], "api": [0, 2, 22, 52], "access": [0, 52, 59], "make": [0, 8, 52, 60, 61, 66], "pyqt6": [0, 1, 8, 12, 17, 52, 54, 59], "iqm": [0, 1, 2, 5, 8, 52, 60, 63, 64, 65, 66], "vi": [0, 1, 2, 8, 52, 60, 63, 64, 65, 66, 67], "todo": [0, 8, 52, 56], "write": [0, 8, 52, 56, 61], "dev_resourc": [0, 8, 52, 56, 63, 64, 65, 66], "doc": [0, 8, 52, 56, 63, 64, 65, 66], "usag": [0, 52], "what": [0, 52, 65], "input": [0, 2, 6, 52, 64, 65], "etc": [0, 52, 66], "attribut": [0, 14, 15, 52, 57, 65], "data_stor": [0, 1, 8, 52], "class": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 15, 16, 17, 19, 21, 22, 36, 37, 41, 43, 45, 46, 47, 49, 52, 54, 56, 65], "need": [0, 1, 2, 6, 8, 52, 63, 64, 65, 66], "check_pyqt_install_dep": [0, 62], "sourc": [0, 1, 2, 3, 5, 6, 7, 8, 14, 15, 19, 43], "linux": 0, "doesn": 0, "t": [0, 6, 60], "alwai": 0, "ship": 0, "requir": [0, 1, 12, 60, 63, 64, 66, 67], "librari": [0, 60], "so": [0, 1, 8, 59, 60], "here": [0, 65, 66], "we": [0, 1, 2, 60, 63, 64, 65, 66, 67], "warn": 0, "user": [0, 7, 51, 59, 61, 66], "thei": [0, 2, 65, 66, 67], "instal": 0, "them": [0, 6, 64, 65], "avoid": 0, "crash": 0, "make_ui": [0, 60, 62, 63, 64, 65], "none": [0, 1, 2, 6, 8], "image_list": [0, 1, 2, 64, 65], "list": [0, 1, 2, 6, 8, 64], "home": [0, 1, 8, 64, 65], "matt": [0, 1, 8, 64, 65], "project": [0, 63, 64], "waves1": [0, 64], "jpeg": [0, 7, 64], "waves2": [0, 64], "waves3": 0, "dict": [0, 1, 2, 5, 7, 8], "metrics_info_format": [0, 1], "str": [0, 1, 5], "graph": [0, 1, 8, 54, 59, 61], "metrics_avg_graph": [0, 1], "bool": [0, 5, 6, 8, 43], "true": [0, 1, 3, 5, 6, 8, 43, 64], "metric_param": [0, 1, 8, 65], "restrict_opt": [0, 1], "num_steps_rang": [0, 1], "11": [0, 1, 5, 6, 8, 43, 60], "debug": 0, "fals": [0, 1, 5, 6, 7, 8, 43], "test": [0, 1, 61], "base": [0, 1, 2, 5, 6, 7, 8], "object": [0, 1, 2, 5, 8, 65, 67], "test_datastore_attribut": [0, 62], "get": [0, 1, 5, 6, 7, 8, 51, 64], "data": [0, 1, 2, 8, 21, 22, 59, 61, 67], "handler": 0, "sure": [0, 60, 61, 65, 66], "its": [0, 7, 8], "properti": [0, 2, 59, 61], "ar": [0, 1, 2, 5, 7, 42, 59, 60, 61, 65, 66, 67], "transform_wrapp": [0, 62], "function": [0, 1, 2, 5, 6, 7, 8, 12, 13, 16, 18, 21, 24, 25, 26, 27, 29, 30, 31, 32, 33, 39, 40, 44, 48, 49, 50, 51, 52, 54, 55, 56, 57, 63, 64, 65, 67], "wrap": 0, "return": [0, 5, 6, 7, 8, 43, 64, 65, 66], "an": [0, 1, 2, 5, 7, 43, 59, 63, 64], "between": [0, 1, 5, 43, 67], "0": [0, 1, 5, 6, 7, 8, 43, 60, 63, 64, 65], "1": [0, 1, 5, 6, 7, 8, 43, 60, 61, 64, 65], "arg": [0, 1, 65], "kwarg": [0, 1, 2, 5, 7, 14, 15, 43, 65], "call": [0, 2, 5, 6, 43, 63, 65], "self": [0, 1, 2, 65], "custom": [1, 12, 59, 64, 65], "subclass": [1, 6, 12], "extent": [1, 12], "name": [1, 2, 7, 8], "clickabl": 1, "label": [1, 8], "qlabel": 1, "add": [1, 7, 63, 65], "event": [1, 8], "can": [1, 59, 60, 61, 63, 64, 65, 66, 67], "qmouseev": 1, "qprogressbar": 1, "creat": [1, 6, 13, 60, 67], "window": [1, 6, 13], "checked_transformation_param": 1, "image_display_s": 1, "rgb_bright": [1, 8], "display_bright": [1, 8], "image_preprocess": 1, "image_postprocess": 1, "checked_metr": 1, "qmainwindow": 1, "num_imag": 1, "a_tran": 1, "b_tran": 1, "image_nam": 1, "widget_nam": 1, "qcloseev": 1, "setup": [1, 66], "save": [1, 8, 57, 63, 66], "score": [1, 5, 43, 59, 65, 66], "alongsid": [1, 7], "analysi": [1, 59, 64], "purpos": 1, "single_trans_dict": 1, "style": 1, "light": 1, "css_file": 1, "low": 1, "high": 1, "given": [1, 5, 7, 8, 43, 67], "unsort": 1, "arrai": [1, 2, 5, 7, 8, 43, 65], "order": [1, 59, 66], "element": 1, "lower": 1, "than": [1, 7], "pivot": 1, "point": [1, 5, 8, 16, 60, 66], "left": 1, "higher": [1, 7], "right": 1, "tab": [1, 63], "i": [1, 5, 7, 8, 43, 59, 60, 63, 64, 65, 66], "j": 1, "time": 1, "qobject": 1, "chang": [1, 8, 63, 64], "black": [1, 7, 63], "paus": 1, "list1": 1, "list2": 1, "ival": 1, "_redo_plot": 1, "widget_ind": 1, "ind": [1, 8], "trans_str": [1, 8], "result": [1, 6, 8, 59, 61], "sent": 1, "from": [1, 2, 5, 8, 42, 59, 60, 63, 66, 67], "signal": [1, 5, 8, 17], "worker": 1, "disp_len": 1, "5": [1, 5, 6, 7, 8, 43, 63, 64, 65], "set": [1, 61, 66], "up": [1, 61], "smoother": [1, 17], "rang": [1, 6, 7, 8, 63, 64, 65, 67], "calcul": [1, 2, 59, 63], "us": [1, 2, 5, 7, 8, 17, 21, 36, 40, 42, 56, 59, 60, 61, 63, 64, 65, 66], "calc_rang": 1, "preview_num": 1, "append_dataset": 1, "widget_ax": 1, "messag": 1, "entri": [1, 16], "initialis": [1, 16, 65], "app": 1, "metric_range_graph": 1, "300": 1, "num_step_experi": 1, "6": [1, 65], "num_images_scroll_show": 1, "7": [1, 60, 65], "folder": [1, 63, 66], "tran": [1, 2, 8], "menu": [1, 63, 66], "drop": 1, "down": 1, "main_menu": 1, "iter": 1, "action_stor": 1, "connect_func": 1, "maketh": [1, 17], "info": [1, 17], "about": [1, 17, 65], "http": [1, 5, 17, 63, 64, 65, 66], "www": [1, 5, 17], "pythontutori": [1, 17], "net": [1, 17], "pyqt": [1, 17], "qthread": [1, 17], "parent": 1, "qvalid": 1, "int": [1, 6, 7, 64], "tupl": [1, 6], "state": 1, "input_str": 1, "txt": 1, "path": [1, 2, 8, 64], "colour": 1, "text": [1, 8, 54], "when": [1, 5, 8, 43, 63, 64, 66], "checkbox": 1, "press": [1, 66], "kei": [1, 2, 8, 65], "param_group": 1, "sliders_dict": 1, "info_item": 1, "init": [1, 64], "param": [1, 6, 65], "_min": 1, "_max": 1, "num_step": [1, 8], "mpl_canva": 1, "button": [1, 66], "appli": [1, 2, 63, 67], "new": [1, 6, 60, 63], "v": 1, "gener": [2, 5, 21, 59, 66], "constructor": [2, 21], "both": [2, 21, 67], "same": [2, 5, 21, 43, 65, 67], "refer": [2, 5, 8, 21, 43, 59, 65, 67], "cach": 2, "fucntion": 2, "have": [2, 5, 7, 8, 43, 56, 60, 61, 63, 65, 67], "been": 2, "alreadi": 2, "do": [2, 8, 59, 61, 63], "thi": [2, 6, 8, 36, 59, 60, 63, 64, 65, 66, 67], "convert": [2, 7], "numpi": [2, 8, 59, 65], "hashabl": 2, "sinc": [2, 6, 64], "arr": 2, "mutabl": 2, "achiev": [2, 59], "byte": 2, "load": [2, 8, 60, 66], "buffer": 2, "ref": 2, "func": 2, "image_load": 2, "image_pre_process": 2, "image_post_process": 2, "image_list_to_transform": 2, "human_exp_csv": 2, "store": [2, 42, 64, 65], "commun": 2, "via": 2, "paramet": [2, 5, 7, 8, 43, 61, 63, 65, 67], "file": [2, 3, 8, 63, 64, 66], "dictionari": [2, 64, 65], "valu": [2, 5, 6, 7, 8, 43, 63, 64, 65], "callabl": [2, 65], "option": [2, 6, 59, 64, 66], "default": [2, 5, 7, 8, 43, 63, 65], "which": [2, 5, 8, 42, 43, 59, 60, 61, 67], "after": [2, 8, 63], "For": [2, 64, 65], "crop": [2, 8, 59, 63], "differ": [2, 6, 61], "If": [2, 60, 66], "transformed_imag": 2, "metrics_to_us": [2, 8], "index": [2, 5, 8, 43, 60, 61, 67], "file_path": 2, "blueprint": [2, 22], "loader": [2, 22], "abc": 2, "abstract": 2, "avaiabl": [3, 24], "img": [3, 8], "meta_dict": 3, "greycal": 3, "max_lumin": 3, "200": 3, "size": [3, 5, 6, 7, 8, 39, 59, 66], "512": 3, "forward": [5, 6], "train": [5, 6], "gaussian_filt": [5, 6], "helper": [5, 8, 44, 55, 56], "comput": [5, 6, 8, 44, 63], "return_imag": [5, 43, 64], "mean": [5, 65, 67], "absolut": 5, "error": [5, 8, 60, 65, 67], "two": [5, 43, 61, 64, 67], "must": [5, 43], "dimens": [5, 43], "whether": [5, 43], "scalar": [5, 6, 43, 64], "im_ref": [5, 43, 65], "im_comp": [5, 43, 65], "instanc": [5, 6, 43], "np": [5, 7, 8, 43, 65], "comparison": [5, 43, 59, 65], "arbitrari": [5, 43], "keyword": [5, 43], "argument": [5, 43, 65], "type": [5, 6, 7, 8, 43], "squar": [5, 7, 8, 63, 65, 67], "root": 5, "peak": 5, "nois": [5, 7, 49], "ratio": 5, "en": 5, "wikipedia": 5, "org": 5, "wiki": 5, "peak_sign": 5, "noise_ratio": 5, "The": [5, 36, 37, 39, 40, 42, 59, 63, 66, 67], "normalis": [5, 36, 64], "take": [5, 6, 59, 63, 65, 66], "psnr": 5, "deep": [5, 67], "structur": [5, 43, 67], "textur": 5, "similar": [5, 43, 64, 66, 67], "code": [5, 8, 56, 60], "github": [5, 61, 63, 64, 65, 66], "com": [5, 63, 64, 65, 66], "dingkeyan93": 5, "pytorch": [5, 59, 60], "backend": [5, 59], "It": [5, 59, 60, 67], "robust": 5, "varianc": 5, "e": [5, 6, 60, 61, 63, 65, 67], "g": [5, 6, 60, 61, 63, 65], "evalu": [5, 59, 61, 67], "gan": 5, "mild": 5, "geometr": [5, 7, 50], "pair": [5, 59], "strictli": 5, "align": 5, "network": [5, 36], "alex": 5, "reduct": 5, "learn": [5, 67], "perceptu": [5, 67], "patch": 5, "pretrain": 5, "choos": 5, "vgg": 5, "squeez": 5, "how": [5, 8, 56, 61, 63, 64, 66], "reduc": 5, "over": [5, 8, 60, 63, 64], "batch": [5, 6], "sum": 5, "multi": 5, "scale": 5, "measur": [5, 43, 63, 67], "give": [5, 43, 66, 67], "loss": [5, 43, 67], "dissimilar": [5, 43], "note": [5, 8, 65], "small": [5, 8], "below": 5, "180": [5, 64], "pixel": [5, 7], "kernel": [5, 6, 7, 64], "compat": 5, "4": [5, 6, 61, 64, 65], "downsiz": 5, "oper": [5, 64, 67], "sigma": [5, 6, 43], "k1": [5, 6, 43], "01": [5, 6, 43], "k2": [5, 6, 43], "03": [5, 6, 43], "mssim_kernel_s": 5, "laplacian": 5, "pyramid": [5, 42], "propos": 5, "valero": 5, "laparra": 5, "et": 5, "al": 5, "uv": 5, "lapeva": 5, "paper": [5, 61], "2016_hvei": 5, "pdf": 5, "qualiti": [5, 7, 59, 61, 64, 67], "associ": 5, "earli": 5, "visual": [5, 61], "system": 5, "local": [5, 64], "lumin": [5, 59, 63, 66], "subtract": 5, "gain": 5, "control": 5, "nlpd_k": 5, "ssim_kernel_s": [5, 43], "avail": [5, 7], "all_param": 5, "provid": [5, 59, 61, 63, 64], "all_metr": 5, "data_rang": 6, "float": [6, 7, 8, 64, 65], "255": [6, 7], "size_averag": 6, "win_siz": 6, "win_sigma": 6, "channel": 6, "3": [6, 8, 60, 61, 64], "spatial_dim": 6, "2": [6, 7, 8, 61, 65], "weight": 6, "k": 6, "x": [6, 8], "tensor": 6, "y": [6, 8, 60], "defin": [6, 64, 65], "perform": [6, 61, 67], "everi": 6, "should": [6, 60], "overridden": 6, "although": 6, "recip": 6, "pass": [6, 64, 65], "within": [6, 63, 65], "one": 6, "afterward": 6, "instead": [6, 8, 64], "former": 6, "care": 6, "regist": 6, "hook": 6, "while": 6, "latter": 6, "silent": 6, "ignor": 6, "nonnegative_ssim": 6, "win": 6, "d": 6, "torch": 6, "gauss": 6, "interfac": [6, 59], "m": 6, "n": [6, 60, 63, 66], "c": [6, 60], "h": [6, 7], "w": 6, "usual": 6, "averag": 6, "normal": [6, 7, 8, 64], "distribut": 6, "accord": [6, 67], "level": 6, "constant": 6, "try": 6, "larger": 6, "you": [6, 60, 61, 63, 64, 65, 66], "neg": 6, "nan": 6, "forc": 6, "respons": [6, 67], "nonneg": 6, "relu": 6, "acceptable_perc": 7, "9": [7, 60], "max_it": 7, "50": 7, "reject_low_nois": 7, "_base_nois": 7, "gaussian": 7, "clip": [7, 65], "ad": [7, 59, 64], "std": 7, "standard": [7, 59], "deviat": 7, "adjust": [7, 63, 65], "random": 7, "hyperspher": 7, "radiu": 7, "epsilon": 7, "prob": 7, "salt": 7, "pepper": 7, "compress": 7, "probabl": 7, "angl": 7, "around": [7, 60], "centr": [7, 8], "skimag": 7, "area": 7, "beyond": 7, "fill": 7, "amount": 7, "degre": 7, "translat": [7, 59], "horizont": 7, "shift": 7, "proport": 7, "vertic": 7, "scale_factor": [7, 8], "digit": 7, "zoom": [7, 8], "percentag": [7, 8], "onli": [7, 8, 63, 64, 66], "2x": [7, 8], "out": [7, 8, 59], "sampl": [7, 51], "start": [7, 51, 64, 65, 66], "threshold": 7, "100": [7, 8, 64], "conver": 7, "binari": 7, "float32": 7, "kernel_s": 7, "convolut": [7, 39], "odd": [7, 64], "number": [7, 63], "b": [7, 63, 66], "less": 7, "decreas": 7, "increas": 7, "101": 7, "encod": 7, "decod": 7, "better": 7, "ident": 7, "sat": 7, "distort": [7, 59, 61, 64, 65, 67], "recommend": [7, 60, 63], "min": [7, 8, 64, 65], "max": [7, 8, 64, 65], "init_valu": [7, 64, 65], "each": [7, 8], "dpi": 8, "polar": 8, "figurecanvasqtagg": 8, "im": 8, "resiz": [8, 59], "250": 8, "border": 8, "frame": 8, "return_dict": 8, "string": 8, "length": 8, "append_char": 8, "plu": 8, "ubyt": 8, "keep_siz": 8, "best": [8, 60, 67], "post": 8, "process": [8, 59, 64, 67], "half": 8, "origin": 8, "crope": 8, "transform_funct": 8, "transform_param": 8, "hold": [8, 36, 37, 39, 40, 42], "item": [8, 63], "correspond": [8, 63, 66], "image_path": 8, "rgb": 8, "128": 8, "specifi": [8, 64], "side": 8, "longest": 8, "matplotlib": [8, 56], "current": [8, 56], "just": [8, 56, 67], "look": [8, 56], "bar_nam": 8, "var_nam": 8, "ax": 8, "lim": 8, "var_valu": 8, "_plot": 8, "change_trans_value_sign": 8, "send": 8, "wa": 8, "trans_str_valu": 8, "transform_valu": 8, "pbar_sign": 8, "stop_flag": 8, "non": [8, 64], "initi": 8, "other": [8, 59], "method": [8, 14, 15, 19, 43], "being": [8, 67], "simpler": 8, "contain": [8, 42, 63, 66], "fix": 8, "across": 8, "whole": [8, 63, 64, 65, 66], "paramt": [8, 63], "ranc": 8, "individu": 8, "singl": [8, 65], "human_scor": 8, "metric_scor": 8, "scatter": 8, "correl": [8, 59, 66, 67], "metrics_nam": 8, "transformation_nam": 8, "radar": 8, "spider": 8, "annot": 8, "x_label": 8, "y_label": 8, "radar_nam": 8, "figur": [8, 57], "getter": 8, "dir": 8, "pickle_path": 8, "pkl": 8, "df": 8, "trans_nam": 8, "results_ord": 8, "save_dir": 8, "times_taken": 8, "iqm_scores_df": 8, "reult": 8, "csv": [8, 66], "dict_": 8, "pickl": 8, "modul": [10, 11, 20, 23, 33, 34, 35, 36, 37, 38, 39, 40, 42, 48, 53, 57, 61, 62], "__init__": [14, 15, 19, 43, 65], "expert": [36, 37, 39, 40, 42], "divis": 36, "includ": [36, 59, 63, 64, 65], "generalis": 36, "layer": 37, "wavelet_transform": 37, "wavelet": [37, 40], "like": [39, 60, 65, 67], "pad": 39, "maintain": 39, "domain": [40, 42], "filter": 42, "exeprt": 42, "model": [42, 67], "learnt": 42, "steerabl": 42, "spatial": 42, "taken": 42, "_": 42, "matlab": 42, "implement": [42, 59], "simon1995": 42, "enabl": 59, "quick": [59, 66], "visualis": [59, 61], "through": [59, 61, 63, 64, 66], "conveni": 59, "python": [59, 60, 63], "graphic": [59, 67], "mani": 59, "box": 59, "also": [59, 64, 65, 67], "straightforward": 59, "automat": 59, "well": [59, 60, 61], "compar": [59, 64, 66, 67], "understand": [59, 61], "particular": 59, "fail": 59, "improv": 59, "timescal": 59, "manag": [59, 61], "storag": 59, "against": [59, 66], "desir": [59, 64], "ani": [59, 61, 63, 65], "conform": [59, 61], "select": [59, 61, 63, 66], "further": [59, 61], "stanard": 59, "see": [59, 61, 64, 66], "document": [59, 64], "more": [59, 64], "detail": [59, 61], "pre": 59, "featur": [59, 61], "screen": [59, 63], "calibr": [59, 66], "capabilit": 59, "form": [59, 65], "displai": [59, 66], "view": [59, 61, 63, 64, 65, 66], "truthfulli": 59, "ha": [59, 66], "conduct": [59, 61], "practition": [59, 61, 67], "analys": [59, 61], "crucial": 59, "real": 59, "world": 59, "design": 59, "facilit": [59, 61], "collect": 59, "particip": [59, 66], "ordin": 59, "perceiv": [59, 67], "expos": 59, "specif": [59, 67], "recurs": 59, "pick": 59, "highest": 59, "respect": [59, 67], "undistort": 59, "underli": 59, "sort": [59, 66], "algorithm": [59, 66, 67], "tutori": 59, "gui": 59, "develop": 59, "handl": 59, "cover": 59, "opencv": 59, "task": 59, "advantag": 59, "framework": 59, "gpu": [59, 60], "hardwar": 59, "acceler": 59, "import": [60, 63, 64, 65, 67], "fresh": 60, "virtual": 60, "environ": 60, "depend": 60, "clash": 60, "version": [60, 62], "newer": 60, "work": 60, "anaconda": 60, "conda": 60, "iqm_vi": [60, 61, 63, 64, 65], "activ": 60, "would": [60, 63], "cuda": 60, "head": 60, "websit": 60, "download": 60, "relev": 60, "packag": [60, 61, 62, 64, 65], "don": 60, "skip": 60, "step": 60, "13": 60, "torchvis": 60, "14": 60, "torchaudio": 60, "nvidia": 60, "now": [60, 64, 65], "pypi": 60, "pip": 60, "demonstr": [60, 61], "There": [60, 67], "some": [60, 63, 64], "know": 60, "conflict": 60, "10": 60, "ubuntu": 60, "could": 60, "qt": 60, "platform": 60, "plugin": 60, "Then": [60, 65], "miss": 60, "sudo": 60, "apt": 60, "libxcb": 60, "cursor0": 60, "doe": 60, "solv": 60, "problem": 60, "first": [60, 66, 67], "latest": 60, "scratch": 60, "reinstal": 60, "toolbox": 61, "our": [61, 65], "video": 61, "illustr": 61, "read": [61, 66], "depth": 61, "softwar": [61, 67], "abl": 61, "comprehens": 61, "variou": 61, "These": [61, 64, 67], "offer": 61, "round": 61, "under": 61, "scenario": [61, 67], "without": 61, "procedur": 61, "investig": 61, "wai": 61, "firstli": 61, "inspect": 61, "distor": 61, "behav": 61, "expect": 61, "secondli": 61, "spacial": [61, 64], "repons": 61, "visit": 61, "customis": [61, 66], "subpackag": 62, "submodul": 62, "content": 62, "ui_wrapp": 62, "notebook": [63, 64, 65, 66], "mattclifford1": [63, 64, 65, 66], "tree": [63, 64, 65, 66], "tutorial_1": 63, "making_the_ui": 63, "ipynb": [63, 64, 65, 66], "In": [63, 64, 65, 66, 67], "go": [63, 64, 66], "launch": [63, 66], "theh": 63, "To": [63, 64, 66], "packg": 63, "copi": 63, "past": 63, "script": 63, "produc": [63, 67], "blank": 63, "bar": 63, "navig": 63, "directori": 63, "place": 63, "befor": [63, 64], "smaller": 63, "boarder": 63, "maximum": 63, "candela": 63, "per": 63, "meter": 63, "tutorial_2": 64, "grip": 64, "peic": 64, "basic": 64, "aspect": 64, "let": [64, 65], "": [64, 65, 67], "filepath": 64, "feel": 64, "free": 64, "your": [64, 66], "own": [64, 65, 66], "image1": 64, "image2": 64, "print": 64, "f": 64, "39": 64, "io": 64, "html": 64, "later": [64, 65], "qualit": [64, 67], "mse_imag": 64, "ssim_imag": 64, "littl": 64, "inform": [64, 66], "want": [64, 66], "41": 64, "jpg": 64, "comp": 64, "zero": 64, "everyth": [64, 66], "maker": 64, "tutorial_3": 65, "advanc": 65, "expand": 65, "exactli": 65, "A": 65, "peel": 65, "off": 65, "extra": 65, "word": 65, "might": [65, 66], "def": 65, "custom_mae_funct": 65, "l1": 65, "ab": 65, "still": 65, "abov": 65, "custom_mae_class": 65, "att": 65, "dummy_arg": 65, "param1": 65, "shown": [65, 66], "dummi": 65, "tell": 65, "follow": 65, "shape": 65, "bound": 65, "anyth": 65, "custom_bright": 65, "put": 65, "8": 65, "kodim01": 65, "png": 65, "kodim02": 65, "tutorial_4": 66, "running_an_experi": 66, "previou": 66, "thing": 66, "onc": 66, "readi": 66, "pairwis": 66, "most": 66, "until": 66, "human": [66, 67], "On": 66, "disagre": 66, "serv": 67, "attempt": 67, "captur": 67, "goal": 67, "recreat": 67, "psychophys": 67, "utilis": 67, "benchmark": 67, "where": 67, "too": 67, "expens": 67, "obtain": 67, "plethora": 67, "simplest": 67, "euclidean": 67, "space": 67, "tradit": 67, "literatur": 67, "categoris": 67, "group": 67, "consist": 67, "premis": 67, "remain": 67, "unchang": 67, "despit": 67, "presenc": 67, "adher": 67, "principl": 67, "second": 67, "aim": 67, "visibl": 67, "much": 67, "recent": 67, "mimic": 67, "percept": 67, "rate": 67, "quantit": 67, "necessari": 67, "gather": 67, "empir": 67, "profil": 67, "overse": 67, "context": 67, "mai": 67, "behaviour": 67, "observ": 67, "distanc": 67, "invari": 67, "often": 67, "extrem": 67, "experiment": 67, "lend": 67, "itself": 67, "interact": 67, "why": 67}, "objects": {"": [[10, 0, 0, "-", "IQM_Vis"]], "IQM_Vis": [[11, 0, 0, "-", "UI"], [20, 0, 0, "-", "data_handlers"], [23, 0, 0, "-", "examples"], [33, 0, 0, "-", "metrics"], [48, 0, 0, "-", "transforms"], [52, 0, 0, "-", "ui_wrapper"], [53, 0, 0, "-", "utils"], [58, 0, 0, "-", "version"]], "IQM_Vis.UI": [[12, 0, 0, "-", "custom_widgets"], [13, 0, 0, "-", "experiment_mode"], [14, 1, 1, "", "images"], [1, 0, 0, "-", "images"], [15, 1, 1, "", "layout"], [1, 0, 0, "-", "layout"], [16, 0, 0, "-", "main"], [17, 0, 0, "-", "threads"], [18, 0, 0, "-", "utils"], [19, 1, 1, "", "widgets"], [1, 0, 0, "-", "widgets"]], "IQM_Vis.UI.custom_widgets": [[1, 1, 1, "", "ClickLabel"], [1, 1, 1, "", "ProgressBar"]], "IQM_Vis.UI.custom_widgets.ClickLabel": [[1, 2, 1, "", "clicked"], [1, 3, 1, "", "mousePressEvent"]], "IQM_Vis.UI.experiment_mode": [[1, 1, 1, "", "make_experiment"], [1, 1, 1, "", "reset_image_widget_to_black"], [1, 4, 1, "", "sort_list"]], "IQM_Vis.UI.experiment_mode.make_experiment": [[1, 3, 1, "", "calc_max_comparisons"], [1, 3, 1, "", "change_experiment_images"], [1, 3, 1, "", "click_completed"], [1, 3, 1, "", "clicked_image"], [1, 3, 1, "", "closeEvent"], [1, 3, 1, "", "experiment_layout"], [1, 3, 1, "", "finish_experiment"], [1, 3, 1, "", "get_all_images"], [1, 3, 1, "", "get_metric_scores"], [1, 3, 1, "", "get_single_transform_im"], [1, 3, 1, "", "init_style"], [1, 3, 1, "", "partition"], [1, 3, 1, "", "quick_sort"], [1, 3, 1, "", "quit"], [1, 2, 1, "", "reset_clicked_image"], [1, 3, 1, "", "reset_experiment"], [1, 3, 1, "", "save_experiment"], [1, 2, 1, "", "saved_experiment"], [1, 3, 1, "", "setup_experiment"], [1, 3, 1, "", "show_all_images"], [1, 3, 1, "", "start_experiment"], [1, 3, 1, "", "swap_inds"], [1, 3, 1, "", "toggle_experiment"]], "IQM_Vis.UI.experiment_mode.reset_image_widget_to_black": [[1, 3, 1, "", "change_to_solid"], [1, 2, 1, "", "completed"], [1, 3, 1, "", "stop"]], "IQM_Vis.UI.images": [[14, 3, 1, "", "__init__"], [1, 1, 1, "", "images"], [1, 4, 1, "", "message_on_plot"]], "IQM_Vis.UI.images.images": [[1, 3, 1, "", "change_data"], [1, 3, 1, "", "change_data_click_im"], [1, 3, 1, "", "change_metric_correlations_graph"], [1, 3, 1, "", "change_metric_range_graph"], [1, 3, 1, "", "change_preview_images"], [1, 3, 1, "", "change_to_data_num"], [1, 3, 1, "", "change_to_specific_trans"], [1, 3, 1, "", "completed_range_results"], [1, 3, 1, "", "display_images"], [1, 3, 1, "", "display_metric_correlation_plot"], [1, 3, 1, "", "display_metric_images"], [1, 3, 1, "", "display_metric_range_plot"], [1, 3, 1, "", "display_metrics"], [1, 3, 1, "", "display_metrics_graph"], [1, 3, 1, "", "display_metrics_text"], [1, 3, 1, "", "display_radar_plots"], [1, 3, 1, "", "get_metrics_over_all_trans_with_init_values"], [1, 3, 1, "", "init_worker_thread"], [1, 3, 1, "", "load_experiment_from_dir"], [1, 3, 1, "", "load_human_experiment"], [1, 3, 1, "", "load_new_images_folder"], [1, 3, 1, "", "load_new_single_image"], [1, 3, 1, "", "plot_metric_range_mlp"], [1, 3, 1, "", "plot_radar_graph"], [1, 3, 1, "", "plot_radar_mlp"], [1, 3, 1, "", "redo_plots"], [1, 2, 1, "", "request_range_work"], [1, 3, 1, "", "set_preview_images"], [1, 3, 1, "", "set_save_dir_mpl"], [1, 3, 1, "", "stopped_range_worker"], [1, 3, 1, "", "update_datastore_image_list"], [1, 2, 1, "", "view_correlation_instance"]], "IQM_Vis.UI.layout": [[15, 3, 1, "", "__init__"], [1, 1, 1, "", "layout"]], "IQM_Vis.UI.layout.layout": [[1, 3, 1, "", "init_layout"], [1, 3, 1, "", "init_style"]], "IQM_Vis.UI.main": [[1, 1, 1, "", "make_app"], [1, 4, 1, "", "set_checked_menu_from_iterable"]], "IQM_Vis.UI.main.make_app": [[1, 3, 1, "", "change_save_folder"], [1, 3, 1, "", "clear_all_cache_data"], [1, 3, 1, "", "closeEvent"], [1, 3, 1, "", "construct_UI"], [1, 3, 1, "", "get_menu_checkboxes"], [1, 3, 1, "", "load_all_metric_images"], [1, 3, 1, "", "load_all_metrics"], [1, 3, 1, "", "load_all_transforms"], [1, 3, 1, "", "make_menu"], [1, 3, 1, "", "make_status_bar"], [1, 3, 1, "", "quit"], [1, 3, 1, "", "reset_correlation_data"]], "IQM_Vis.UI.threads": [[1, 1, 1, "", "get_range_results_worker"]], "IQM_Vis.UI.threads.get_range_results_worker": [[1, 2, 1, "", "completed"], [1, 2, 1, "", "current_image"], [1, 3, 1, "", "do_work"], [1, 2, 1, "", "progress"], [1, 3, 1, "", "stop"], [1, 2, 1, "", "stopped"]], "IQM_Vis.UI.utils": [[1, 4, 1, "", "add_layout_to_tab"]], "IQM_Vis.UI.widgets": [[19, 3, 1, "", "__init__"], [1, 1, 1, "", "custom_float_validator"], [1, 4, 1, "", "get_float_validator"], [1, 4, 1, "", "is_almost_float"], [1, 4, 1, "", "is_float"], [1, 4, 1, "", "make_float_from_text"], [1, 1, 1, "", "widgets"]], "IQM_Vis.UI.widgets.custom_float_validator": [[1, 3, 1, "", "validate"]], "IQM_Vis.UI.widgets.widgets": [[1, 3, 1, "", "change_display_im_display_brightness"], [1, 3, 1, "", "change_display_im_rgb_brightness"], [1, 3, 1, "", "change_display_im_size"], [1, 3, 1, "", "change_graph_size"], [1, 3, 1, "", "change_human_scores_after_exp"], [1, 3, 1, "", "change_num_steps"], [1, 3, 1, "", "change_plot_lims"], [1, 3, 1, "", "change_post_processing"], [1, 3, 1, "", "change_pre_processing"], [1, 3, 1, "", "change_text_exp_trans"], [1, 3, 1, "", "change_text_export_trans"], [1, 3, 1, "", "colour_lineedit"], [1, 3, 1, "", "disable_settings_button"], [1, 3, 1, "", "display_slider_num"], [1, 3, 1, "", "edit_slider_vals"], [1, 3, 1, "", "enable_settings_button"], [1, 3, 1, "", "export_trans_images"], [1, 3, 1, "", "generic_value_change"], [1, 3, 1, "", "init_widgets"], [1, 3, 1, "", "launch_experiment"], [1, 3, 1, "", "make_slider_range"], [1, 3, 1, "", "open_mlp_new"], [1, 3, 1, "", "reset_slider_group"], [1, 3, 1, "", "reset_sliders"], [1, 3, 1, "", "set_image_name_text"], [1, 3, 1, "", "update_image_settings"], [1, 3, 1, "", "update_progress"], [1, 3, 1, "", "update_status_bar"]], "IQM_Vis.data_handlers": [[21, 0, 0, "-", "data_api"], [22, 0, 0, "-", "data_api_abstract"]], "IQM_Vis.data_handlers.data_api": [[2, 1, 1, "", "cache_metric_call"], [2, 4, 1, "", "cache_tracked"], [2, 1, 1, "", "dataset_holder"], [2, 4, 1, "", "get_image_name"]], "IQM_Vis.data_handlers.data_api.cache_metric_call": [[2, 3, 1, "", "__call__"]], "IQM_Vis.data_handlers.data_api.dataset_holder": [[2, 3, 1, "", "add_metric"], [2, 3, 1, "", "add_metric_image"], [2, 3, 1, "", "clear_all_cache"], [2, 3, 1, "", "get_image_dataset_list"], [2, 3, 1, "", "get_image_to_transform"], [2, 3, 1, "", "get_image_to_transform_name"], [2, 3, 1, "", "get_metric_images"], [2, 3, 1, "", "get_metrics"], [2, 3, 1, "", "get_reference_image"], [2, 3, 1, "", "get_reference_image_by_index"], [2, 3, 1, "", "get_reference_image_name"], [2, 3, 1, "", "get_reference_unprocessed"], [2, 3, 1, "", "load_image_list"]], "IQM_Vis.data_handlers.data_api_abstract": [[2, 1, 1, "", "base_dataloader"], [2, 1, 1, "", "base_dataset_loader"]], "IQM_Vis.data_handlers.data_api_abstract.base_dataloader": [[2, 3, 1, "", "get_image_to_transform"], [2, 3, 1, "", "get_image_to_transform_name"], [2, 3, 1, "", "get_metric_images"], [2, 3, 1, "", "get_metrics"], [2, 3, 1, "", "get_reference_image"], [2, 3, 1, "", "get_reference_image_name"], [2, 5, 1, "", "metric_images"], [2, 5, 1, "", "metrics"]], "IQM_Vis.data_handlers.data_api_abstract.base_dataset_loader": [[2, 3, 1, "", "get_reference_image_by_index"]], "IQM_Vis.examples": [[24, 0, 0, "-", "all"], [25, 0, 0, "-", "dataset"], [26, 0, 0, "-", "dists"], [27, 0, 0, "-", "experiment"], [28, 0, 0, "-", "images"], [29, 0, 0, "-", "kodak"], [30, 0, 0, "-", "multiple"], [31, 0, 0, "-", "new_api"], [32, 0, 0, "-", "simple"]], "IQM_Vis.examples.all": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.dataset": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.dists": [[3, 4, 1, "", "correct"], [3, 4, 1, "", "load_and_calibrate_image"], [3, 4, 1, "", "run"]], "IQM_Vis.examples.experiment": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.kodak": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.multiple": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.new_api": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.simple": [[3, 4, 1, "", "run"]], "IQM_Vis.metrics": [[34, 0, 0, "-", "NLPD_torch"], [43, 1, 1, "", "SSIM"], [6, 0, 0, "-", "SSIM"], [5, 4, 1, "", "get_all_IQM_params"], [5, 4, 1, "", "get_all_metric_images"], [5, 4, 1, "", "get_all_metrics"], [44, 0, 0, "-", "metric_utils"], [45, 0, 0, "-", "non_perceptual"], [46, 0, 0, "-", "perceptual_DL"], [47, 0, 0, "-", "perceptual_trad"]], "IQM_Vis.metrics.NLPD_torch": [[35, 0, 0, "-", "layers"], [37, 0, 0, "-", "pyramids"], [38, 0, 0, "-", "utils"]], "IQM_Vis.metrics.NLPD_torch.layers": [[36, 0, 0, "-", "divisive_normalisation"]], "IQM_Vis.metrics.NLPD_torch.utils": [[39, 0, 0, "-", "conv"], [40, 0, 0, "-", "fourier"], [41, 0, 0, "-", "interp1d"], [42, 0, 0, "-", "pyramid_filters"]], "IQM_Vis.metrics.SSIM": [[43, 3, 1, "", "__call__"], [43, 3, 1, "", "__init__"], [6, 0, 0, "-", "ssim"]], "IQM_Vis.metrics.SSIM.ssim": [[6, 1, 1, "", "MS_SSIM"], [6, 1, 1, "", "SSIM"], [6, 4, 1, "", "gaussian_filter"], [6, 4, 1, "", "ms_ssim"], [6, 4, 1, "", "ssim"]], "IQM_Vis.metrics.SSIM.ssim.MS_SSIM": [[6, 3, 1, "", "forward"], [6, 2, 1, "", "training"]], "IQM_Vis.metrics.SSIM.ssim.SSIM": [[6, 3, 1, "", "forward"], [6, 2, 1, "", "training"]], "IQM_Vis.metrics.non_perceptual": [[5, 1, 1, "", "MAE"], [5, 1, 1, "", "MSE"], [5, 1, 1, "", "RMSE"], [5, 1, 1, "", "one_over_PSNR"]], "IQM_Vis.metrics.non_perceptual.MAE": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.MSE": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.RMSE": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.one_over_PSNR": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_DL": [[5, 1, 1, "", "DISTS"], [5, 1, 1, "", "LPIPS"]], "IQM_Vis.metrics.perceptual_DL.DISTS": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_DL.LPIPS": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad": [[5, 1, 1, "", "MS_SSIM"], [5, 1, 1, "", "NLPD"], [5, 1, 1, "", "SSIM"]], "IQM_Vis.metrics.perceptual_trad.MS_SSIM": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad.NLPD": [[5, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad.SSIM": [[5, 3, 1, "", "__call__"]], "IQM_Vis.transforms": [[49, 0, 0, "-", "additive_noise"], [50, 0, 0, "-", "affine"], [51, 0, 0, "-", "effects"], [7, 4, 1, "", "get_all_transforms"]], "IQM_Vis.transforms.additive_noise": [[7, 1, 1, "", "Gaussian_noise"], [7, 1, 1, "", "noise_hypersphere"], [7, 4, 1, "", "salt_and_pepper_noise"]], "IQM_Vis.transforms.affine": [[7, 4, 1, "", "rotation"], [7, 4, 1, "", "x_shift"], [7, 4, 1, "", "y_shift"], [7, 4, 1, "", "zoom_image"]], "IQM_Vis.transforms.effects": [[7, 4, 1, "", "binary_threshold"], [7, 4, 1, "", "blur"], [7, 4, 1, "", "brightness"], [7, 4, 1, "", "brightness_hsv"], [7, 4, 1, "", "contrast"], [7, 4, 1, "", "hue"], [7, 4, 1, "", "jpeg_compression"], [7, 4, 1, "", "saturation"]], "IQM_Vis.ui_wrapper": [[0, 4, 1, "", "check_pyqt_install_deps"], [0, 1, 1, "", "make_UI"], [0, 4, 1, "", "test_datastore_attributes"], [0, 1, 1, "", "transform_wrapper"]], "IQM_Vis.ui_wrapper.make_UI": [[0, 3, 1, "", "show"]], "IQM_Vis.ui_wrapper.transform_wrapper": [[0, 3, 1, "", "__call__"]], "IQM_Vis.utils": [[54, 0, 0, "-", "gui_utils"], [55, 0, 0, "-", "image_utils"], [56, 0, 0, "-", "plot_utils"], [57, 0, 0, "-", "save_utils"]], "IQM_Vis.utils.gui_utils": [[8, 1, 1, "", "MplCanvas"], [8, 4, 1, "", "change_im"], [8, 4, 1, "", "get_image_pair_name"], [8, 4, 1, "", "get_metric_image_name"], [8, 4, 1, "", "get_resolutions"], [8, 4, 1, "", "get_trans_dict_from_str"], [8, 4, 1, "", "get_transformed_image_name"], [8, 4, 1, "", "str_to_len"]], "IQM_Vis.utils.image_utils": [[8, 4, 1, "", "calibrate_brightness"], [8, 4, 1, "", "crop_centre"], [8, 4, 1, "", "get_transform_image"], [8, 4, 1, "", "load_image"], [8, 4, 1, "", "resize_image"], [8, 4, 1, "", "resize_to_longest_side"], [8, 4, 1, "", "save_image"]], "IQM_Vis.utils.plot_utils": [[8, 1, 1, "", "bar_plotter"], [8, 4, 1, "", "click_scatter"], [8, 4, 1, "", "compute_metric_for_human_correlation"], [8, 4, 1, "", "compute_metrics_over_range"], [8, 4, 1, "", "compute_metrics_over_range_single_trans"], [8, 4, 1, "", "get_all_single_transform_params"], [8, 4, 1, "", "get_all_slider_values"], [8, 4, 1, "", "get_correlation_plot"], [8, 4, 1, "", "get_radar_plots_avg_plots"], [8, 4, 1, "", "get_transform_range_plots"], [8, 4, 1, "", "hover_scatter"], [8, 1, 1, "", "line_plotter"], [8, 1, 1, "", "radar_plotter"], [8, 1, 1, "", "scatter_plotter"], [8, 4, 1, "", "update_annot"]], "IQM_Vis.utils.plot_utils.bar_plotter": [[8, 3, 1, "", "plot"], [8, 3, 1, "", "set_plot_lims"], [8, 3, 1, "", "set_style"], [8, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.line_plotter": [[8, 3, 1, "", "plot"], [8, 3, 1, "", "set_plot_lims"], [8, 3, 1, "", "set_style"], [8, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.radar_plotter": [[8, 3, 1, "", "plot"], [8, 3, 1, "", "set_plot_lims"], [8, 3, 1, "", "set_style"], [8, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.scatter_plotter": [[8, 3, 1, "", "plot"], [8, 3, 1, "", "set_plot_lims"], [8, 3, 1, "", "set_style"], [8, 3, 1, "", "show"]], "IQM_Vis.utils.save_utils": [[8, 6, 1, "", "DEFAULT_SAVE_DIR"], [8, 4, 1, "", "get_IQM_file"], [8, 4, 1, "", "get_human_scores_file"], [8, 4, 1, "", "get_human_times_file"], [8, 4, 1, "", "get_image_name_from_human_scores"], [8, 4, 1, "", "get_image_processing_file"], [8, 4, 1, "", "get_original_image_file"], [8, 4, 1, "", "get_original_unprocessed_image_file"], [8, 4, 1, "", "get_transform_functions_file"], [8, 4, 1, "", "get_transform_params_file"], [8, 4, 1, "", "load_json_dict"], [8, 4, 1, "", "load_obj"], [8, 4, 1, "", "make_name_for_trans"], [8, 4, 1, "", "save_and_merge_df_as_csv"], [8, 4, 1, "", "save_df_as_csv"], [8, 4, 1, "", "save_experiment_results"], [8, 4, 1, "", "save_json_dict"], [8, 4, 1, "", "save_obj"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function", "5": "py:property", "6": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"], "6": ["py", "data", "Python data"]}, "titleterms": {"iqm_vi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 62], "packag": [0, 1, 2, 3, 4, 5, 6, 7, 8], "subpackag": [0, 3, 5], "submodul": [0, 1, 2, 3, 5, 6, 7, 8], "ui_wrapp": [0, 52], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8], "version": [0, 58], "content": [0, 1, 2, 3, 4, 5, 6, 7, 8], "ui": [1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 63, 65], "custom_widget": [1, 12], "experiment_mod": [1, 13], "imag": [1, 4, 14, 28, 63, 64], "layout": [1, 15], "main": [1, 16], "thread": [1, 17], "util": [1, 8, 18, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57], "widget": [1, 19], "data_handl": [2, 20, 21, 22], "data_api": [2, 21], "data_api_abstract": [2, 22], "exampl": [3, 4, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "all": [3, 24, 64], "dataset": [3, 25], "dist": [3, 26], "experi": [3, 27, 59, 63, 66], "kodak": [3, 29], "multipl": [3, 30], "new_api": [3, 31], "simpl": [3, 32, 64], "metric": [5, 6, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 63, 64, 65], "metric_util": [5, 44], "non_perceptu": [5, 45], "perceptual_dl": [5, 46], "perceptual_trad": [5, 47], "ssim": [6, 43], "transform": [7, 48, 49, 50, 51, 63, 64, 65], "additive_nois": [7, 49], "affin": [7, 50], "effect": [7, 51], "gui_util": [8, 54], "image_util": [8, 55], "plot_util": [8, 56], "save_util": [8, 57], "tutori": [9, 61, 63, 64, 65, 66], "nlpd_torch": [34, 35, 36, 37, 38, 39, 40, 41, 42], "layer": [35, 36], "divisive_normalis": 36, "pyramid": 37, "conv": 39, "fourier": 40, "interp1d": 41, "pyramid_filt": 42, "about": [59, 61], "iqm": [59, 61, 67], "vi": [59, 61], "what": [59, 61, 67], "offer": 59, "built": 59, "function": 59, "human": [59, 61], "percept": [59, 61], "softwar": 59, "get": [60, 61], "start": [60, 61], "instal": 60, "test": 60, "common": 60, "issu": 60, "document": 61, "quantit": 61, "analysi": 61, "qualit": 61, "correl": 61, "sourc": 61, "code": 61, "i": [61, 67], "an": [61, 66, 67], "indic": 61, "tabl": 61, "1": 63, "make": [63, 65], "ad": 63, "load": 63, "your": [63, 67], "own": 63, "set": 63, "pre": 63, "process": 63, "post": 63, "displai": 63, "size": 63, "graph": 63, "step": 63, "rgb": 63, "max": 63, "bright": 63, "dispali": 63, "other": 63, "2": 64, "customis": [64, 65], "put": 64, "togeth": 64, "3": 65, "detail": 65, "4": 66, "run": 66, "screen": 66, "info": 66, "finsih": 66, "visualis": 66, "result": 66, "differ": 67, "type": 67, "how": 67, "choos": 67, "For": 67, "task": 67}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "nbsphinx": 4, "sphinx": 57}, "alltitles": {"IQM_Vis package": [[0, "iqm-vis-package"]], "Subpackages": [[0, "subpackages"], [3, "subpackages"], [5, "subpackages"]], "Submodules": [[0, "submodules"], [1, "submodules"], [2, "submodules"], [3, "submodules"], [5, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"]], "IQM_Vis.ui_wrapper module": [[0, "module-IQM_Vis.ui_wrapper"]], "IQM_Vis.version module": [[0, "module-IQM_Vis.version"]], "Module contents": [[0, "module-IQM_Vis"], [1, "module-IQM_Vis.UI"], [2, "module-IQM_Vis.data_handlers"], [3, "module-IQM_Vis.examples"], [4, "module-IQM_Vis.examples.images"], [5, "module-IQM_Vis.metrics"], [6, "module-IQM_Vis.metrics.SSIM"], [7, "module-IQM_Vis.transforms"], [8, "module-IQM_Vis.utils"]], "IQM_Vis.UI package": [[1, "iqm-vis-ui-package"]], "IQM_Vis.UI.custom_widgets module": [[1, "module-IQM_Vis.UI.custom_widgets"]], "IQM_Vis.UI.experiment_mode module": [[1, "module-IQM_Vis.UI.experiment_mode"]], "IQM_Vis.UI.images module": [[1, "module-IQM_Vis.UI.images"]], "IQM_Vis.UI.layout module": [[1, "module-IQM_Vis.UI.layout"]], "IQM_Vis.UI.main module": [[1, "module-IQM_Vis.UI.main"]], "IQM_Vis.UI.threads module": [[1, "module-IQM_Vis.UI.threads"]], "IQM_Vis.UI.utils module": [[1, "module-IQM_Vis.UI.utils"]], "IQM_Vis.UI.widgets module": [[1, "module-IQM_Vis.UI.widgets"]], "IQM_Vis.data_handlers package": [[2, "iqm-vis-data-handlers-package"]], "IQM_Vis.data_handlers.data_api module": [[2, "module-IQM_Vis.data_handlers.data_api"]], "IQM_Vis.data_handlers.data_api_abstract module": [[2, "module-IQM_Vis.data_handlers.data_api_abstract"]], "IQM_Vis.examples package": [[3, "iqm-vis-examples-package"]], "IQM_Vis.examples.all module": [[3, "module-IQM_Vis.examples.all"]], "IQM_Vis.examples.dataset module": [[3, "module-IQM_Vis.examples.dataset"]], "IQM_Vis.examples.dists module": [[3, "module-IQM_Vis.examples.dists"]], "IQM_Vis.examples.experiment module": [[3, "module-IQM_Vis.examples.experiment"]], "IQM_Vis.examples.kodak module": [[3, "module-IQM_Vis.examples.kodak"]], "IQM_Vis.examples.multiple module": [[3, "module-IQM_Vis.examples.multiple"]], "IQM_Vis.examples.new_api module": [[3, "module-IQM_Vis.examples.new_api"]], "IQM_Vis.examples.simple module": [[3, "module-IQM_Vis.examples.simple"]], "IQM_Vis.examples.images package": [[4, "iqm-vis-examples-images-package"]], "IQM_Vis.metrics package": [[5, "iqm-vis-metrics-package"]], "IQM_Vis.metrics.metric_utils module": [[5, "module-IQM_Vis.metrics.metric_utils"]], "IQM_Vis.metrics.non_perceptual module": [[5, "module-IQM_Vis.metrics.non_perceptual"]], "IQM_Vis.metrics.perceptual_DL module": [[5, "module-IQM_Vis.metrics.perceptual_DL"]], "IQM_Vis.metrics.perceptual_trad module": [[5, "module-IQM_Vis.metrics.perceptual_trad"]], "IQM_Vis.metrics.SSIM package": [[6, "iqm-vis-metrics-ssim-package"]], "IQM_Vis.metrics.SSIM.ssim module": [[6, "module-IQM_Vis.metrics.SSIM.ssim"]], "IQM_Vis.transforms package": [[7, "iqm-vis-transforms-package"]], "IQM_Vis.transforms.additive_noise module": [[7, "module-IQM_Vis.transforms.additive_noise"]], "IQM_Vis.transforms.affine module": [[7, "module-IQM_Vis.transforms.affine"]], "IQM_Vis.transforms.effects module": [[7, "module-IQM_Vis.transforms.effects"]], "IQM_Vis.utils package": [[8, "iqm-vis-utils-package"]], "IQM_Vis.utils.gui_utils module": [[8, "module-IQM_Vis.utils.gui_utils"]], "IQM_Vis.utils.image_utils module": [[8, "module-IQM_Vis.utils.image_utils"]], "IQM_Vis.utils.plot_utils module": [[8, "module-IQM_Vis.utils.plot_utils"]], "IQM_Vis.utils.save_utils module": [[8, "module-IQM_Vis.utils.save_utils"]], "Tutorials": [[9, "tutorials"]], "IQM_Vis": [[10, "module-IQM_Vis"], [62, "iqm-vis"]], "IQM_Vis.UI": [[11, "module-IQM_Vis.UI"]], "IQM_Vis.UI.custom_widgets": [[12, "module-IQM_Vis.UI.custom_widgets"]], "IQM_Vis.UI.experiment_mode": [[13, "module-IQM_Vis.UI.experiment_mode"]], "IQM_Vis.UI.images": [[14, "iqm-vis-ui-images"]], "IQM_Vis.UI.layout": [[15, "iqm-vis-ui-layout"]], "IQM_Vis.UI.main": [[16, "module-IQM_Vis.UI.main"]], "IQM_Vis.UI.threads": [[17, "module-IQM_Vis.UI.threads"]], "IQM_Vis.UI.utils": [[18, "module-IQM_Vis.UI.utils"]], "IQM_Vis.UI.widgets": [[19, "iqm-vis-ui-widgets"]], "IQM_Vis.data_handlers": [[20, "module-IQM_Vis.data_handlers"]], "IQM_Vis.data_handlers.data_api": [[21, "module-IQM_Vis.data_handlers.data_api"]], "IQM_Vis.data_handlers.data_api_abstract": [[22, "module-IQM_Vis.data_handlers.data_api_abstract"]], "IQM_Vis.examples": [[23, "module-IQM_Vis.examples"]], "IQM_Vis.examples.all": [[24, "module-IQM_Vis.examples.all"]], "IQM_Vis.examples.dataset": [[25, "module-IQM_Vis.examples.dataset"]], "IQM_Vis.examples.dists": [[26, "module-IQM_Vis.examples.dists"]], "IQM_Vis.examples.experiment": [[27, "module-IQM_Vis.examples.experiment"]], "IQM_Vis.examples.images": [[28, "module-IQM_Vis.examples.images"]], "IQM_Vis.examples.kodak": [[29, "module-IQM_Vis.examples.kodak"]], "IQM_Vis.examples.multiple": [[30, "module-IQM_Vis.examples.multiple"]], "IQM_Vis.examples.new_api": [[31, "module-IQM_Vis.examples.new_api"]], "IQM_Vis.examples.simple": [[32, "module-IQM_Vis.examples.simple"]], "IQM_Vis.metrics": [[33, "module-IQM_Vis.metrics"]], "IQM_Vis.metrics.NLPD_torch": [[34, "module-IQM_Vis.metrics.NLPD_torch"]], "IQM_Vis.metrics.NLPD_torch.layers": [[35, "module-IQM_Vis.metrics.NLPD_torch.layers"]], "IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation": [[36, "module-IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation"]], "IQM_Vis.metrics.NLPD_torch.pyramids": [[37, "module-IQM_Vis.metrics.NLPD_torch.pyramids"]], "IQM_Vis.metrics.NLPD_torch.utils": [[38, "module-IQM_Vis.metrics.NLPD_torch.utils"]], "IQM_Vis.metrics.NLPD_torch.utils.conv": [[39, "module-IQM_Vis.metrics.NLPD_torch.utils.conv"]], "IQM_Vis.metrics.NLPD_torch.utils.fourier": [[40, "module-IQM_Vis.metrics.NLPD_torch.utils.fourier"]], "IQM_Vis.metrics.NLPD_torch.utils.interp1d": [[41, "module-IQM_Vis.metrics.NLPD_torch.utils.interp1d"]], "IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters": [[42, "module-IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters"]], "IQM_Vis.metrics.SSIM": [[43, "iqm-vis-metrics-ssim"]], "IQM_Vis.metrics.metric_utils": [[44, "module-IQM_Vis.metrics.metric_utils"]], "IQM_Vis.metrics.non_perceptual": [[45, "module-IQM_Vis.metrics.non_perceptual"]], "IQM_Vis.metrics.perceptual_DL": [[46, "module-IQM_Vis.metrics.perceptual_DL"]], "IQM_Vis.metrics.perceptual_trad": [[47, "module-IQM_Vis.metrics.perceptual_trad"]], "IQM_Vis.transforms": [[48, "module-IQM_Vis.transforms"]], "IQM_Vis.transforms.additive_noise": [[49, "module-IQM_Vis.transforms.additive_noise"]], "IQM_Vis.transforms.affine": [[50, "module-IQM_Vis.transforms.affine"]], "IQM_Vis.transforms.effects": [[51, "module-IQM_Vis.transforms.effects"]], "IQM_Vis.ui_wrapper": [[52, "module-IQM_Vis.ui_wrapper"]], "IQM_Vis.utils": [[53, "module-IQM_Vis.utils"]], "IQM_Vis.utils.gui_utils": [[54, "module-IQM_Vis.utils.gui_utils"]], "IQM_Vis.utils.image_utils": [[55, "module-IQM_Vis.utils.image_utils"]], "IQM_Vis.utils.plot_utils": [[56, "module-IQM_Vis.utils.plot_utils"]], "IQM_Vis.utils.save_utils": [[57, "module-IQM_Vis.utils.save_utils"]], "IQM_Vis.version": [[58, "module-IQM_Vis.version"]], "About IQM-Vis": [[59, "about-iqm-vis"]], "What IQM-Vis Offers": [[59, "what-iqm-vis-offers"]], "Built in functionality": [[59, "built-in-functionality"]], "Human Perception Experiments": [[59, "human-perception-experiments"]], "Software": [[59, "software"]], "Getting Started": [[60, "getting-started"]], "Installation": [[60, "installation"]], "Testing the installation": [[60, "testing-the-installation"]], "Common Issues": [[60, "common-issues"]], "IQM-Vis documentation": [[61, "iqm-vis-documentation"]], "Quantitive Analysis": [[61, "quantitive-analysis"]], "Qualitative Analysis": [[61, "qualitative-analysis"]], "Correlation to Human Perception": [[61, "correlation-to-human-perception"]], "Source Code": [[61, "source-code"]], "What is an IQM?:": [[61, null]], "About IQM-Vis:": [[61, null]], "Getting Started:": [[61, null]], "Tutorials:": [[61, null]], "Documentation:": [[61, null]], "Indices and tables": [[61, "indices-and-tables"]], "Tutorial 1: Making the UI": [[63, "Tutorial-1:-Making-the-UI"]], "Adding transformations and metrics": [[63, "Adding-transformations-and-metrics"]], "Loading your own images": [[63, "Loading-your-own-images"]], "Settings": [[63, "Settings"]], "Image Pre Processing:": [[63, "Image-Pre-Processing:"]], "Image Post Processing:": [[63, "Image-Post-Processing:"]], "Image Display Size:": [[63, "Image-Display-Size:"]], "Graph Display Size:": [[63, "Graph-Display-Size:"]], "Graph/Experiment Step Size:": [[63, "Graph/Experiment-Step-Size:"]], "RGB Max Brightness:": [[63, "RGB-Max-Brightness:"]], "Dispaly Max Brightness:": [[63, "Dispaly-Max-Brightness:"]], "Other Settings": [[63, "Other-Settings"]], "Tutorial 2: Simple Customisation": [[64, "Tutorial-2:-Simple-Customisation"]], "Images": [[64, "Images"]], "Metrics": [[64, "Metrics"], [65, "Metrics"]], "Metric Images": [[64, "Metric-Images"]], "Transformations": [[64, "Transformations"], [65, "Transformations"]], "Putting it all together": [[64, "Putting-it-all-together"]], "Tutorial 3: Customisation Details": [[65, "Tutorial-3:-Customisation-Details"]], "Making the UI": [[65, "Making-the-UI"]], "Tutorial 4: Running an Experiment": [[66, "Tutorial-4:-Running-an-Experiment"]], "Experiment Screen": [[66, "Experiment-Screen"]], "Experiment Info": [[66, "Experiment-Info"]], "Experiment Running": [[66, "Experiment-Running"]], "Experiment Finsihed": [[66, "Experiment-Finsihed"]], "Visualising the experiment results": [[66, "Visualising-the-experiment-results"]], "IQMs": [[67, "iqms"]], "What is an IQM?": [[67, "what-is-an-iqm"]], "Different types of IQMs": [[67, "different-types-of-iqms"]], "How to Choose an IQM For Your Task?": [[67, "how-to-choose-an-iqm-for-your-task"]]}, "indexentries": {"iqm_vis": [[0, "module-IQM_Vis"], [10, "module-IQM_Vis"]], "iqm_vis.ui_wrapper": [[0, "module-IQM_Vis.ui_wrapper"], [52, "module-IQM_Vis.ui_wrapper"]], "iqm_vis.version": [[0, "module-IQM_Vis.version"], [58, "module-IQM_Vis.version"]], "__call__() (iqm_vis.ui_wrapper.transform_wrapper method)": [[0, "IQM_Vis.ui_wrapper.transform_wrapper.__call__"]], "check_pyqt_install_deps() (in module iqm_vis.ui_wrapper)": [[0, "IQM_Vis.ui_wrapper.check_pyqt_install_deps"]], "make_ui (class in iqm_vis.ui_wrapper)": [[0, "IQM_Vis.ui_wrapper.make_UI"]], "module": [[0, "module-IQM_Vis"], [0, "module-IQM_Vis.ui_wrapper"], [0, "module-IQM_Vis.version"], [1, "module-IQM_Vis.UI"], [1, "module-IQM_Vis.UI.custom_widgets"], [1, "module-IQM_Vis.UI.experiment_mode"], [1, "module-IQM_Vis.UI.images"], [1, "module-IQM_Vis.UI.layout"], [1, "module-IQM_Vis.UI.main"], [1, "module-IQM_Vis.UI.threads"], [1, "module-IQM_Vis.UI.utils"], [1, "module-IQM_Vis.UI.widgets"], [2, "module-IQM_Vis.data_handlers"], [2, "module-IQM_Vis.data_handlers.data_api"], [2, "module-IQM_Vis.data_handlers.data_api_abstract"], [3, "module-IQM_Vis.examples"], [3, "module-IQM_Vis.examples.all"], [3, "module-IQM_Vis.examples.dataset"], [3, "module-IQM_Vis.examples.dists"], [3, "module-IQM_Vis.examples.experiment"], [3, "module-IQM_Vis.examples.kodak"], [3, "module-IQM_Vis.examples.multiple"], [3, "module-IQM_Vis.examples.new_api"], [3, "module-IQM_Vis.examples.simple"], [4, "module-IQM_Vis.examples.images"], [5, "module-IQM_Vis.metrics"], [5, "module-IQM_Vis.metrics.metric_utils"], [5, "module-IQM_Vis.metrics.non_perceptual"], [5, "module-IQM_Vis.metrics.perceptual_DL"], [5, "module-IQM_Vis.metrics.perceptual_trad"], [6, "module-IQM_Vis.metrics.SSIM"], [6, "module-IQM_Vis.metrics.SSIM.ssim"], [7, "module-IQM_Vis.transforms"], [7, "module-IQM_Vis.transforms.additive_noise"], [7, "module-IQM_Vis.transforms.affine"], [7, "module-IQM_Vis.transforms.effects"], [8, "module-IQM_Vis.utils"], [8, "module-IQM_Vis.utils.gui_utils"], [8, "module-IQM_Vis.utils.image_utils"], [8, "module-IQM_Vis.utils.plot_utils"], [8, "module-IQM_Vis.utils.save_utils"], [10, "module-IQM_Vis"], [11, "module-IQM_Vis.UI"], [12, "module-IQM_Vis.UI.custom_widgets"], [13, "module-IQM_Vis.UI.experiment_mode"], [16, "module-IQM_Vis.UI.main"], [17, "module-IQM_Vis.UI.threads"], [18, "module-IQM_Vis.UI.utils"], [20, "module-IQM_Vis.data_handlers"], [21, "module-IQM_Vis.data_handlers.data_api"], [22, "module-IQM_Vis.data_handlers.data_api_abstract"], [23, "module-IQM_Vis.examples"], [24, "module-IQM_Vis.examples.all"], [25, "module-IQM_Vis.examples.dataset"], [26, "module-IQM_Vis.examples.dists"], [27, "module-IQM_Vis.examples.experiment"], [28, "module-IQM_Vis.examples.images"], [29, "module-IQM_Vis.examples.kodak"], [30, "module-IQM_Vis.examples.multiple"], [31, "module-IQM_Vis.examples.new_api"], [32, "module-IQM_Vis.examples.simple"], [33, "module-IQM_Vis.metrics"], [34, "module-IQM_Vis.metrics.NLPD_torch"], [35, "module-IQM_Vis.metrics.NLPD_torch.layers"], [36, "module-IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation"], [37, "module-IQM_Vis.metrics.NLPD_torch.pyramids"], [38, "module-IQM_Vis.metrics.NLPD_torch.utils"], [39, "module-IQM_Vis.metrics.NLPD_torch.utils.conv"], [40, "module-IQM_Vis.metrics.NLPD_torch.utils.fourier"], [41, "module-IQM_Vis.metrics.NLPD_torch.utils.interp1d"], [42, "module-IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters"], [44, "module-IQM_Vis.metrics.metric_utils"], [45, "module-IQM_Vis.metrics.non_perceptual"], [46, "module-IQM_Vis.metrics.perceptual_DL"], [47, "module-IQM_Vis.metrics.perceptual_trad"], [48, "module-IQM_Vis.transforms"], [49, "module-IQM_Vis.transforms.additive_noise"], [50, "module-IQM_Vis.transforms.affine"], [51, "module-IQM_Vis.transforms.effects"], [52, "module-IQM_Vis.ui_wrapper"], [53, "module-IQM_Vis.utils"], [54, "module-IQM_Vis.utils.gui_utils"], [55, "module-IQM_Vis.utils.image_utils"], [56, "module-IQM_Vis.utils.plot_utils"], [57, "module-IQM_Vis.utils.save_utils"], [58, "module-IQM_Vis.version"]], "show() (iqm_vis.ui_wrapper.make_ui method)": [[0, "IQM_Vis.ui_wrapper.make_UI.show"]], "test_datastore_attributes() (in module iqm_vis.ui_wrapper)": [[0, "IQM_Vis.ui_wrapper.test_datastore_attributes"]], "transform_wrapper (class in iqm_vis.ui_wrapper)": [[0, "IQM_Vis.ui_wrapper.transform_wrapper"]], "clicklabel (class in iqm_vis.ui.custom_widgets)": [[1, "IQM_Vis.UI.custom_widgets.ClickLabel"]], "iqm_vis.ui": [[1, "module-IQM_Vis.UI"], [11, "module-IQM_Vis.UI"]], "iqm_vis.ui.custom_widgets": [[1, "module-IQM_Vis.UI.custom_widgets"], [12, "module-IQM_Vis.UI.custom_widgets"]], "iqm_vis.ui.experiment_mode": [[1, "module-IQM_Vis.UI.experiment_mode"], [13, "module-IQM_Vis.UI.experiment_mode"]], "iqm_vis.ui.images": [[1, "module-IQM_Vis.UI.images"]], "iqm_vis.ui.layout": [[1, "module-IQM_Vis.UI.layout"]], "iqm_vis.ui.main": [[1, "module-IQM_Vis.UI.main"], [16, "module-IQM_Vis.UI.main"]], "iqm_vis.ui.threads": [[1, "module-IQM_Vis.UI.threads"], [17, "module-IQM_Vis.UI.threads"]], "iqm_vis.ui.utils": [[1, "module-IQM_Vis.UI.utils"], [18, "module-IQM_Vis.UI.utils"]], "iqm_vis.ui.widgets": [[1, "module-IQM_Vis.UI.widgets"]], "progressbar (class in iqm_vis.ui.custom_widgets)": [[1, "IQM_Vis.UI.custom_widgets.ProgressBar"]], "add_layout_to_tab() (in module iqm_vis.ui.utils)": [[1, "IQM_Vis.UI.utils.add_layout_to_tab"]], "calc_max_comparisons() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.calc_max_comparisons"]], "change_data() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_data"]], "change_data_click_im() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_data_click_im"]], "change_display_im_display_brightness() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_display_im_display_brightness"]], "change_display_im_rgb_brightness() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_display_im_rgb_brightness"]], "change_display_im_size() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_display_im_size"]], "change_experiment_images() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.change_experiment_images"]], "change_graph_size() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_graph_size"]], "change_human_scores_after_exp() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_human_scores_after_exp"]], "change_metric_correlations_graph() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_metric_correlations_graph"]], "change_metric_range_graph() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_metric_range_graph"]], "change_num_steps() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_num_steps"]], "change_plot_lims() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_plot_lims"]], "change_post_processing() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_post_processing"]], "change_pre_processing() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_pre_processing"]], "change_preview_images() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_preview_images"]], "change_save_folder() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.change_save_folder"]], "change_text_exp_trans() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_text_exp_trans"]], "change_text_export_trans() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.change_text_export_trans"]], "change_to_data_num() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_to_data_num"]], "change_to_solid() (iqm_vis.ui.experiment_mode.reset_image_widget_to_black method)": [[1, "IQM_Vis.UI.experiment_mode.reset_image_widget_to_black.change_to_solid"]], "change_to_specific_trans() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.change_to_specific_trans"]], "clear_all_cache_data() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.clear_all_cache_data"]], "click_completed() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.click_completed"]], "clicked (iqm_vis.ui.custom_widgets.clicklabel attribute)": [[1, "IQM_Vis.UI.custom_widgets.ClickLabel.clicked"]], "clicked_image() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.clicked_image"]], "closeevent() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.closeEvent"]], "closeevent() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.closeEvent"]], "colour_lineedit() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.colour_lineedit"]], "completed (iqm_vis.ui.experiment_mode.reset_image_widget_to_black attribute)": [[1, "IQM_Vis.UI.experiment_mode.reset_image_widget_to_black.completed"]], "completed (iqm_vis.ui.threads.get_range_results_worker attribute)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.completed"]], "completed_range_results() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.completed_range_results"]], "construct_ui() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.construct_UI"]], "current_image (iqm_vis.ui.threads.get_range_results_worker attribute)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.current_image"]], "custom_float_validator (class in iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.custom_float_validator"]], "disable_settings_button() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.disable_settings_button"]], "display_images() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_images"]], "display_metric_correlation_plot() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metric_correlation_plot"]], "display_metric_images() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metric_images"]], "display_metric_range_plot() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metric_range_plot"]], "display_metrics() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metrics"]], "display_metrics_graph() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metrics_graph"]], "display_metrics_text() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_metrics_text"]], "display_radar_plots() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.display_radar_plots"]], "display_slider_num() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.display_slider_num"]], "do_work() (iqm_vis.ui.threads.get_range_results_worker method)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.do_work"]], "edit_slider_vals() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.edit_slider_vals"]], "enable_settings_button() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.enable_settings_button"]], "experiment_layout() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.experiment_layout"]], "export_trans_images() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.export_trans_images"]], "finish_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.finish_experiment"]], "generic_value_change() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.generic_value_change"]], "get_all_images() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.get_all_images"]], "get_float_validator() (in module iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.get_float_validator"]], "get_menu_checkboxes() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.get_menu_checkboxes"]], "get_metric_scores() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.get_metric_scores"]], "get_metrics_over_all_trans_with_init_values() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.get_metrics_over_all_trans_with_init_values"]], "get_range_results_worker (class in iqm_vis.ui.threads)": [[1, "IQM_Vis.UI.threads.get_range_results_worker"]], "get_single_transform_im() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.get_single_transform_im"]], "images (class in iqm_vis.ui.images)": [[1, "IQM_Vis.UI.images.images"]], "init_layout() (iqm_vis.ui.layout.layout method)": [[1, "IQM_Vis.UI.layout.layout.init_layout"]], "init_style() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.init_style"]], "init_style() (iqm_vis.ui.layout.layout method)": [[1, "IQM_Vis.UI.layout.layout.init_style"]], "init_widgets() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.init_widgets"]], "init_worker_thread() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.init_worker_thread"]], "is_almost_float() (in module iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.is_almost_float"]], "is_float() (in module iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.is_float"]], "launch_experiment() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.launch_experiment"]], "layout (class in iqm_vis.ui.layout)": [[1, "IQM_Vis.UI.layout.layout"]], "load_all_metric_images() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.load_all_metric_images"]], "load_all_metrics() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.load_all_metrics"]], "load_all_transforms() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.load_all_transforms"]], "load_experiment_from_dir() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.load_experiment_from_dir"]], "load_human_experiment() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.load_human_experiment"]], "load_new_images_folder() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.load_new_images_folder"]], "load_new_single_image() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.load_new_single_image"]], "make_app (class in iqm_vis.ui.main)": [[1, "IQM_Vis.UI.main.make_app"]], "make_experiment (class in iqm_vis.ui.experiment_mode)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment"]], "make_float_from_text() (in module iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.make_float_from_text"]], "make_menu() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.make_menu"]], "make_slider_range() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.make_slider_range"]], "make_status_bar() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.make_status_bar"]], "message_on_plot() (in module iqm_vis.ui.images)": [[1, "IQM_Vis.UI.images.message_on_plot"]], "mousepressevent() (iqm_vis.ui.custom_widgets.clicklabel method)": [[1, "IQM_Vis.UI.custom_widgets.ClickLabel.mousePressEvent"]], "open_mlp_new() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.open_mlp_new"]], "partition() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.partition"]], "plot_metric_range_mlp() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.plot_metric_range_mlp"]], "plot_radar_graph() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.plot_radar_graph"]], "plot_radar_mlp() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.plot_radar_mlp"]], "progress (iqm_vis.ui.threads.get_range_results_worker attribute)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.progress"]], "quick_sort() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.quick_sort"]], "quit() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.quit"]], "quit() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.quit"]], "redo_plots() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.redo_plots"]], "request_range_work (iqm_vis.ui.images.images attribute)": [[1, "IQM_Vis.UI.images.images.request_range_work"]], "reset_clicked_image (iqm_vis.ui.experiment_mode.make_experiment attribute)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.reset_clicked_image"]], "reset_correlation_data() (iqm_vis.ui.main.make_app method)": [[1, "IQM_Vis.UI.main.make_app.reset_correlation_data"]], "reset_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.reset_experiment"]], "reset_image_widget_to_black (class in iqm_vis.ui.experiment_mode)": [[1, "IQM_Vis.UI.experiment_mode.reset_image_widget_to_black"]], "reset_slider_group() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.reset_slider_group"]], "reset_sliders() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.reset_sliders"]], "save_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.save_experiment"]], "saved_experiment (iqm_vis.ui.experiment_mode.make_experiment attribute)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.saved_experiment"]], "set_checked_menu_from_iterable() (in module iqm_vis.ui.main)": [[1, "IQM_Vis.UI.main.set_checked_menu_from_iterable"]], "set_image_name_text() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.set_image_name_text"]], "set_preview_images() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.set_preview_images"]], "set_save_dir_mpl() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.set_save_dir_mpl"]], "setup_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.setup_experiment"]], "show_all_images() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.show_all_images"]], "sort_list() (in module iqm_vis.ui.experiment_mode)": [[1, "IQM_Vis.UI.experiment_mode.sort_list"]], "start_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.start_experiment"]], "stop() (iqm_vis.ui.experiment_mode.reset_image_widget_to_black method)": [[1, "IQM_Vis.UI.experiment_mode.reset_image_widget_to_black.stop"]], "stop() (iqm_vis.ui.threads.get_range_results_worker method)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.stop"]], "stopped (iqm_vis.ui.threads.get_range_results_worker attribute)": [[1, "IQM_Vis.UI.threads.get_range_results_worker.stopped"]], "stopped_range_worker() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.stopped_range_worker"]], "swap_inds() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.swap_inds"]], "toggle_experiment() (iqm_vis.ui.experiment_mode.make_experiment method)": [[1, "IQM_Vis.UI.experiment_mode.make_experiment.toggle_experiment"]], "update_datastore_image_list() (iqm_vis.ui.images.images method)": [[1, "IQM_Vis.UI.images.images.update_datastore_image_list"]], "update_image_settings() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.update_image_settings"]], "update_progress() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.update_progress"]], "update_status_bar() (iqm_vis.ui.widgets.widgets method)": [[1, "IQM_Vis.UI.widgets.widgets.update_status_bar"]], "validate() (iqm_vis.ui.widgets.custom_float_validator method)": [[1, "IQM_Vis.UI.widgets.custom_float_validator.validate"]], "view_correlation_instance (iqm_vis.ui.images.images attribute)": [[1, "IQM_Vis.UI.images.images.view_correlation_instance"]], "widgets (class in iqm_vis.ui.widgets)": [[1, "IQM_Vis.UI.widgets.widgets"]], "iqm_vis.data_handlers": [[2, "module-IQM_Vis.data_handlers"], [20, "module-IQM_Vis.data_handlers"]], "iqm_vis.data_handlers.data_api": [[2, "module-IQM_Vis.data_handlers.data_api"], [21, "module-IQM_Vis.data_handlers.data_api"]], "iqm_vis.data_handlers.data_api_abstract": [[2, "module-IQM_Vis.data_handlers.data_api_abstract"], [22, "module-IQM_Vis.data_handlers.data_api_abstract"]], "__call__() (iqm_vis.data_handlers.data_api.cache_metric_call method)": [[2, "IQM_Vis.data_handlers.data_api.cache_metric_call.__call__"]], "add_metric() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.add_metric"]], "add_metric_image() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.add_metric_image"]], "base_dataloader (class in iqm_vis.data_handlers.data_api_abstract)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader"]], "base_dataset_loader (class in iqm_vis.data_handlers.data_api_abstract)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataset_loader"]], "cache_metric_call (class in iqm_vis.data_handlers.data_api)": [[2, "IQM_Vis.data_handlers.data_api.cache_metric_call"]], "cache_tracked() (in module iqm_vis.data_handlers.data_api)": [[2, "IQM_Vis.data_handlers.data_api.cache_tracked"]], "clear_all_cache() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.clear_all_cache"]], "dataset_holder (class in iqm_vis.data_handlers.data_api)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder"]], "get_image_dataset_list() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_image_dataset_list"]], "get_image_name() (in module iqm_vis.data_handlers.data_api)": [[2, "IQM_Vis.data_handlers.data_api.get_image_name"]], "get_image_to_transform() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_image_to_transform"]], "get_image_to_transform() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_image_to_transform"]], "get_image_to_transform_name() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_image_to_transform_name"]], "get_image_to_transform_name() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_image_to_transform_name"]], "get_metric_images() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_metric_images"]], "get_metric_images() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_metric_images"]], "get_metrics() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_metrics"]], "get_metrics() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_metrics"]], "get_reference_image() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_reference_image"]], "get_reference_image() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_reference_image"]], "get_reference_image_by_index() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_reference_image_by_index"]], "get_reference_image_by_index() (iqm_vis.data_handlers.data_api_abstract.base_dataset_loader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataset_loader.get_reference_image_by_index"]], "get_reference_image_name() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_reference_image_name"]], "get_reference_image_name() (iqm_vis.data_handlers.data_api_abstract.base_dataloader method)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.get_reference_image_name"]], "get_reference_unprocessed() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.get_reference_unprocessed"]], "load_image_list() (iqm_vis.data_handlers.data_api.dataset_holder method)": [[2, "IQM_Vis.data_handlers.data_api.dataset_holder.load_image_list"]], "metric_images (iqm_vis.data_handlers.data_api_abstract.base_dataloader property)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.metric_images"]], "metrics (iqm_vis.data_handlers.data_api_abstract.base_dataloader property)": [[2, "IQM_Vis.data_handlers.data_api_abstract.base_dataloader.metrics"]], "iqm_vis.examples": [[3, "module-IQM_Vis.examples"], [23, "module-IQM_Vis.examples"]], "iqm_vis.examples.all": [[3, "module-IQM_Vis.examples.all"], [24, "module-IQM_Vis.examples.all"]], "iqm_vis.examples.dataset": [[3, "module-IQM_Vis.examples.dataset"], [25, "module-IQM_Vis.examples.dataset"]], "iqm_vis.examples.dists": [[3, "module-IQM_Vis.examples.dists"], [26, "module-IQM_Vis.examples.dists"]], "iqm_vis.examples.experiment": [[3, "module-IQM_Vis.examples.experiment"], [27, "module-IQM_Vis.examples.experiment"]], "iqm_vis.examples.kodak": [[3, "module-IQM_Vis.examples.kodak"], [29, "module-IQM_Vis.examples.kodak"]], "iqm_vis.examples.multiple": [[3, "module-IQM_Vis.examples.multiple"], [30, "module-IQM_Vis.examples.multiple"]], "iqm_vis.examples.new_api": [[3, "module-IQM_Vis.examples.new_api"], [31, "module-IQM_Vis.examples.new_api"]], "iqm_vis.examples.simple": [[3, "module-IQM_Vis.examples.simple"], [32, "module-IQM_Vis.examples.simple"]], "correct() (in module iqm_vis.examples.dists)": [[3, "IQM_Vis.examples.dists.correct"]], "load_and_calibrate_image() (in module iqm_vis.examples.dists)": [[3, "IQM_Vis.examples.dists.load_and_calibrate_image"]], "run() (in module iqm_vis.examples.all)": [[3, "IQM_Vis.examples.all.run"]], "run() (in module iqm_vis.examples.dataset)": [[3, "IQM_Vis.examples.dataset.run"]], "run() (in module iqm_vis.examples.dists)": [[3, "IQM_Vis.examples.dists.run"]], "run() (in module iqm_vis.examples.experiment)": [[3, "IQM_Vis.examples.experiment.run"]], "run() (in module iqm_vis.examples.kodak)": [[3, "IQM_Vis.examples.kodak.run"]], "run() (in module iqm_vis.examples.multiple)": [[3, "IQM_Vis.examples.multiple.run"]], "run() (in module iqm_vis.examples.new_api)": [[3, "IQM_Vis.examples.new_api.run"]], "run() (in module iqm_vis.examples.simple)": [[3, "IQM_Vis.examples.simple.run"]], "iqm_vis.examples.images": [[4, "module-IQM_Vis.examples.images"], [28, "module-IQM_Vis.examples.images"]], "dists (class in iqm_vis.metrics.perceptual_dl)": [[5, "IQM_Vis.metrics.perceptual_DL.DISTS"]], "iqm_vis.metrics": [[5, "module-IQM_Vis.metrics"], [33, "module-IQM_Vis.metrics"]], "iqm_vis.metrics.metric_utils": [[5, "module-IQM_Vis.metrics.metric_utils"], [44, "module-IQM_Vis.metrics.metric_utils"]], "iqm_vis.metrics.non_perceptual": [[5, "module-IQM_Vis.metrics.non_perceptual"], [45, "module-IQM_Vis.metrics.non_perceptual"]], "iqm_vis.metrics.perceptual_dl": [[5, "module-IQM_Vis.metrics.perceptual_DL"], [46, "module-IQM_Vis.metrics.perceptual_DL"]], "iqm_vis.metrics.perceptual_trad": [[5, "module-IQM_Vis.metrics.perceptual_trad"], [47, "module-IQM_Vis.metrics.perceptual_trad"]], "lpips (class in iqm_vis.metrics.perceptual_dl)": [[5, "IQM_Vis.metrics.perceptual_DL.LPIPS"]], "mae (class in iqm_vis.metrics.non_perceptual)": [[5, "IQM_Vis.metrics.non_perceptual.MAE"]], "mse (class in iqm_vis.metrics.non_perceptual)": [[5, "IQM_Vis.metrics.non_perceptual.MSE"]], "ms_ssim (class in iqm_vis.metrics.perceptual_trad)": [[5, "IQM_Vis.metrics.perceptual_trad.MS_SSIM"]], "nlpd (class in iqm_vis.metrics.perceptual_trad)": [[5, "IQM_Vis.metrics.perceptual_trad.NLPD"]], "rmse (class in iqm_vis.metrics.non_perceptual)": [[5, "IQM_Vis.metrics.non_perceptual.RMSE"]], "ssim (class in iqm_vis.metrics.perceptual_trad)": [[5, "IQM_Vis.metrics.perceptual_trad.SSIM"]], "__call__() (iqm_vis.metrics.non_perceptual.mae method)": [[5, "IQM_Vis.metrics.non_perceptual.MAE.__call__"]], "__call__() (iqm_vis.metrics.non_perceptual.mse method)": [[5, "IQM_Vis.metrics.non_perceptual.MSE.__call__"]], "__call__() (iqm_vis.metrics.non_perceptual.rmse method)": [[5, "IQM_Vis.metrics.non_perceptual.RMSE.__call__"]], "__call__() (iqm_vis.metrics.non_perceptual.one_over_psnr method)": [[5, "IQM_Vis.metrics.non_perceptual.one_over_PSNR.__call__"]], "__call__() (iqm_vis.metrics.perceptual_dl.dists method)": [[5, "IQM_Vis.metrics.perceptual_DL.DISTS.__call__"]], "__call__() (iqm_vis.metrics.perceptual_dl.lpips method)": [[5, "IQM_Vis.metrics.perceptual_DL.LPIPS.__call__"]], "__call__() (iqm_vis.metrics.perceptual_trad.ms_ssim method)": [[5, "IQM_Vis.metrics.perceptual_trad.MS_SSIM.__call__"]], "__call__() (iqm_vis.metrics.perceptual_trad.nlpd method)": [[5, "IQM_Vis.metrics.perceptual_trad.NLPD.__call__"]], "__call__() (iqm_vis.metrics.perceptual_trad.ssim method)": [[5, "IQM_Vis.metrics.perceptual_trad.SSIM.__call__"]], "get_all_iqm_params() (in module iqm_vis.metrics)": [[5, "IQM_Vis.metrics.get_all_IQM_params"]], "get_all_metric_images() (in module iqm_vis.metrics)": [[5, "IQM_Vis.metrics.get_all_metric_images"]], "get_all_metrics() (in module iqm_vis.metrics)": [[5, "IQM_Vis.metrics.get_all_metrics"]], "one_over_psnr (class in iqm_vis.metrics.non_perceptual)": [[5, "IQM_Vis.metrics.non_perceptual.one_over_PSNR"]], "iqm_vis.metrics.ssim": [[6, "module-IQM_Vis.metrics.SSIM"]], "iqm_vis.metrics.ssim.ssim": [[6, "module-IQM_Vis.metrics.SSIM.ssim"]], "ms_ssim (class in iqm_vis.metrics.ssim.ssim)": [[6, "IQM_Vis.metrics.SSIM.ssim.MS_SSIM"]], "ssim (class in iqm_vis.metrics.ssim.ssim)": [[6, "IQM_Vis.metrics.SSIM.ssim.SSIM"]], "forward() (iqm_vis.metrics.ssim.ssim.ms_ssim method)": [[6, "IQM_Vis.metrics.SSIM.ssim.MS_SSIM.forward"]], "forward() (iqm_vis.metrics.ssim.ssim.ssim method)": [[6, "IQM_Vis.metrics.SSIM.ssim.SSIM.forward"]], "gaussian_filter() (in module iqm_vis.metrics.ssim.ssim)": [[6, "IQM_Vis.metrics.SSIM.ssim.gaussian_filter"]], "ms_ssim() (in module iqm_vis.metrics.ssim.ssim)": [[6, "IQM_Vis.metrics.SSIM.ssim.ms_ssim"]], "ssim() (in module iqm_vis.metrics.ssim.ssim)": [[6, "IQM_Vis.metrics.SSIM.ssim.ssim"]], "training (iqm_vis.metrics.ssim.ssim.ms_ssim attribute)": [[6, "IQM_Vis.metrics.SSIM.ssim.MS_SSIM.training"]], "training (iqm_vis.metrics.ssim.ssim.ssim attribute)": [[6, "IQM_Vis.metrics.SSIM.ssim.SSIM.training"]], "gaussian_noise (class in iqm_vis.transforms.additive_noise)": [[7, "IQM_Vis.transforms.additive_noise.Gaussian_noise"]], "iqm_vis.transforms": [[7, "module-IQM_Vis.transforms"], [48, "module-IQM_Vis.transforms"]], "iqm_vis.transforms.additive_noise": [[7, "module-IQM_Vis.transforms.additive_noise"], [49, "module-IQM_Vis.transforms.additive_noise"]], "iqm_vis.transforms.affine": [[7, "module-IQM_Vis.transforms.affine"], [50, "module-IQM_Vis.transforms.affine"]], "iqm_vis.transforms.effects": [[7, "module-IQM_Vis.transforms.effects"], [51, "module-IQM_Vis.transforms.effects"]], "binary_threshold() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.binary_threshold"]], "blur() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.blur"]], "brightness() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.brightness"]], "brightness_hsv() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.brightness_hsv"]], "contrast() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.contrast"]], "get_all_transforms() (in module iqm_vis.transforms)": [[7, "IQM_Vis.transforms.get_all_transforms"]], "hue() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.hue"]], "jpeg_compression() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.jpeg_compression"]], "noise_hypersphere (class in iqm_vis.transforms.additive_noise)": [[7, "IQM_Vis.transforms.additive_noise.noise_hypersphere"]], "rotation() (in module iqm_vis.transforms.affine)": [[7, "IQM_Vis.transforms.affine.rotation"]], "salt_and_pepper_noise() (in module iqm_vis.transforms.additive_noise)": [[7, "IQM_Vis.transforms.additive_noise.salt_and_pepper_noise"]], "saturation() (in module iqm_vis.transforms.effects)": [[7, "IQM_Vis.transforms.effects.saturation"]], "x_shift() (in module iqm_vis.transforms.affine)": [[7, "IQM_Vis.transforms.affine.x_shift"]], "y_shift() (in module iqm_vis.transforms.affine)": [[7, "IQM_Vis.transforms.affine.y_shift"]], "zoom_image() (in module iqm_vis.transforms.affine)": [[7, "IQM_Vis.transforms.affine.zoom_image"]], "default_save_dir (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.DEFAULT_SAVE_DIR"]], "iqm_vis.utils": [[8, "module-IQM_Vis.utils"], [53, "module-IQM_Vis.utils"]], "iqm_vis.utils.gui_utils": [[8, "module-IQM_Vis.utils.gui_utils"], [54, "module-IQM_Vis.utils.gui_utils"]], "iqm_vis.utils.image_utils": [[8, "module-IQM_Vis.utils.image_utils"], [55, "module-IQM_Vis.utils.image_utils"]], "iqm_vis.utils.plot_utils": [[8, "module-IQM_Vis.utils.plot_utils"], [56, "module-IQM_Vis.utils.plot_utils"]], "iqm_vis.utils.save_utils": [[8, "module-IQM_Vis.utils.save_utils"], [57, "module-IQM_Vis.utils.save_utils"]], "mplcanvas (class in iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.MplCanvas"]], "bar_plotter (class in iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.bar_plotter"]], "calibrate_brightness() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.calibrate_brightness"]], "change_im() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.change_im"]], "click_scatter() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.click_scatter"]], "compute_metric_for_human_correlation() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.compute_metric_for_human_correlation"]], "compute_metrics_over_range() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.compute_metrics_over_range"]], "compute_metrics_over_range_single_trans() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.compute_metrics_over_range_single_trans"]], "crop_centre() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.crop_centre"]], "get_iqm_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_IQM_file"]], "get_all_single_transform_params() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.get_all_single_transform_params"]], "get_all_slider_values() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.get_all_slider_values"]], "get_correlation_plot() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.get_correlation_plot"]], "get_human_scores_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_human_scores_file"]], "get_human_times_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_human_times_file"]], "get_image_name_from_human_scores() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_image_name_from_human_scores"]], "get_image_pair_name() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.get_image_pair_name"]], "get_image_processing_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_image_processing_file"]], "get_metric_image_name() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.get_metric_image_name"]], "get_original_image_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_original_image_file"]], "get_original_unprocessed_image_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_original_unprocessed_image_file"]], "get_radar_plots_avg_plots() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.get_radar_plots_avg_plots"]], "get_resolutions() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.get_resolutions"]], "get_trans_dict_from_str() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.get_trans_dict_from_str"]], "get_transform_functions_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_transform_functions_file"]], "get_transform_image() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.get_transform_image"]], "get_transform_params_file() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.get_transform_params_file"]], "get_transform_range_plots() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.get_transform_range_plots"]], "get_transformed_image_name() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.get_transformed_image_name"]], "hover_scatter() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.hover_scatter"]], "line_plotter (class in iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.line_plotter"]], "load_image() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.load_image"]], "load_json_dict() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.load_json_dict"]], "load_obj() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.load_obj"]], "make_name_for_trans() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.make_name_for_trans"]], "plot() (iqm_vis.utils.plot_utils.bar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.bar_plotter.plot"]], "plot() (iqm_vis.utils.plot_utils.line_plotter method)": [[8, "IQM_Vis.utils.plot_utils.line_plotter.plot"]], "plot() (iqm_vis.utils.plot_utils.radar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.radar_plotter.plot"]], "plot() (iqm_vis.utils.plot_utils.scatter_plotter method)": [[8, "IQM_Vis.utils.plot_utils.scatter_plotter.plot"]], "radar_plotter (class in iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.radar_plotter"]], "resize_image() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.resize_image"]], "resize_to_longest_side() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.resize_to_longest_side"]], "save_and_merge_df_as_csv() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.save_and_merge_df_as_csv"]], "save_df_as_csv() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.save_df_as_csv"]], "save_experiment_results() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.save_experiment_results"]], "save_image() (in module iqm_vis.utils.image_utils)": [[8, "IQM_Vis.utils.image_utils.save_image"]], "save_json_dict() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.save_json_dict"]], "save_obj() (in module iqm_vis.utils.save_utils)": [[8, "IQM_Vis.utils.save_utils.save_obj"]], "scatter_plotter (class in iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.scatter_plotter"]], "set_plot_lims() (iqm_vis.utils.plot_utils.bar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.bar_plotter.set_plot_lims"]], "set_plot_lims() (iqm_vis.utils.plot_utils.line_plotter method)": [[8, "IQM_Vis.utils.plot_utils.line_plotter.set_plot_lims"]], "set_plot_lims() (iqm_vis.utils.plot_utils.radar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.radar_plotter.set_plot_lims"]], "set_plot_lims() (iqm_vis.utils.plot_utils.scatter_plotter method)": [[8, "IQM_Vis.utils.plot_utils.scatter_plotter.set_plot_lims"]], "set_style() (iqm_vis.utils.plot_utils.bar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.bar_plotter.set_style"]], "set_style() (iqm_vis.utils.plot_utils.line_plotter method)": [[8, "IQM_Vis.utils.plot_utils.line_plotter.set_style"]], "set_style() (iqm_vis.utils.plot_utils.radar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.radar_plotter.set_style"]], "set_style() (iqm_vis.utils.plot_utils.scatter_plotter method)": [[8, "IQM_Vis.utils.plot_utils.scatter_plotter.set_style"]], "show() (iqm_vis.utils.plot_utils.bar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.bar_plotter.show"]], "show() (iqm_vis.utils.plot_utils.line_plotter method)": [[8, "IQM_Vis.utils.plot_utils.line_plotter.show"]], "show() (iqm_vis.utils.plot_utils.radar_plotter method)": [[8, "IQM_Vis.utils.plot_utils.radar_plotter.show"]], "show() (iqm_vis.utils.plot_utils.scatter_plotter method)": [[8, "IQM_Vis.utils.plot_utils.scatter_plotter.show"]], "str_to_len() (in module iqm_vis.utils.gui_utils)": [[8, "IQM_Vis.utils.gui_utils.str_to_len"]], "update_annot() (in module iqm_vis.utils.plot_utils)": [[8, "IQM_Vis.utils.plot_utils.update_annot"]], "__init__() (iqm_vis.ui.images method)": [[14, "IQM_Vis.UI.images.__init__"]], "images (class in iqm_vis.ui)": [[14, "IQM_Vis.UI.images"]], "__init__() (iqm_vis.ui.layout method)": [[15, "IQM_Vis.UI.layout.__init__"]], "layout (class in iqm_vis.ui)": [[15, "IQM_Vis.UI.layout"]], "__init__() (iqm_vis.ui.widgets method)": [[19, "IQM_Vis.UI.widgets.__init__"]], "widgets (class in iqm_vis.ui)": [[19, "IQM_Vis.UI.widgets"]], "iqm_vis.metrics.nlpd_torch": [[34, "module-IQM_Vis.metrics.NLPD_torch"]], "iqm_vis.metrics.nlpd_torch.layers": [[35, "module-IQM_Vis.metrics.NLPD_torch.layers"]], "iqm_vis.metrics.nlpd_torch.layers.divisive_normalisation": [[36, "module-IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation"]], "iqm_vis.metrics.nlpd_torch.pyramids": [[37, "module-IQM_Vis.metrics.NLPD_torch.pyramids"]], "iqm_vis.metrics.nlpd_torch.utils": [[38, "module-IQM_Vis.metrics.NLPD_torch.utils"]], "iqm_vis.metrics.nlpd_torch.utils.conv": [[39, "module-IQM_Vis.metrics.NLPD_torch.utils.conv"]], "iqm_vis.metrics.nlpd_torch.utils.fourier": [[40, "module-IQM_Vis.metrics.NLPD_torch.utils.fourier"]], "iqm_vis.metrics.nlpd_torch.utils.interp1d": [[41, "module-IQM_Vis.metrics.NLPD_torch.utils.interp1d"]], "iqm_vis.metrics.nlpd_torch.utils.pyramid_filters": [[42, "module-IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters"]], "ssim (class in iqm_vis.metrics)": [[43, "IQM_Vis.metrics.SSIM"]], "__call__() (iqm_vis.metrics.ssim method)": [[43, "IQM_Vis.metrics.SSIM.__call__"]], "__init__() (iqm_vis.metrics.ssim method)": [[43, "IQM_Vis.metrics.SSIM.__init__"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["IQM_Vis", "IQM_Vis.UI", "IQM_Vis.data_handlers", "IQM_Vis.examples", "IQM_Vis.examples.KODAK_dataset", "IQM_Vis.examples.images", "IQM_Vis.metrics", "IQM_Vis.metrics.SSIM", "IQM_Vis.transforms", "IQM_Vis.utils", "Tutorials", "_autosummary/IQM_Vis", "_autosummary/IQM_Vis.UI", "_autosummary/IQM_Vis.UI.custom_widgets", "_autosummary/IQM_Vis.UI.experiment_mode", "_autosummary/IQM_Vis.UI.experiment_mode_2AFC", "_autosummary/IQM_Vis.UI.experiment_mode_JND", "_autosummary/IQM_Vis.UI.images", "_autosummary/IQM_Vis.UI.layout", "_autosummary/IQM_Vis.UI.main", "_autosummary/IQM_Vis.UI.threads", "_autosummary/IQM_Vis.UI.utils", "_autosummary/IQM_Vis.UI.widgets", "_autosummary/IQM_Vis.data_handlers", "_autosummary/IQM_Vis.data_handlers.data_api", "_autosummary/IQM_Vis.data_handlers.data_api_abstract", "_autosummary/IQM_Vis.examples", "_autosummary/IQM_Vis.examples.KODAK_dataset", "_autosummary/IQM_Vis.examples.all", "_autosummary/IQM_Vis.examples.dataset", "_autosummary/IQM_Vis.examples.dists", "_autosummary/IQM_Vis.examples.experiment", "_autosummary/IQM_Vis.examples.images", "_autosummary/IQM_Vis.examples.kodak", "_autosummary/IQM_Vis.examples.multiple", "_autosummary/IQM_Vis.examples.new_api", "_autosummary/IQM_Vis.examples.simple", "_autosummary/IQM_Vis.metrics", "_autosummary/IQM_Vis.metrics.NLPD_torch", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation", "_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.conv", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters", "_autosummary/IQM_Vis.metrics.SSIM", "_autosummary/IQM_Vis.metrics.metric_utils", "_autosummary/IQM_Vis.metrics.non_perceptual", "_autosummary/IQM_Vis.metrics.perceptual_DL", "_autosummary/IQM_Vis.metrics.perceptual_trad", "_autosummary/IQM_Vis.transforms", "_autosummary/IQM_Vis.transforms.additive_noise", "_autosummary/IQM_Vis.transforms.affine", "_autosummary/IQM_Vis.transforms.effects", "_autosummary/IQM_Vis.ui_wrapper", "_autosummary/IQM_Vis.utils", "_autosummary/IQM_Vis.utils.gui_utils", "_autosummary/IQM_Vis.utils.image_utils", "_autosummary/IQM_Vis.utils.plot_utils", "_autosummary/IQM_Vis.utils.save_utils", "_autosummary/IQM_Vis.version", "about", "getting_started", "index", "modules", "notebooks/Tutorial_1-making_the_UI", "notebooks/Tutorial_2-Customisation", "notebooks/Tutorial_3-Advanced-Customisations", "notebooks/Tutorial_4-running_a_2AFC_experiment copy", "notebooks/Tutorial_5-running_a_JND_experiment", "what-are-IQMs"], "filenames": ["IQM_Vis.rst", "IQM_Vis.UI.rst", "IQM_Vis.data_handlers.rst", "IQM_Vis.examples.rst", "IQM_Vis.examples.KODAK_dataset.rst", "IQM_Vis.examples.images.rst", "IQM_Vis.metrics.rst", "IQM_Vis.metrics.SSIM.rst", "IQM_Vis.transforms.rst", "IQM_Vis.utils.rst", "Tutorials.rst", "_autosummary/IQM_Vis.rst", "_autosummary/IQM_Vis.UI.rst", "_autosummary/IQM_Vis.UI.custom_widgets.rst", "_autosummary/IQM_Vis.UI.experiment_mode.rst", "_autosummary/IQM_Vis.UI.experiment_mode_2AFC.rst", "_autosummary/IQM_Vis.UI.experiment_mode_JND.rst", "_autosummary/IQM_Vis.UI.images.rst", "_autosummary/IQM_Vis.UI.layout.rst", "_autosummary/IQM_Vis.UI.main.rst", "_autosummary/IQM_Vis.UI.threads.rst", "_autosummary/IQM_Vis.UI.utils.rst", "_autosummary/IQM_Vis.UI.widgets.rst", "_autosummary/IQM_Vis.data_handlers.rst", "_autosummary/IQM_Vis.data_handlers.data_api.rst", "_autosummary/IQM_Vis.data_handlers.data_api_abstract.rst", "_autosummary/IQM_Vis.examples.rst", "_autosummary/IQM_Vis.examples.KODAK_dataset.rst", "_autosummary/IQM_Vis.examples.all.rst", "_autosummary/IQM_Vis.examples.dataset.rst", "_autosummary/IQM_Vis.examples.dists.rst", "_autosummary/IQM_Vis.examples.experiment.rst", "_autosummary/IQM_Vis.examples.images.rst", "_autosummary/IQM_Vis.examples.kodak.rst", "_autosummary/IQM_Vis.examples.multiple.rst", "_autosummary/IQM_Vis.examples.new_api.rst", "_autosummary/IQM_Vis.examples.simple.rst", "_autosummary/IQM_Vis.metrics.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.pyramids.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.conv.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.fourier.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.interp1d.rst", "_autosummary/IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters.rst", "_autosummary/IQM_Vis.metrics.SSIM.rst", "_autosummary/IQM_Vis.metrics.metric_utils.rst", "_autosummary/IQM_Vis.metrics.non_perceptual.rst", "_autosummary/IQM_Vis.metrics.perceptual_DL.rst", "_autosummary/IQM_Vis.metrics.perceptual_trad.rst", "_autosummary/IQM_Vis.transforms.rst", "_autosummary/IQM_Vis.transforms.additive_noise.rst", "_autosummary/IQM_Vis.transforms.affine.rst", "_autosummary/IQM_Vis.transforms.effects.rst", "_autosummary/IQM_Vis.ui_wrapper.rst", "_autosummary/IQM_Vis.utils.rst", "_autosummary/IQM_Vis.utils.gui_utils.rst", "_autosummary/IQM_Vis.utils.image_utils.rst", "_autosummary/IQM_Vis.utils.plot_utils.rst", "_autosummary/IQM_Vis.utils.save_utils.rst", "_autosummary/IQM_Vis.version.rst", "about.rst", "getting_started.rst", "index.rst", "modules.rst", "notebooks/Tutorial_1-making_the_UI.ipynb", "notebooks/Tutorial_2-Customisation.ipynb", "notebooks/Tutorial_3-Advanced-Customisations.ipynb", "notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb", "notebooks/Tutorial_5-running_a_JND_experiment.ipynb", "what-are-IQMs.rst"], "titles": ["IQM_Vis package", "IQM_Vis.UI package", "IQM_Vis.data_handlers package", "IQM_Vis.examples package", "IQM_Vis.examples.KODAK_dataset package", "IQM_Vis.examples.images package", "IQM_Vis.metrics package", "IQM_Vis.metrics.SSIM package", "IQM_Vis.transforms package", "IQM_Vis.utils package", "Tutorials", "IQM_Vis", "IQM_Vis.UI", "IQM_Vis.UI.custom_widgets", "IQM_Vis.UI.experiment_mode", "IQM_Vis.UI.experiment_mode_2AFC", "IQM_Vis.UI.experiment_mode_JND", "IQM_Vis.UI.images", "IQM_Vis.UI.layout", "IQM_Vis.UI.main", "IQM_Vis.UI.threads", "IQM_Vis.UI.utils", "IQM_Vis.UI.widgets", "IQM_Vis.data_handlers", "IQM_Vis.data_handlers.data_api", "IQM_Vis.data_handlers.data_api_abstract", "IQM_Vis.examples", "IQM_Vis.examples.KODAK_dataset", "IQM_Vis.examples.all", "IQM_Vis.examples.dataset", "IQM_Vis.examples.dists", "IQM_Vis.examples.experiment", "IQM_Vis.examples.images", "IQM_Vis.examples.kodak", "IQM_Vis.examples.multiple", "IQM_Vis.examples.new_api", "IQM_Vis.examples.simple", "IQM_Vis.metrics", "IQM_Vis.metrics.NLPD_torch", "IQM_Vis.metrics.NLPD_torch.layers", "IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation", "IQM_Vis.metrics.NLPD_torch.pyramids", "IQM_Vis.metrics.NLPD_torch.utils", "IQM_Vis.metrics.NLPD_torch.utils.conv", "IQM_Vis.metrics.NLPD_torch.utils.fourier", "IQM_Vis.metrics.NLPD_torch.utils.interp1d", "IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters", "IQM_Vis.metrics.SSIM", "IQM_Vis.metrics.metric_utils", "IQM_Vis.metrics.non_perceptual", "IQM_Vis.metrics.perceptual_DL", "IQM_Vis.metrics.perceptual_trad", "IQM_Vis.transforms", "IQM_Vis.transforms.additive_noise", "IQM_Vis.transforms.affine", "IQM_Vis.transforms.effects", "IQM_Vis.ui_wrapper", "IQM_Vis.utils", "IQM_Vis.utils.gui_utils", "IQM_Vis.utils.image_utils", "IQM_Vis.utils.plot_utils", "IQM_Vis.utils.save_utils", "IQM_Vis.version", "About IQM-Vis", "Getting Started", "IQM-Vis documentation", "IQM_Vis", "Tutorial 1: Making the UI", "Tutorial 2: Simple Customisation", "Tutorial 3: Customisation Details", "Tutorial 4: Running a 2AFC Experiment", "Tutorial 4: Running a JND Experiment", "IQMs"], "terms": {"ui": [0, 2, 9, 56, 60, 65, 66, 68, 70, 71], "custom_widget": [0, 66], "clicklabel": [0, 1], "click": [0, 1, 9, 67, 70, 71], "mousepressev": [0, 1], "progressbar": [0, 1], "experiment_mode_2afc": [0, 66], "make_experiment_2afc": [0, 1], "calc_max_comparison": [0, 1], "change_experiment_imag": [0, 1], "click_complet": [0, 1], "clicked_imag": [0, 1], "closeev": [0, 1], "experiment_layout": [0, 1], "finish_experi": [0, 1], "get_all_imag": [0, 1], "get_metric_scor": [0, 1], "get_single_transform_im": [0, 1], "get_trans_func": [0, 1], "get_unique_save_dir": [0, 1], "init_styl": [0, 1], "partit": [0, 1], "quick_sort": [0, 1], "quit": [0, 1], "reset_clicked_imag": [0, 1], "reset_experi": [0, 1], "save_experi": [0, 1], "saved_experi": [0, 1], "setup_experi": [0, 1], "show_all_imag": [0, 1], "start_experi": [0, 1], "swap_ind": [0, 1], "toggle_experi": [0, 1], "reset_image_widget_to_black": [0, 1], "change_to_solid": [0, 1], "complet": [0, 1], "stop": [0, 1], "sort_list": [0, 1], "experiment_mode_jnd": [0, 66], "make_experiment_jnd": [0, 1], "user_decis": [0, 1], "imag": [0, 2, 3, 6, 7, 8, 9, 24, 43, 47, 55, 58, 59, 61, 63, 65, 66, 69, 70, 71, 72], "change_data": [0, 1], "change_data_click_im": [0, 1], "change_metric_correlations_graph": [0, 1], "change_metric_range_graph": [0, 1], "change_preview_imag": [0, 1], "change_to_data_num": [0, 1], "change_to_specific_tran": [0, 1], "completed_range_result": [0, 1], "display_imag": [0, 1], "display_metric_jnd_plot": [0, 1], "display_metric_correlation_plot": [0, 1], "display_metric_imag": [0, 1], "display_metric_range_plot": [0, 1], "display_metr": [0, 1], "display_metrics_graph": [0, 1], "display_metrics_text": [0, 1], "display_radar_plot": [0, 1], "get_export_dir": [0, 1], "get_metrics_over_all_trans_with_init_valu": [0, 1], "init_worker_thread": [0, 1], "load_experiment_from_dir": [0, 1], "load_experiment_from_dir_jnd": [0, 1], "load_human_experi": [0, 1], "load_new_images_fold": [0, 1], "load_new_single_imag": [0, 1], "plot_metric_range_mlp": [0, 1], "plot_radar_graph": [0, 1], "plot_radar_mlp": [0, 1], "redo_plot": [0, 1], "request_range_work": [0, 1], "set_preview_imag": [0, 1], "set_save_dir_mpl": [0, 1], "stopped_range_work": [0, 1], "update_datastore_image_list": [0, 1], "view_correlation_inst": [0, 1], "message_on_plot": [0, 1], "layout": [0, 66], "init_layout": [0, 1], "main": [0, 66, 67, 68, 69, 70, 71], "make_app": [0, 1], "change_save_fold": [0, 1], "clear_all_cache_data": [0, 1], "construct_ui": [0, 1], "get_menu_checkbox": [0, 1], "load_all_metric_imag": [0, 1], "load_all_metr": [0, 1], "load_all_transform": [0, 1], "make_menu": [0, 1], "make_status_bar": [0, 1], "reset_correlation_data": [0, 1], "set_checked_menu_from_iter": [0, 1], "thread": [0, 66], "get_range_results_work": [0, 1], "current_imag": [0, 1], "do_work": [0, 1], "progress": [0, 1], "util": [0, 2, 66], "add_layout_to_tab": [0, 1], "widget": [0, 9, 13, 58, 66], "custom_float_valid": [0, 1], "valid": [0, 1], "get_float_valid": [0, 1], "is_almost_float": [0, 1], "is_float": [0, 1], "make_float_from_text": [0, 1], "jnd_dataset_range_low": [0, 1], "jnd_dataset_range_upp": [0, 1], "change_dataset_nam": [0, 1], "change_display_im_display_bright": [0, 1], "change_display_im_rgb_bright": [0, 1], "change_display_im_s": [0, 1], "change_graph_s": [0, 1], "change_human_scores_after_exp_2afc": [0, 1], "change_human_scores_after_exp_jnd": [0, 1], "change_num_step": [0, 1], "change_plot_lim": [0, 1], "change_post_process": [0, 1], "change_pre_process": [0, 1], "change_text_exp_tran": [0, 1], "change_text_export_tran": [0, 1], "colour_lineedit": [0, 1], "disable_settings_button": [0, 1], "display_slider_num": [0, 1], "edit_slider_v": [0, 1], "enable_settings_button": [0, 1], "export_trans_imag": [0, 1], "generic_value_chang": [0, 1], "init_widget": [0, 1], "launch_experiment_2afc": [0, 1], "launch_experiment_jnd": [0, 1], "make_slider_rang": [0, 1], "open_mlp_new": [0, 1], "reset_slider_group": [0, 1], "reset_slid": [0, 1], "set_image_name_text": [0, 1], "update_image_set": [0, 1], "update_progress": [0, 1], "update_status_bar": [0, 1], "data_handl": [0, 66], "data_api": [0, 9, 66], "cache_metric_cal": [0, 2], "__call__": [0, 2, 6, 47, 66, 69], "cache_track": [0, 2], "dataset_hold": [0, 2], "add_metr": [0, 2], "add_metric_imag": [0, 2], "clear_all_cach": [0, 2], "get_image_dataset_list": [0, 2], "get_image_to_transform": [0, 2], "get_image_to_transform_nam": [0, 2], "get_metric_imag": [0, 2], "get_metr": [0, 2], "get_reference_imag": [0, 2], "get_reference_image_by_index": [0, 2], "get_reference_image_nam": [0, 2], "get_reference_unprocess": [0, 2], "load_image_list": [0, 2], "get_image_nam": [0, 2], "data_api_abstract": [0, 66], "base_dataload": [0, 2], "metric_imag": [0, 1, 2, 68], "metric": [0, 1, 2, 3, 9, 24, 28, 63, 65, 66, 70, 72], "base_dataset_load": [0, 2], "exampl": [0, 2, 56, 64, 66, 68, 69, 71, 72], "kodak_dataset": [0, 3], "all": [0, 1, 2, 6, 7, 8, 9, 66, 67, 70, 71], "run": [0, 3, 28, 63, 64, 65, 67], "dataset": [0, 1, 9, 33, 63, 66, 69, 71], "dist": [0, 6, 66], "correct": [0, 3, 63, 70, 71], "load_and_calibrate_imag": [0, 3], "kodak": [0, 66, 69], "ssim": [0, 6, 65, 68, 72], "metric_util": [0, 66], "non_perceptu": [0, 66], "mae": [0, 6, 68, 69], "mse": [0, 6, 68], "rmse": [0, 6], "one_over_psnr": [0, 6], "perceptual_dl": [0, 66], "lpip": [0, 6], "perceptual_trad": [0, 66], "ms_ssim": [0, 6, 7], "nlpd": [0, 6], "get_all_iqm_param": [0, 6], "get_all_metric_imag": [0, 6], "get_all_metr": [0, 6], "transform": [0, 1, 2, 3, 6, 9, 24, 28, 41, 63, 65, 66, 70, 71], "additive_nois": [0, 66], "gaussian_nois": [0, 8], "noise_hyperspher": [0, 8], "salt_and_pepper_nois": [0, 8], "affin": [0, 66], "rotat": [0, 2, 8, 63, 67, 68], "x_shift": [0, 8], "y_shift": [0, 8], "zoom_imag": [0, 8], "effect": [0, 65, 66], "binary_threshold": [0, 8], "blur": [0, 7, 8, 68], "bright": [0, 8, 68, 69], "brightness_hsv": [0, 8], "contrast": [0, 8], "hue": [0, 8, 71], "jpeg_compress": [0, 8, 68], "satur": [0, 8], "get_all_transform": [0, 8], "gui_util": [0, 66], "mplcanva": [0, 9], "change_im": [0, 9], "get_image_pair_nam": [0, 9], "get_metric_image_nam": [0, 9], "get_resolut": [0, 9], "get_trans_dict_from_str": [0, 9], "get_transformed_image_nam": [0, 9], "str_to_len": [0, 9], "image_util": [0, 66], "calibrate_bright": [0, 9], "crop_centr": [0, 9], "get_transform_imag": [0, 9], "load_imag": [0, 2, 9], "resize_imag": [0, 9], "resize_to_longest_sid": [0, 9], "save_imag": [0, 9], "plot_util": [0, 66], "bar_plott": [0, 9], "plot": [0, 1, 9, 60, 63, 70], "set_plot_lim": [0, 9], "set_styl": [0, 9], "show": [0, 9, 63, 66, 69, 70, 71], "click_scatt": [0, 9], "compute_metric_for_human_correl": [0, 9], "compute_metrics_over_rang": [0, 9], "compute_metrics_over_range_single_tran": [0, 9], "get_all_single_transform_param": [0, 9], "get_all_slider_valu": [0, 9], "get_correlation_plot": [0, 9], "get_radar_plots_avg_plot": [0, 9], "get_transform_range_plot": [0, 9], "hover_scatt": [0, 9], "line_plott": [0, 9], "radar_plott": [0, 9], "scatter_plott": [0, 9], "update_annot": [0, 9], "save_util": [0, 66], "default_save_dir": [0, 1, 9], "get_iqm_fil": [0, 9], "get_jnd_image_nam": [0, 9], "get_jnd_ref_image_dir": [0, 9], "get_jnd_ref_image_unprocessed_dir": [0, 9], "get_jnd_user_id": [0, 9], "get_human_scores_fil": [0, 9], "get_human_times_fil": [0, 9], "get_image_name_from_human_scor": [0, 9], "get_image_processing_fil": [0, 9], "get_original_image_fil": [0, 9], "get_original_unprocessed_image_fil": [0, 9], "get_transform_functions_fil": [0, 9], "get_transform_params_fil": [0, 9], "load_json_dict": [0, 9], "load_obj": [0, 9], "make_name_for_tran": [0, 9], "save_2afc_experiment_result": [0, 9], "save_jnd_experiment_result": [0, 9], "save_and_merge_df_as_csv": [0, 9], "save_and_merge_rm_duplicates_df_as_csv": [0, 9], "save_df_as_csv": [0, 9], "save_json_dict": [0, 9], "save_obj": [0, 9], "api": [0, 2, 25, 56], "access": [0, 56, 63], "make": [0, 9, 56, 64, 65, 70, 71], "pyqt6": [0, 1, 9, 13, 20, 56, 58, 63], "iqm": [0, 1, 2, 6, 9, 56, 64, 67, 68, 69, 70, 71], "vi": [0, 1, 2, 9, 56, 64, 67, 68, 69, 70, 71, 72], "todo": [0, 9, 56, 60], "write": [0, 9, 56, 60, 65], "dev_resourc": [0, 9, 56, 60, 67, 68, 69, 70, 71], "doc": [0, 9, 56, 60, 67, 68, 69, 70, 71], "usag": [0, 56], "what": [0, 1, 56, 69, 70, 71], "input": [0, 2, 7, 56, 68, 69], "etc": [0, 56, 70, 71], "attribut": [0, 17, 18, 56, 61, 69], "data_stor": [0, 1, 9, 56], "class": [0, 1, 2, 6, 8, 9, 13, 15, 16, 17, 18, 19, 20, 22, 24, 25, 41, 47, 49, 50, 51, 53, 56, 58, 60, 69], "need": [0, 1, 2, 9, 56, 67, 68, 69, 70, 71], "check_pyqt_install_dep": [0, 66], "sourc": [0, 1, 2, 3, 6, 7, 8, 9, 17, 18, 22, 47], "linux": 0, "doesn": 0, "t": [0, 7, 64], "alwai": 0, "ship": 0, "requir": [0, 1, 13, 64, 67, 68, 70, 71, 72], "librari": [0, 64], "so": [0, 1, 9, 63, 64], "here": [0, 69, 71], "we": [0, 1, 2, 64, 67, 68, 69, 70, 71, 72], "warn": 0, "user": [0, 8, 55, 63, 65, 70, 71], "thei": [0, 2, 69, 70, 71, 72], "instal": 0, "them": [0, 68, 69], "avoid": 0, "crash": 0, "make_ui": [0, 64, 66, 67, 68, 69], "none": [0, 1, 2, 7, 9], "image_list": [0, 1, 2, 68, 69], "list": [0, 1, 2, 7, 9, 68], "home": [0, 1, 9, 68, 69], "matt": [0, 1, 9, 68, 69], "project": [0, 67, 68], "waves1": [0, 68], "jpeg": [0, 8, 68], "waves2": [0, 68], "waves3": 0, "dict": [0, 1, 2, 6, 8, 9], "metrics_info_format": [0, 1], "str": [0, 1, 6], "graph": [0, 1, 9, 58, 63, 65, 70], "metrics_avg_graph": [0, 1], "bool": [0, 6, 7, 9, 47], "true": [0, 1, 3, 6, 7, 9, 47, 68], "metric_param": [0, 1, 9, 69], "default_dataset_nam": [0, 1], "dataset1": [0, 1], "restrict_opt": [0, 1], "num_steps_rang": [0, 1], "11": [0, 1, 6, 7, 9, 47, 64], "debug": 0, "fals": [0, 1, 6, 8, 9, 47], "test": [0, 1, 65, 70], "base": [0, 1, 2, 6, 8, 9, 70, 71], "object": [0, 1, 2, 6, 9, 69, 72], "test_datastore_attribut": [0, 66], "get": [0, 1, 6, 7, 8, 9, 55, 68, 71], "data": [0, 1, 2, 9, 24, 25, 63, 65, 72], "handler": 0, "sure": [0, 64, 65, 69, 70, 71], "its": [0, 8, 9], "properti": [0, 2, 63, 65], "ar": [0, 1, 2, 6, 8, 63, 64, 65, 69, 70, 71, 72], "transform_wrapp": [0, 66], "function": [0, 1, 2, 6, 8, 9, 13, 15, 19, 21, 24, 28, 29, 30, 33, 37, 43, 48, 52, 53, 54, 55, 56, 58, 59, 60, 61, 67, 68, 69, 72], "wrap": 0, "return": [0, 6, 7, 8, 9, 47, 68, 69], "an": [0, 1, 2, 6, 8, 47, 63, 67, 68, 71], "between": [0, 1, 6, 47, 72], "0": [0, 1, 6, 7, 8, 9, 47, 64, 67, 68, 69, 71], "1": [0, 1, 6, 7, 8, 9, 47, 64, 65, 68, 69], "arg": [0, 1, 69], "kwarg": [0, 1, 2, 6, 8, 17, 18, 47, 69], "call": [0, 2, 6, 47, 67, 69], "self": [0, 1, 2, 69], "custom": [1, 13, 63, 68, 69], "subclass": [1, 13], "extent": [1, 13], "name": [1, 2, 8, 9, 70, 71], "clickabl": 1, "label": [1, 9], "qlabel": 1, "add": [1, 8, 67, 69], "event": [1, 9], "can": [1, 63, 64, 65, 67, 68, 69, 70, 71, 72], "qmouseev": 1, "qprogressbar": 1, "creat": [1, 7, 15, 16, 64, 72], "experi": [1, 9, 15, 16, 61, 65, 72], "window": [1, 7, 15, 16], "checked_transformation_param": 1, "image_display_s": 1, "rgb_bright": [1, 9], "display_bright": [1, 9], "image_preprocess": 1, "image_postprocess": 1, "checked_metr": 1, "qmainwindow": 1, "num_imag": 1, "a_tran": 1, "b_tran": 1, "image_nam": 1, "widget_nam": 1, "qcloseev": 1, "setup": [1, 70, 71], "save": [1, 9, 61, 67, 70, 71], "score": [1, 6, 47, 63, 69, 70], "alongsid": [1, 8], "analysi": [1, 63, 68], "purpos": 1, "single_trans_dict": 1, "style": 1, "light": 1, "css_file": 1, "low": 1, "high": 1, "given": [1, 6, 8, 9, 47, 72], "unsort": 1, "arrai": [1, 2, 6, 8, 9, 47, 69], "order": [1, 63, 70], "element": 1, "lower": 1, "than": [1, 8], "pivot": 1, "point": [1, 6, 9, 19, 64, 70], "left": [1, 70], "higher": [1, 8], "right": [1, 70], "tab": [1, 67, 70, 71], "i": [1, 6, 8, 9, 47, 63, 64, 67, 68, 69, 70, 71], "j": 1, "time": 1, "qobject": 1, "chang": [1, 9, 67, 68], "black": [1, 8, 67], "paus": 1, "list1": 1, "list2": 1, "jnd": [1, 9, 16], "dataset_nam": 1, "lower_im_num": 1, "upper_im_num": 1, "http": [1, 6, 20, 67, 68, 69, 70, 71], "www": [1, 6, 20], "verywellmind": 1, "com": [1, 6, 67, 68, 69, 70, 71], "just": [1, 9, 60, 71, 72], "notic": [1, 71], "differ": [1, 2, 7, 65, 70, 71], "2795306": 1, "calc": 1, "directori": [1, 67], "uniqu": [1, 70, 71], "": [1, 68, 69, 70, 71, 72], "same": [1, 2, 6, 24, 47, 69, 70, 71, 72], "decis": [1, 71], "ival": 1, "_redo_plot": 1, "widget_ind": 1, "ind": [1, 9], "trans_str": [1, 9], "result": [1, 7, 9, 63], "sent": 1, "from": [1, 2, 6, 9, 63, 64, 67, 72], "signal": [1, 6, 9, 20], "worker": 1, "disp_len": 1, "5": [1, 6, 7, 8, 9, 47, 67, 68, 69], "set": [1, 65, 70, 71], "up": [1, 65], "smoother": [1, 20], "rang": [1, 7, 8, 9, 67, 68, 69, 70, 71, 72], "calcul": [1, 2, 63, 67], "us": [1, 2, 6, 8, 9, 20, 24, 60, 63, 64, 65, 67, 68, 69, 70, 71], "calc_rang": 1, "preview_num": 1, "append_dataset": 1, "widget_ax": 1, "messag": 1, "entri": [1, 19], "initialis": [1, 19, 69], "app": 1, "metric_range_graph": 1, "300": 1, "num_step_experi": 1, "6": [1, 69], "num_images_scroll_show": 1, "7": [1, 64, 69], "folder": [1, 67, 70, 71], "tran": [1, 2, 9], "menu": [1, 67, 70], "drop": 1, "down": 1, "main_menu": 1, "iter": 1, "action_stor": 1, "connect_func": 1, "maketh": [1, 20], "info": [1, 20], "about": [1, 20, 69], "pythontutori": [1, 20], "net": [1, 20], "pyqt": [1, 20], "qthread": [1, 20], "parent": 1, "qvalid": 1, "int": [1, 7, 8, 68], "tupl": [1, 7], "state": 1, "input_str": 1, "txt": 1, "path": [1, 2, 9, 68], "colour": 1, "text": [1, 9, 58], "when": [1, 6, 9, 47, 67, 68, 70, 71], "checkbox": 1, "press": [1, 70, 71], "kei": [1, 2, 9, 69, 71], "param_group": 1, "sliders_dict": 1, "info_item": 1, "init": [1, 68], "param": [1, 7, 69], "launch": [1, 67, 70, 71], "2": [1, 8, 9, 65, 69, 70], "altern": [1, 70], "forc": [1, 70], "choic": [1, 70], "_min": 1, "_max": 1, "num_step": [1, 9], "mpl_canva": 1, "button": [1, 70, 71], "appli": [1, 2, 67, 72], "new": [1, 7, 9, 64, 67, 71], "v": 1, "gener": [2, 6, 24, 63, 70, 71], "constructor": [2, 24], "both": [2, 24, 72], "refer": [2, 6, 9, 24, 47, 63, 69, 70, 71, 72], "cach": 2, "fucntion": 2, "have": [2, 6, 8, 9, 47, 60, 64, 65, 67, 69, 72], "been": 2, "alreadi": 2, "do": [2, 9, 63, 65, 67, 70, 71], "thi": [2, 9, 63, 64, 67, 68, 69, 70, 71, 72], "convert": [2, 8], "numpi": [2, 9, 63, 69], "hashabl": 2, "sinc": [2, 68], "arr": 2, "mutabl": 2, "achiev": [2, 63], "byte": 2, "load": [2, 9, 64, 70, 71], "buffer": 2, "ref": 2, "func": 2, "image_load": 2, "image_pre_process": 2, "image_post_process": 2, "image_list_to_transform": 2, "human_exp_csv": 2, "store": [2, 68, 69], "commun": 2, "via": 2, "paramet": [2, 6, 8, 9, 47, 65, 67, 69, 71, 72], "file": [2, 3, 9, 67, 68, 70, 71], "dictionari": [2, 68, 69], "valu": [2, 6, 7, 8, 9, 47, 67, 68, 69], "callabl": [2, 69], "option": [2, 7, 63, 68, 70], "default": [2, 6, 8, 9, 47, 67, 69], "which": [2, 6, 9, 47, 63, 64, 65, 70, 72], "after": [2, 9, 67], "For": [2, 68, 69, 71], "crop": [2, 9, 63, 67], "If": [2, 64, 70, 71], "transformed_imag": 2, "metrics_to_us": [2, 9], "index": [2, 6, 9, 47, 64, 65, 72], "file_path": 2, "blueprint": [2, 25], "loader": [2, 25], "abc": 2, "abstract": 2, "avaiabl": [3, 28], "img": [3, 9], "meta_dict": 3, "greycal": 3, "max_lumin": 3, "200": 3, "size": [3, 6, 7, 8, 9, 43, 63, 70, 71], "512": 3, "gaussian_filt": [6, 7], "helper": [6, 9, 48, 59, 60], "comput": [6, 9, 48, 67], "return_imag": [6, 47, 68], "mean": [6, 69, 72], "absolut": 6, "error": [6, 9, 64, 69, 72], "two": [6, 47, 65, 68, 72], "must": [6, 47], "dimens": [6, 47], "whether": [6, 47, 71], "scalar": [6, 7, 47, 68], "im_ref": [6, 47, 69], "im_comp": [6, 47, 69], "instanc": [6, 47], "np": [6, 8, 9, 47, 69], "comparison": [6, 47, 63, 69, 70, 71], "arbitrari": [6, 47], "keyword": [6, 47], "argument": [6, 47, 69], "type": [6, 7, 8, 9, 47, 70, 71], "squar": [6, 8, 9, 67, 69, 72], "root": [6, 70, 71], "peak": 6, "nois": [6, 8, 53], "ratio": 6, "en": 6, "wikipedia": 6, "org": 6, "wiki": 6, "peak_sign": 6, "noise_ratio": 6, "The": [6, 41, 43, 63, 67, 70, 71, 72], "normalis": [6, 68], "take": [6, 63, 67, 69, 70, 71], "psnr": 6, "deep": [6, 72], "structur": [6, 47, 72], "textur": 6, "similar": [6, 47, 68, 70, 72], "code": [6, 9, 60, 64], "github": [6, 65, 67, 68, 69, 70, 71], "dingkeyan93": 6, "pytorch": [6, 63, 64], "backend": [6, 63], "It": [6, 63, 64, 72], "robust": 6, "varianc": 6, "e": [6, 7, 64, 65, 67, 69, 72], "g": [6, 7, 64, 65, 67, 69], "evalu": [6, 63, 65, 72], "gan": 6, "mild": 6, "geometr": [6, 8, 54], "pair": [6, 63], "strictli": 6, "align": 6, "network": 6, "alex": 6, "reduct": 6, "learn": [6, 72], "perceptu": [6, 72], "patch": 6, "pretrain": 6, "choos": 6, "vgg": 6, "squeez": 6, "how": [6, 9, 60, 65, 67, 68, 70, 71], "reduc": 6, "over": [6, 9, 64, 67, 68, 71], "batch": [6, 7], "sum": 6, "multi": 6, "scale": 6, "measur": [6, 47, 67, 72], "give": [6, 47, 70, 72], "loss": [6, 47, 72], "dissimilar": [6, 47], "note": [6, 9, 69, 71], "small": [6, 9], "below": [6, 70], "180": [6, 68], "pixel": [6, 8], "kernel": [6, 7, 8, 68], "compat": 6, "4": [6, 7, 68, 69], "downsiz": 6, "oper": [6, 68, 72], "sigma": [6, 7, 47], "k1": [6, 7, 47], "01": [6, 7, 47], "k2": [6, 7, 47], "03": [6, 7, 47], "mssim_kernel_s": 6, "laplacian": 6, "pyramid": 6, "propos": 6, "valero": 6, "laparra": 6, "et": 6, "al": 6, "uv": 6, "lapeva": 6, "paper": [6, 65], "2016_hvei": 6, "pdf": 6, "qualiti": [6, 8, 63, 65, 68, 72], "associ": 6, "earli": 6, "visual": [6, 65], "system": 6, "local": [6, 68], "lumin": [6, 63, 67, 70, 71], "subtract": 6, "gain": 6, "control": 6, "nlpd_k": 6, "ssim_kernel_s": [6, 47], "avail": [6, 8], "all_param": 6, "provid": [6, 63, 65, 67, 68], "all_metr": 6, "tensor": 7, "win": 7, "d": [7, 71], "torch": 7, "gauss": 7, "x": [7, 9], "y": [7, 9, 64], "data_rang": 7, "float": [7, 8, 9, 68, 69], "255": [7, 8], "size_averag": 7, "win_siz": 7, "win_sigma": 7, "weight": 7, "k": 7, "interfac": [7, 63], "m": 7, "n": [7, 64, 67, 70], "c": [7, 64], "h": [7, 8], "w": 7, "usual": 7, "averag": 7, "normal": [7, 8, 9, 68], "distribut": 7, "accord": [7, 72], "level": 7, "constant": 7, "try": 7, "larger": 7, "you": [7, 64, 65, 67, 68, 69, 70, 71], "neg": 7, "nan": 7, "acceptable_perc": 8, "9": [8, 64], "max_it": 8, "50": 8, "reject_low_nois": 8, "_base_nois": 8, "gaussian": 8, "clip": [8, 69], "ad": [8, 63, 68], "std": 8, "standard": [8, 63], "deviat": 8, "adjust": [8, 67, 69], "random": 8, "hyperspher": 8, "radiu": 8, "epsilon": 8, "prob": 8, "salt": 8, "pepper": 8, "compress": 8, "probabl": 8, "angl": 8, "around": [8, 64], "centr": [8, 9], "skimag": 8, "area": 8, "beyond": 8, "fill": 8, "amount": 8, "degre": 8, "translat": [8, 63], "horizont": 8, "shift": 8, "proport": 8, "vertic": 8, "scale_factor": [8, 9], "digit": 8, "zoom": [8, 9], "percentag": [8, 9], "onli": [8, 9, 67, 68, 70, 71], "2x": [8, 9], "out": [8, 9, 63], "sampl": [8, 55], "start": [8, 55, 68, 69, 70, 71], "threshold": 8, "100": [8, 9, 68], "conver": 8, "binari": 8, "float32": 8, "kernel_s": 8, "convolut": [8, 43], "odd": [8, 68], "number": [8, 67, 70, 71], "b": [8, 67, 70], "less": 8, "decreas": 8, "increas": 8, "101": 8, "encod": 8, "decod": 8, "better": 8, "ident": 8, "sat": 8, "distort": [8, 63, 65, 68, 69, 72], "recommend": [8, 64, 67], "min": [8, 9, 68, 69], "max": [8, 9, 68, 69], "init_valu": [8, 68, 69], "each": [8, 9], "3": [9, 64, 65, 68], "dpi": 9, "polar": 9, "figurecanvasqtagg": 9, "im": 9, "resiz": [9, 63], "250": 9, "border": 9, "frame": 9, "return_dict": 9, "string": 9, "length": 9, "append_char": 9, "plu": 9, "ubyt": 9, "keep_siz": 9, "best": [9, 64, 72], "post": 9, "process": [9, 63, 68, 70, 71, 72], "half": 9, "origin": 9, "crope": 9, "transform_funct": 9, "transform_param": 9, "hold": [9, 41, 43], "item": [9, 67], "correspond": [9, 67, 70], "image_path": 9, "rgb": 9, "128": 9, "specifi": [9, 68], "side": 9, "longest": 9, "matplotlib": [9, 60], "current": [9, 60], "look": [9, 60], "bar_nam": 9, "var_nam": 9, "ax": 9, "lim": 9, "var_valu": 9, "_plot": 9, "change_trans_value_sign": 9, "send": 9, "wa": 9, "trans_str_valu": 9, "transform_valu": 9, "pbar_sign": 9, "stop_flag": 9, "non": [9, 68], "initi": 9, "other": [9, 63], "method": [9, 17, 18, 22, 47], "being": [9, 72], "instead": [9, 68], "simpler": 9, "contain": [9, 67, 70, 71], "fix": 9, "across": 9, "whole": [9, 67, 68, 69, 70, 71], "paramt": [9, 67], "ranc": 9, "individu": 9, "singl": [9, 69], "human_scor": 9, "metric_scor": 9, "scatter": 9, "correl": [9, 63, 70, 72], "metrics_nam": 9, "transformation_nam": 9, "radar": 9, "spider": 9, "annot": 9, "x_label": 9, "y_label": 9, "radar_nam": 9, "figur": [9, 61, 70], "getter": 9, "dir": 9, "pickle_path": 9, "pkl": 9, "trans_nam": 9, "results_ord": 9, "save_dir": 9, "times_taken": 9, "iqm_scores_df": 9, "reult": 9, "csv": [9, 70, 71], "experiment_result": 9, "df": 9, "row": 9, "dict_": 9, "pickl": 9, "modul": [11, 12, 23, 26, 37, 38, 41, 42, 43, 52, 57, 61, 65, 66], "__init__": [17, 18, 22, 47, 69], "expert": [41, 43], "layer": 41, "wavelet_transform": 41, "wavelet": 41, "like": [43, 64, 69, 72], "pad": 43, "maintain": 43, "enabl": 63, "quick": [63, 70], "visualis": [63, 65], "through": [63, 65, 67, 68, 70, 71], "simpl": [63, 65], "conveni": 63, "python": [63, 64, 67], "graphic": [63, 72], "mani": [63, 70, 71], "box": 63, "also": [63, 68, 69, 71, 72], "straightforward": 63, "automat": [63, 70, 71], "well": [63, 64, 65], "compar": [63, 68, 70, 72], "understand": [63, 65], "particular": 63, "fail": 63, "improv": 63, "timescal": 63, "manag": [63, 65], "storag": 63, "against": [63, 70], "desir": [63, 68], "ani": [63, 65, 67, 69, 70, 71], "conform": [63, 65], "select": [63, 65, 67, 70, 71], "further": [63, 65], "stanard": 63, "see": [63, 65, 68, 70, 71], "document": [63, 68], "more": [63, 68], "detail": [63, 65], "includ": [63, 67, 68, 69], "pre": 63, "featur": [63, 65], "screen": [63, 67], "calibr": [63, 70, 71], "capabilit": 63, "form": [63, 69], "displai": [63, 70, 71], "view": [63, 65, 67, 68, 69, 70, 71], "truthfulli": 63, "ha": [63, 70], "conduct": [63, 65], "practition": [63, 65, 72], "analys": [63, 65], "crucial": 63, "real": 63, "world": 63, "design": 63, "facilit": [63, 65], "collect": 63, "particip": [63, 70, 71], "ordin": 63, "perceiv": [63, 72], "expos": 63, "specif": [63, 72], "recurs": 63, "pick": 63, "highest": 63, "respect": [63, 72], "undistort": 63, "underli": 63, "sort": [63, 70], "algorithm": [63, 70, 72], "tutori": 63, "implement": 63, "gui": 63, "develop": 63, "handl": 63, "cover": 63, "opencv": 63, "task": 63, "advantag": 63, "framework": 63, "gpu": [63, 64], "hardwar": 63, "acceler": 63, "import": [64, 67, 68, 69, 72], "fresh": 64, "virtual": 64, "environ": 64, "depend": 64, "clash": 64, "version": [64, 66], "newer": 64, "should": [64, 70], "work": 64, "anaconda": 64, "conda": 64, "iqm_vi": [64, 65, 67, 68, 69], "activ": 64, "would": [64, 67], "cuda": 64, "head": 64, "websit": 64, "download": 64, "relev": 64, "packag": [64, 65, 66, 68, 69], "don": 64, "skip": 64, "step": [64, 70, 71], "13": 64, "torchvis": 64, "14": 64, "torchaudio": 64, "nvidia": 64, "now": [64, 68, 69], "pypi": 64, "pip": 64, "demonstr": [64, 65], "There": [64, 72], "some": [64, 67, 68], "know": 64, "conflict": 64, "10": 64, "ubuntu": 64, "could": 64, "qt": 64, "platform": 64, "plugin": 64, "Then": [64, 69], "miss": 64, "sudo": 64, "apt": 64, "libxcb": 64, "cursor0": 64, "doe": 64, "solv": 64, "problem": 64, "first": [64, 70, 71, 72], "latest": 64, "scratch": 64, "reinstal": 64, "toolbox": 65, "our": [65, 69], "video": 65, "illustr": 65, "read": [65, 70, 71], "depth": 65, "softwar": [65, 72], "abl": 65, "comprehens": 65, "variou": 65, "These": [65, 68, 72], "offer": 65, "round": 65, "perform": [65, 72], "under": 65, "scenario": [65, 72], "without": 65, "procedur": 65, "investig": 65, "wai": 65, "firstli": 65, "inspect": 65, "distor": 65, "behav": 65, "expect": [65, 70], "secondli": 65, "spacial": [65, 68], "repons": 65, "visit": 65, "customis": [65, 70, 71], "subpackag": 66, "submodul": 66, "content": 66, "ui_wrapp": 66, "notebook": [67, 68, 69, 70, 71], "mattclifford1": [67, 68, 69, 70, 71], "tree": [67, 68, 69, 70, 71], "tutorial_1": 67, "making_the_ui": 67, "ipynb": [67, 68, 69, 70, 71], "In": [67, 68, 69, 70, 71, 72], "go": [67, 68, 70, 71], "theh": 67, "within": [67, 69, 71], "To": [67, 68, 70], "packg": 67, "copi": [67, 70], "past": 67, "script": 67, "produc": [67, 72], "blank": 67, "bar": 67, "navig": 67, "place": 67, "befor": [67, 68], "smaller": 67, "boarder": 67, "maximum": 67, "candela": 67, "per": 67, "meter": 67, "tutorial_2": 68, "grip": 68, "peic": 68, "basic": 68, "aspect": 68, "let": [68, 69], "defin": [68, 69], "filepath": 68, "feel": 68, "free": 68, "your": [68, 70, 71], "own": [68, 69, 70, 71], "image1": 68, "image2": 68, "print": 68, "f": 68, "39": 68, "io": 68, "html": 68, "later": [68, 69], "qualit": [68, 72], "mse_imag": 68, "ssim_imag": 68, "littl": 68, "inform": [68, 70, 71], "want": [68, 70], "41": 68, "jpg": 68, "comp": 68, "zero": 68, "pass": [68, 69], "everyth": [68, 70, 71], "maker": 68, "tutorial_3": 69, "advanc": 69, "expand": 69, "exactli": 69, "A": 69, "peel": 69, "off": 69, "extra": 69, "word": 69, "might": [69, 70], "def": 69, "custom_mae_funct": 69, "l1": 69, "ab": 69, "still": 69, "abov": [69, 71], "custom_mae_class": 69, "att": 69, "dummy_arg": 69, "param1": 69, "shown": [69, 70, 71], "dummi": 69, "tell": 69, "follow": 69, "shape": 69, "bound": 69, "anyth": 69, "custom_bright": 69, "put": 69, "8": 69, "kodim01": 69, "png": 69, "kodim02": 69, "tutorial_4": 70, "running_a_2afc_experi": 70, "previou": [70, 71], "thing": [70, 71], "check": [70, 71], "onc": [70, 71], "readi": [70, 71], "doubl": [70, 71], "checl": 70, "match": [70, 71], "pairwis": 70, "most": 70, "until": 70, "believ": 70, "On": 70, "disagre": 70, "scroll": 70, "spearmean": 70, "pearson": 70, "titl": 70, "previous": 70, "human": [70, 71, 72], "tutorial_5": 71, "running_a_jnd_experi": 71, "ONE": 71, "25": 71, "idea": 71, "think": 71, "keyboard": 71, "02": 71, "detect": 71, "repeat": 71, "again": 71, "merg": 71, "exist": 71, "databas": 71, "serv": 72, "attempt": 72, "captur": 72, "goal": 72, "recreat": 72, "psychophys": 72, "utilis": 72, "model": 72, "benchmark": 72, "where": 72, "too": 72, "expens": 72, "obtain": 72, "plethora": 72, "simplest": 72, "euclidean": 72, "space": 72, "tradit": 72, "literatur": 72, "categoris": 72, "group": 72, "consist": 72, "premis": 72, "remain": 72, "unchang": 72, "despit": 72, "presenc": 72, "adher": 72, "principl": 72, "second": 72, "aim": 72, "visibl": 72, "much": 72, "recent": 72, "mimic": 72, "percept": 72, "respons": 72, "rate": 72, "quantit": 72, "necessari": 72, "gather": 72, "empir": 72, "profil": 72, "overse": 72, "context": 72, "mai": 72, "behaviour": 72, "observ": 72, "distanc": 72, "invari": 72, "often": 72, "extrem": 72, "experiment": 72, "lend": 72, "itself": 72, "interact": 72, "why": 72}, "objects": {"": [[11, 0, 0, "-", "IQM_Vis"]], "IQM_Vis": [[12, 0, 0, "-", "UI"], [23, 0, 0, "-", "data_handlers"], [26, 0, 0, "-", "examples"], [37, 0, 0, "-", "metrics"], [52, 0, 0, "-", "transforms"], [56, 0, 0, "-", "ui_wrapper"], [57, 0, 0, "-", "utils"], [62, 0, 0, "-", "version"]], "IQM_Vis.UI": [[13, 0, 0, "-", "custom_widgets"], [15, 0, 0, "-", "experiment_mode_2AFC"], [16, 0, 0, "-", "experiment_mode_JND"], [17, 1, 1, "", "images"], [1, 0, 0, "-", "images"], [18, 1, 1, "", "layout"], [1, 0, 0, "-", "layout"], [19, 0, 0, "-", "main"], [20, 0, 0, "-", "threads"], [21, 0, 0, "-", "utils"], [22, 1, 1, "", "widgets"], [1, 0, 0, "-", "widgets"]], "IQM_Vis.UI.custom_widgets": [[1, 1, 1, "", "ClickLabel"], [1, 1, 1, "", "ProgressBar"]], "IQM_Vis.UI.custom_widgets.ClickLabel": [[1, 2, 1, "", "clicked"], [1, 3, 1, "", "mousePressEvent"]], "IQM_Vis.UI.experiment_mode_2AFC": [[1, 1, 1, "", "make_experiment_2AFC"], [1, 1, 1, "", "reset_image_widget_to_black"], [1, 4, 1, "", "sort_list"]], "IQM_Vis.UI.experiment_mode_2AFC.make_experiment_2AFC": [[1, 3, 1, "", "calc_max_comparisons"], [1, 3, 1, "", "change_experiment_images"], [1, 3, 1, "", "click_completed"], [1, 3, 1, "", "clicked_image"], [1, 3, 1, "", "closeEvent"], [1, 3, 1, "", "experiment_layout"], [1, 3, 1, "", "finish_experiment"], [1, 3, 1, "", "get_all_images"], [1, 3, 1, "", "get_metric_scores"], [1, 3, 1, "", "get_single_transform_im"], [1, 3, 1, "", "get_trans_funcs"], [1, 3, 1, "", "get_unique_save_dir"], [1, 3, 1, "", "init_style"], [1, 3, 1, "", "partition"], [1, 3, 1, "", "quick_sort"], [1, 3, 1, "", "quit"], [1, 2, 1, "", "reset_clicked_image"], [1, 3, 1, "", "reset_experiment"], [1, 3, 1, "", "save_experiment"], [1, 2, 1, "", "saved_experiment"], [1, 3, 1, "", "setup_experiment"], [1, 3, 1, "", "show_all_images"], [1, 3, 1, "", "start_experiment"], [1, 3, 1, "", "swap_inds"], [1, 3, 1, "", "toggle_experiment"]], "IQM_Vis.UI.experiment_mode_2AFC.reset_image_widget_to_black": [[1, 3, 1, "", "change_to_solid"], [1, 2, 1, "", "completed"], [1, 3, 1, "", "stop"]], "IQM_Vis.UI.experiment_mode_JND": [[1, 1, 1, "", "make_experiment_JND"], [1, 1, 1, "", "reset_image_widget_to_black"]], "IQM_Vis.UI.experiment_mode_JND.make_experiment_JND": [[1, 3, 1, "", "closeEvent"], [1, 3, 1, "", "experiment_layout"], [1, 3, 1, "", "finish_experiment"], [1, 3, 1, "", "get_all_images"], [1, 3, 1, "", "get_metric_scores"], [1, 3, 1, "", "get_single_transform_im"], [1, 3, 1, "", "get_trans_funcs"], [1, 3, 1, "", "get_unique_save_dir"], [1, 3, 1, "", "init_style"], [1, 3, 1, "", "quit"], [1, 2, 1, "", "reset_clicked_image"], [1, 3, 1, "", "reset_experiment"], [1, 3, 1, "", "save_experiment"], [1, 2, 1, "", "saved_experiment"], [1, 3, 1, "", "setup_experiment"], [1, 3, 1, "", "show_all_images"], [1, 3, 1, "", "start_experiment"], [1, 3, 1, "", "toggle_experiment"], [1, 3, 1, "", "user_decision"]], "IQM_Vis.UI.experiment_mode_JND.reset_image_widget_to_black": [[1, 3, 1, "", "change_to_solid"], [1, 2, 1, "", "completed"], [1, 3, 1, "", "stop"]], "IQM_Vis.UI.images": [[17, 3, 1, "", "__init__"], [1, 1, 1, "", "images"], [1, 4, 1, "", "message_on_plot"]], "IQM_Vis.UI.images.images": [[1, 3, 1, "", "change_data"], [1, 3, 1, "", "change_data_click_im"], [1, 3, 1, "", "change_metric_correlations_graph"], [1, 3, 1, "", "change_metric_range_graph"], [1, 3, 1, "", "change_preview_images"], [1, 3, 1, "", "change_to_data_num"], [1, 3, 1, "", "change_to_specific_trans"], [1, 3, 1, "", "completed_range_results"], [1, 3, 1, "", "display_images"], [1, 3, 1, "", "display_metric_JND_plot"], [1, 3, 1, "", "display_metric_correlation_plot"], [1, 3, 1, "", "display_metric_images"], [1, 3, 1, "", "display_metric_range_plot"], [1, 3, 1, "", "display_metrics"], [1, 3, 1, "", "display_metrics_graph"], [1, 3, 1, "", "display_metrics_text"], [1, 3, 1, "", "display_radar_plots"], [1, 3, 1, "", "get_export_dir"], [1, 3, 1, "", "get_metrics_over_all_trans_with_init_values"], [1, 3, 1, "", "init_worker_thread"], [1, 3, 1, "", "load_experiment_from_dir"], [1, 3, 1, "", "load_experiment_from_dir_JND"], [1, 3, 1, "", "load_human_experiment"], [1, 3, 1, "", "load_new_images_folder"], [1, 3, 1, "", "load_new_single_image"], [1, 3, 1, "", "plot_metric_range_mlp"], [1, 3, 1, "", "plot_radar_graph"], [1, 3, 1, "", "plot_radar_mlp"], [1, 3, 1, "", "redo_plots"], [1, 2, 1, "", "request_range_work"], [1, 3, 1, "", "set_preview_images"], [1, 3, 1, "", "set_save_dir_mpl"], [1, 3, 1, "", "stopped_range_worker"], [1, 3, 1, "", "update_datastore_image_list"], [1, 2, 1, "", "view_correlation_instance"]], "IQM_Vis.UI.layout": [[18, 3, 1, "", "__init__"], [1, 1, 1, "", "layout"]], "IQM_Vis.UI.layout.layout": [[1, 3, 1, "", "init_layout"], [1, 3, 1, "", "init_style"]], "IQM_Vis.UI.main": [[1, 1, 1, "", "make_app"], [1, 4, 1, "", "set_checked_menu_from_iterable"]], "IQM_Vis.UI.main.make_app": [[1, 3, 1, "", "change_save_folder"], [1, 3, 1, "", "clear_all_cache_data"], [1, 3, 1, "", "closeEvent"], [1, 3, 1, "", "construct_UI"], [1, 3, 1, "", "get_menu_checkboxes"], [1, 3, 1, "", "load_all_metric_images"], [1, 3, 1, "", "load_all_metrics"], [1, 3, 1, "", "load_all_transforms"], [1, 3, 1, "", "make_menu"], [1, 3, 1, "", "make_status_bar"], [1, 3, 1, "", "quit"], [1, 3, 1, "", "reset_correlation_data"]], "IQM_Vis.UI.threads": [[1, 1, 1, "", "get_range_results_worker"]], "IQM_Vis.UI.threads.get_range_results_worker": [[1, 2, 1, "", "completed"], [1, 2, 1, "", "current_image"], [1, 3, 1, "", "do_work"], [1, 2, 1, "", "progress"], [1, 3, 1, "", "stop"], [1, 2, 1, "", "stopped"]], "IQM_Vis.UI.utils": [[1, 4, 1, "", "add_layout_to_tab"]], "IQM_Vis.UI.widgets": [[22, 3, 1, "", "__init__"], [1, 1, 1, "", "custom_float_validator"], [1, 4, 1, "", "get_float_validator"], [1, 4, 1, "", "is_almost_float"], [1, 4, 1, "", "is_float"], [1, 4, 1, "", "make_float_from_text"], [1, 1, 1, "", "widgets"]], "IQM_Vis.UI.widgets.custom_float_validator": [[1, 3, 1, "", "validate"]], "IQM_Vis.UI.widgets.widgets": [[1, 3, 1, "", "JND_dataset_range_lower"], [1, 3, 1, "", "JND_dataset_range_upper"], [1, 3, 1, "", "change_dataset_name"], [1, 3, 1, "", "change_display_im_display_brightness"], [1, 3, 1, "", "change_display_im_rgb_brightness"], [1, 3, 1, "", "change_display_im_size"], [1, 3, 1, "", "change_graph_size"], [1, 3, 1, "", "change_human_scores_after_exp_2AFC"], [1, 3, 1, "", "change_human_scores_after_exp_JND"], [1, 3, 1, "", "change_num_steps"], [1, 3, 1, "", "change_plot_lims"], [1, 3, 1, "", "change_post_processing"], [1, 3, 1, "", "change_pre_processing"], [1, 3, 1, "", "change_text_exp_trans"], [1, 3, 1, "", "change_text_export_trans"], [1, 3, 1, "", "colour_lineedit"], [1, 3, 1, "", "disable_settings_button"], [1, 3, 1, "", "display_slider_num"], [1, 3, 1, "", "edit_slider_vals"], [1, 3, 1, "", "enable_settings_button"], [1, 3, 1, "", "export_trans_images"], [1, 3, 1, "", "generic_value_change"], [1, 3, 1, "", "init_widgets"], [1, 3, 1, "", "launch_experiment_2AFC"], [1, 3, 1, "", "launch_experiment_JND"], [1, 3, 1, "", "make_slider_range"], [1, 3, 1, "", "open_mlp_new"], [1, 3, 1, "", "reset_slider_group"], [1, 3, 1, "", "reset_sliders"], [1, 3, 1, "", "set_image_name_text"], [1, 3, 1, "", "update_image_settings"], [1, 3, 1, "", "update_progress"], [1, 3, 1, "", "update_status_bar"]], "IQM_Vis.data_handlers": [[24, 0, 0, "-", "data_api"], [25, 0, 0, "-", "data_api_abstract"]], "IQM_Vis.data_handlers.data_api": [[2, 1, 1, "", "cache_metric_call"], [2, 4, 1, "", "cache_tracked"], [2, 1, 1, "", "dataset_holder"], [2, 4, 1, "", "get_image_name"]], "IQM_Vis.data_handlers.data_api.cache_metric_call": [[2, 3, 1, "", "__call__"]], "IQM_Vis.data_handlers.data_api.dataset_holder": [[2, 3, 1, "", "add_metric"], [2, 3, 1, "", "add_metric_image"], [2, 3, 1, "", "clear_all_cache"], [2, 3, 1, "", "get_image_dataset_list"], [2, 3, 1, "", "get_image_to_transform"], [2, 3, 1, "", "get_image_to_transform_name"], [2, 3, 1, "", "get_metric_images"], [2, 3, 1, "", "get_metrics"], [2, 3, 1, "", "get_reference_image"], [2, 3, 1, "", "get_reference_image_by_index"], [2, 3, 1, "", "get_reference_image_name"], [2, 3, 1, "", "get_reference_unprocessed"], [2, 3, 1, "", "load_image_list"]], "IQM_Vis.data_handlers.data_api_abstract": [[2, 1, 1, "", "base_dataloader"], [2, 1, 1, "", "base_dataset_loader"]], "IQM_Vis.data_handlers.data_api_abstract.base_dataloader": [[2, 3, 1, "", "get_image_to_transform"], [2, 3, 1, "", "get_image_to_transform_name"], [2, 3, 1, "", "get_metric_images"], [2, 3, 1, "", "get_metrics"], [2, 3, 1, "", "get_reference_image"], [2, 3, 1, "", "get_reference_image_name"], [2, 5, 1, "", "metric_images"], [2, 5, 1, "", "metrics"]], "IQM_Vis.data_handlers.data_api_abstract.base_dataset_loader": [[2, 3, 1, "", "get_reference_image_by_index"]], "IQM_Vis.examples": [[27, 0, 0, "-", "KODAK_dataset"], [28, 0, 0, "-", "all"], [29, 0, 0, "-", "dataset"], [30, 0, 0, "-", "dists"], [32, 0, 0, "-", "images"], [33, 0, 0, "-", "kodak"]], "IQM_Vis.examples.all": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.dataset": [[3, 4, 1, "", "run"]], "IQM_Vis.examples.dists": [[3, 4, 1, "", "correct"], [3, 4, 1, "", "load_and_calibrate_image"], [3, 4, 1, "", "run"]], "IQM_Vis.examples.kodak": [[3, 4, 1, "", "run"]], "IQM_Vis.metrics": [[38, 0, 0, "-", "NLPD_torch"], [47, 1, 1, "", "SSIM"], [7, 0, 0, "-", "SSIM"], [6, 4, 1, "", "get_all_IQM_params"], [6, 4, 1, "", "get_all_metric_images"], [6, 4, 1, "", "get_all_metrics"], [48, 0, 0, "-", "metric_utils"], [49, 0, 0, "-", "non_perceptual"], [50, 0, 0, "-", "perceptual_DL"], [51, 0, 0, "-", "perceptual_trad"]], "IQM_Vis.metrics.NLPD_torch": [[39, 0, 0, "-", "layers"], [41, 0, 0, "-", "pyramids"], [42, 0, 0, "-", "utils"]], "IQM_Vis.metrics.NLPD_torch.utils": [[43, 0, 0, "-", "conv"]], "IQM_Vis.metrics.SSIM": [[47, 3, 1, "", "__call__"], [47, 3, 1, "", "__init__"], [7, 0, 0, "-", "ssim"]], "IQM_Vis.metrics.SSIM.ssim": [[7, 4, 1, "", "gaussian_filter"], [7, 4, 1, "", "ms_ssim"]], "IQM_Vis.metrics.non_perceptual": [[6, 1, 1, "", "MAE"], [6, 1, 1, "", "MSE"], [6, 1, 1, "", "RMSE"], [6, 1, 1, "", "one_over_PSNR"]], "IQM_Vis.metrics.non_perceptual.MAE": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.MSE": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.RMSE": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.non_perceptual.one_over_PSNR": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_DL": [[6, 1, 1, "", "DISTS"], [6, 1, 1, "", "LPIPS"]], "IQM_Vis.metrics.perceptual_DL.DISTS": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_DL.LPIPS": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad": [[6, 1, 1, "", "MS_SSIM"], [6, 1, 1, "", "NLPD"], [6, 1, 1, "", "SSIM"]], "IQM_Vis.metrics.perceptual_trad.MS_SSIM": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad.NLPD": [[6, 3, 1, "", "__call__"]], "IQM_Vis.metrics.perceptual_trad.SSIM": [[6, 3, 1, "", "__call__"]], "IQM_Vis.transforms": [[53, 0, 0, "-", "additive_noise"], [54, 0, 0, "-", "affine"], [55, 0, 0, "-", "effects"], [8, 4, 1, "", "get_all_transforms"]], "IQM_Vis.transforms.additive_noise": [[8, 1, 1, "", "Gaussian_noise"], [8, 1, 1, "", "noise_hypersphere"], [8, 4, 1, "", "salt_and_pepper_noise"]], "IQM_Vis.transforms.affine": [[8, 4, 1, "", "rotation"], [8, 4, 1, "", "x_shift"], [8, 4, 1, "", "y_shift"], [8, 4, 1, "", "zoom_image"]], "IQM_Vis.transforms.effects": [[8, 4, 1, "", "binary_threshold"], [8, 4, 1, "", "blur"], [8, 4, 1, "", "brightness"], [8, 4, 1, "", "brightness_hsv"], [8, 4, 1, "", "contrast"], [8, 4, 1, "", "hue"], [8, 4, 1, "", "jpeg_compression"], [8, 4, 1, "", "saturation"]], "IQM_Vis.ui_wrapper": [[0, 4, 1, "", "check_pyqt_install_deps"], [0, 1, 1, "", "make_UI"], [0, 4, 1, "", "test_datastore_attributes"], [0, 1, 1, "", "transform_wrapper"]], "IQM_Vis.ui_wrapper.make_UI": [[0, 3, 1, "", "show"]], "IQM_Vis.ui_wrapper.transform_wrapper": [[0, 3, 1, "", "__call__"]], "IQM_Vis.utils": [[58, 0, 0, "-", "gui_utils"], [59, 0, 0, "-", "image_utils"], [60, 0, 0, "-", "plot_utils"], [61, 0, 0, "-", "save_utils"]], "IQM_Vis.utils.gui_utils": [[9, 1, 1, "", "MplCanvas"], [9, 4, 1, "", "change_im"], [9, 4, 1, "", "get_image_pair_name"], [9, 4, 1, "", "get_metric_image_name"], [9, 4, 1, "", "get_resolutions"], [9, 4, 1, "", "get_trans_dict_from_str"], [9, 4, 1, "", "get_transformed_image_name"], [9, 4, 1, "", "str_to_len"]], "IQM_Vis.utils.image_utils": [[9, 4, 1, "", "calibrate_brightness"], [9, 4, 1, "", "crop_centre"], [9, 4, 1, "", "get_transform_image"], [9, 4, 1, "", "load_image"], [9, 4, 1, "", "resize_image"], [9, 4, 1, "", "resize_to_longest_side"], [9, 4, 1, "", "save_image"]], "IQM_Vis.utils.plot_utils": [[9, 1, 1, "", "bar_plotter"], [9, 4, 1, "", "click_scatter"], [9, 4, 1, "", "compute_metric_for_human_correlation"], [9, 4, 1, "", "compute_metrics_over_range"], [9, 4, 1, "", "compute_metrics_over_range_single_trans"], [9, 4, 1, "", "get_all_single_transform_params"], [9, 4, 1, "", "get_all_slider_values"], [9, 4, 1, "", "get_correlation_plot"], [9, 4, 1, "", "get_radar_plots_avg_plots"], [9, 4, 1, "", "get_transform_range_plots"], [9, 4, 1, "", "hover_scatter"], [9, 1, 1, "", "line_plotter"], [9, 1, 1, "", "radar_plotter"], [9, 1, 1, "", "scatter_plotter"], [9, 4, 1, "", "update_annot"]], "IQM_Vis.utils.plot_utils.bar_plotter": [[9, 3, 1, "", "plot"], [9, 3, 1, "", "set_plot_lims"], [9, 3, 1, "", "set_style"], [9, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.line_plotter": [[9, 3, 1, "", "plot"], [9, 3, 1, "", "set_plot_lims"], [9, 3, 1, "", "set_style"], [9, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.radar_plotter": [[9, 3, 1, "", "plot"], [9, 3, 1, "", "set_plot_lims"], [9, 3, 1, "", "set_style"], [9, 3, 1, "", "show"]], "IQM_Vis.utils.plot_utils.scatter_plotter": [[9, 3, 1, "", "plot"], [9, 3, 1, "", "set_plot_lims"], [9, 3, 1, "", "set_style"], [9, 3, 1, "", "show"]], "IQM_Vis.utils.save_utils": [[9, 6, 1, "", "DEFAULT_SAVE_DIR"], [9, 4, 1, "", "get_IQM_file"], [9, 4, 1, "", "get_JND_image_names"], [9, 4, 1, "", "get_JND_ref_image_dir"], [9, 4, 1, "", "get_JND_ref_image_unprocessed_dir"], [9, 4, 1, "", "get_JND_user_ID"], [9, 4, 1, "", "get_human_scores_file"], [9, 4, 1, "", "get_human_times_file"], [9, 4, 1, "", "get_image_name_from_human_scores"], [9, 4, 1, "", "get_image_processing_file"], [9, 4, 1, "", "get_original_image_file"], [9, 4, 1, "", "get_original_unprocessed_image_file"], [9, 4, 1, "", "get_transform_functions_file"], [9, 4, 1, "", "get_transform_params_file"], [9, 4, 1, "", "load_json_dict"], [9, 4, 1, "", "load_obj"], [9, 4, 1, "", "make_name_for_trans"], [9, 4, 1, "", "save_2AFC_experiment_results"], [9, 4, 1, "", "save_JND_experiment_results"], [9, 4, 1, "", "save_and_merge_df_as_csv"], [9, 4, 1, "", "save_and_merge_rm_duplicates_df_as_csv"], [9, 4, 1, "", "save_df_as_csv"], [9, 4, 1, "", "save_json_dict"], [9, 4, 1, "", "save_obj"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function", "5": "py:property", "6": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"], "6": ["py", "data", "Python data"]}, "titleterms": {"iqm_vi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66], "packag": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "subpackag": [0, 3, 6], "submodul": [0, 1, 2, 3, 6, 7, 8, 9], "ui_wrapp": [0, 56], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "version": [0, 62], "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "ui": [1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 67, 69], "custom_widget": [1, 13], "experiment_mode_2afc": [1, 15], "experiment_mode_jnd": [1, 16], "imag": [1, 5, 17, 32, 67, 68], "layout": [1, 18], "main": [1, 19], "thread": [1, 20], "util": [1, 9, 21, 42, 43, 44, 45, 46, 57, 58, 59, 60, 61], "widget": [1, 22], "data_handl": [2, 23, 24, 25], "data_api": [2, 24], "data_api_abstract": [2, 25], "exampl": [3, 4, 5, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "all": [3, 28, 68], "dataset": [3, 29], "dist": [3, 30], "kodak": [3, 33], "kodak_dataset": [4, 27], "metric": [6, 7, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 67, 68, 69], "metric_util": [6, 48], "non_perceptu": [6, 49], "perceptual_dl": [6, 50], "perceptual_trad": [6, 51], "ssim": [7, 47], "transform": [8, 52, 53, 54, 55, 67, 68, 69], "additive_nois": [8, 53], "affin": [8, 54], "effect": [8, 55], "gui_util": [9, 58], "image_util": [9, 59], "plot_util": [9, 60], "save_util": [9, 61], "tutori": [10, 65, 67, 68, 69, 70, 71], "experiment_mod": 14, "experi": [31, 63, 67, 70, 71], "multipl": 34, "new_api": 35, "simpl": [36, 68], "nlpd_torch": [38, 39, 40, 41, 42, 43, 44, 45, 46], "layer": [39, 40], "divisive_normalis": 40, "pyramid": 41, "conv": 43, "fourier": 44, "interp1d": 45, "pyramid_filt": 46, "about": [63, 65], "iqm": [63, 65, 72], "vi": [63, 65], "what": [63, 65, 72], "offer": 63, "built": 63, "function": 63, "human": [63, 65], "percept": [63, 65], "softwar": 63, "get": [64, 65], "start": [64, 65], "instal": 64, "test": 64, "common": 64, "issu": 64, "document": 65, "quantit": 65, "analysi": 65, "qualit": 65, "correl": 65, "sourc": 65, "code": 65, "i": [65, 72], "an": [65, 72], "indic": 65, "tabl": 65, "1": 67, "make": [67, 69], "ad": 67, "load": 67, "your": [67, 72], "own": 67, "set": 67, "pre": 67, "process": 67, "post": 67, "displai": 67, "size": 67, "graph": 67, "step": 67, "rgb": 67, "max": 67, "bright": 67, "dispali": 67, "other": 67, "2": 68, "customis": [68, 69], "put": 68, "togeth": 68, "3": 69, "detail": 69, "4": [70, 71], "run": [70, 71], "2afc": 70, "screen": [70, 71], "info": [70, 71], "finish": [70, 71], "visualis": [70, 71], "result": [70, 71], "jnd": 71, "differ": 72, "type": 72, "how": 72, "choos": 72, "For": 72, "task": 72}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "nbsphinx": 4, "sphinx": 57}, "alltitles": {"IQM_Vis package": [[0, "iqm-vis-package"]], "Subpackages": [[0, "subpackages"], [3, "subpackages"], [6, "subpackages"]], "Submodules": [[0, "submodules"], [1, "submodules"], [2, "submodules"], [3, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"]], "IQM_Vis.ui_wrapper module": [[0, "module-IQM_Vis.ui_wrapper"]], "IQM_Vis.version module": [[0, "module-IQM_Vis.version"]], "Module contents": [[0, "module-IQM_Vis"], [1, "module-IQM_Vis.UI"], [2, "module-IQM_Vis.data_handlers"], [3, "module-IQM_Vis.examples"], [4, "module-IQM_Vis.examples.KODAK_dataset"], [5, "module-IQM_Vis.examples.images"], [6, "module-IQM_Vis.metrics"], [7, "module-IQM_Vis.metrics.SSIM"], [8, "module-IQM_Vis.transforms"], [9, "module-IQM_Vis.utils"]], "IQM_Vis.UI package": [[1, "iqm-vis-ui-package"]], "IQM_Vis.UI.custom_widgets module": [[1, "module-IQM_Vis.UI.custom_widgets"]], "IQM_Vis.UI.experiment_mode_2AFC module": [[1, "module-IQM_Vis.UI.experiment_mode_2AFC"]], "IQM_Vis.UI.experiment_mode_JND module": [[1, "module-IQM_Vis.UI.experiment_mode_JND"]], "IQM_Vis.UI.images module": [[1, "module-IQM_Vis.UI.images"]], "IQM_Vis.UI.layout module": [[1, "module-IQM_Vis.UI.layout"]], "IQM_Vis.UI.main module": [[1, "module-IQM_Vis.UI.main"]], "IQM_Vis.UI.threads module": [[1, "module-IQM_Vis.UI.threads"]], "IQM_Vis.UI.utils module": [[1, "module-IQM_Vis.UI.utils"]], "IQM_Vis.UI.widgets module": [[1, "module-IQM_Vis.UI.widgets"]], "IQM_Vis.data_handlers package": [[2, "iqm-vis-data-handlers-package"]], "IQM_Vis.data_handlers.data_api module": [[2, "module-IQM_Vis.data_handlers.data_api"]], "IQM_Vis.data_handlers.data_api_abstract module": [[2, "module-IQM_Vis.data_handlers.data_api_abstract"]], "IQM_Vis.examples package": [[3, "iqm-vis-examples-package"]], "IQM_Vis.examples.all module": [[3, "module-IQM_Vis.examples.all"]], "IQM_Vis.examples.dataset module": [[3, "module-IQM_Vis.examples.dataset"]], "IQM_Vis.examples.dists module": [[3, "module-IQM_Vis.examples.dists"]], "IQM_Vis.examples.kodak module": [[3, "module-IQM_Vis.examples.kodak"]], "IQM_Vis.examples.KODAK_dataset package": [[4, "iqm-vis-examples-kodak-dataset-package"]], "IQM_Vis.examples.images package": [[5, "iqm-vis-examples-images-package"]], "IQM_Vis.metrics package": [[6, "iqm-vis-metrics-package"]], "IQM_Vis.metrics.metric_utils module": [[6, "module-IQM_Vis.metrics.metric_utils"]], "IQM_Vis.metrics.non_perceptual module": [[6, "module-IQM_Vis.metrics.non_perceptual"]], "IQM_Vis.metrics.perceptual_DL module": [[6, "module-IQM_Vis.metrics.perceptual_DL"]], "IQM_Vis.metrics.perceptual_trad module": [[6, "module-IQM_Vis.metrics.perceptual_trad"]], "IQM_Vis.metrics.SSIM package": [[7, "iqm-vis-metrics-ssim-package"]], "IQM_Vis.metrics.SSIM.ssim module": [[7, "module-IQM_Vis.metrics.SSIM.ssim"]], "IQM_Vis.transforms package": [[8, "iqm-vis-transforms-package"]], "IQM_Vis.transforms.additive_noise module": [[8, "module-IQM_Vis.transforms.additive_noise"]], "IQM_Vis.transforms.affine module": [[8, "module-IQM_Vis.transforms.affine"]], "IQM_Vis.transforms.effects module": [[8, "module-IQM_Vis.transforms.effects"]], "IQM_Vis.utils package": [[9, "iqm-vis-utils-package"]], "IQM_Vis.utils.gui_utils module": [[9, "module-IQM_Vis.utils.gui_utils"]], "IQM_Vis.utils.image_utils module": [[9, "module-IQM_Vis.utils.image_utils"]], "IQM_Vis.utils.plot_utils module": [[9, "module-IQM_Vis.utils.plot_utils"]], "IQM_Vis.utils.save_utils module": [[9, "module-IQM_Vis.utils.save_utils"]], "IQM_Vis": [[11, "module-IQM_Vis"], [66, "iqm-vis"]], "IQM_Vis.UI": [[12, "module-IQM_Vis.UI"]], "IQM_Vis.UI.custom_widgets": [[13, "module-IQM_Vis.UI.custom_widgets"]], "IQM_Vis.UI.experiment_mode_2AFC": [[15, "module-IQM_Vis.UI.experiment_mode_2AFC"]], "IQM_Vis.UI.experiment_mode_JND": [[16, "module-IQM_Vis.UI.experiment_mode_JND"]], "IQM_Vis.UI.images": [[17, "iqm-vis-ui-images"]], "IQM_Vis.UI.layout": [[18, "iqm-vis-ui-layout"]], "IQM_Vis.UI.main": [[19, "module-IQM_Vis.UI.main"]], "IQM_Vis.UI.threads": [[20, "module-IQM_Vis.UI.threads"]], "IQM_Vis.UI.utils": [[21, "module-IQM_Vis.UI.utils"]], "IQM_Vis.UI.widgets": [[22, "iqm-vis-ui-widgets"]], "IQM_Vis.data_handlers": [[23, "module-IQM_Vis.data_handlers"]], "IQM_Vis.data_handlers.data_api": [[24, "module-IQM_Vis.data_handlers.data_api"]], "IQM_Vis.data_handlers.data_api_abstract": [[25, "module-IQM_Vis.data_handlers.data_api_abstract"]], "IQM_Vis.examples": [[26, "module-IQM_Vis.examples"]], "IQM_Vis.examples.KODAK_dataset": [[27, "module-IQM_Vis.examples.KODAK_dataset"]], "IQM_Vis.examples.all": [[28, "module-IQM_Vis.examples.all"]], "IQM_Vis.examples.dataset": [[29, "module-IQM_Vis.examples.dataset"]], "IQM_Vis.examples.dists": [[30, "module-IQM_Vis.examples.dists"]], "IQM_Vis.examples.images": [[32, "module-IQM_Vis.examples.images"]], "IQM_Vis.examples.kodak": [[33, "module-IQM_Vis.examples.kodak"]], "IQM_Vis.metrics": [[37, "module-IQM_Vis.metrics"]], "IQM_Vis.metrics.NLPD_torch": [[38, "module-IQM_Vis.metrics.NLPD_torch"]], "IQM_Vis.metrics.NLPD_torch.layers": [[39, "module-IQM_Vis.metrics.NLPD_torch.layers"]], "IQM_Vis.metrics.NLPD_torch.pyramids": [[41, "module-IQM_Vis.metrics.NLPD_torch.pyramids"]], "IQM_Vis.metrics.NLPD_torch.utils": [[42, "module-IQM_Vis.metrics.NLPD_torch.utils"]], "IQM_Vis.metrics.NLPD_torch.utils.conv": [[43, "module-IQM_Vis.metrics.NLPD_torch.utils.conv"]], "IQM_Vis.metrics.SSIM": [[47, "iqm-vis-metrics-ssim"]], "IQM_Vis.metrics.metric_utils": [[48, "module-IQM_Vis.metrics.metric_utils"]], "IQM_Vis.metrics.non_perceptual": [[49, "module-IQM_Vis.metrics.non_perceptual"]], "IQM_Vis.metrics.perceptual_DL": [[50, "module-IQM_Vis.metrics.perceptual_DL"]], "IQM_Vis.metrics.perceptual_trad": [[51, "module-IQM_Vis.metrics.perceptual_trad"]], "IQM_Vis.transforms": [[52, "module-IQM_Vis.transforms"]], "IQM_Vis.transforms.additive_noise": [[53, "module-IQM_Vis.transforms.additive_noise"]], "IQM_Vis.transforms.affine": [[54, "module-IQM_Vis.transforms.affine"]], "IQM_Vis.transforms.effects": [[55, "module-IQM_Vis.transforms.effects"]], "IQM_Vis.ui_wrapper": [[56, "module-IQM_Vis.ui_wrapper"]], "IQM_Vis.utils": [[57, "module-IQM_Vis.utils"]], "IQM_Vis.utils.gui_utils": [[58, "module-IQM_Vis.utils.gui_utils"]], "IQM_Vis.utils.image_utils": [[59, "module-IQM_Vis.utils.image_utils"]], "IQM_Vis.utils.plot_utils": [[60, "module-IQM_Vis.utils.plot_utils"]], "IQM_Vis.utils.save_utils": [[61, "module-IQM_Vis.utils.save_utils"]], "IQM_Vis.version": [[62, "module-IQM_Vis.version"]], "About IQM-Vis": [[63, "about-iqm-vis"]], "What IQM-Vis Offers": [[63, "what-iqm-vis-offers"]], "Built in functionality": [[63, "built-in-functionality"]], "Human Perception Experiments": [[63, "human-perception-experiments"]], "Software": [[63, "software"]], "Getting Started": [[64, "getting-started"]], "Installation": [[64, "installation"]], "Testing the installation": [[64, "testing-the-installation"]], "Common Issues": [[64, "common-issues"]], "IQM-Vis documentation": [[65, "iqm-vis-documentation"]], "Quantitive Analysis": [[65, "quantitive-analysis"]], "Qualitative Analysis": [[65, "qualitative-analysis"]], "Correlation to Human Perception": [[65, "correlation-to-human-perception"]], "Source Code": [[65, "source-code"]], "What is an IQM?:": [[65, null]], "About IQM-Vis:": [[65, null]], "Getting Started:": [[65, null]], "Tutorials:": [[65, null]], "Documentation:": [[65, null]], "Indices and tables": [[65, "indices-and-tables"]], "Tutorial 1: Making the UI": [[67, "Tutorial-1:-Making-the-UI"]], "Adding transformations and metrics": [[67, "Adding-transformations-and-metrics"]], "Loading your own images": [[67, "Loading-your-own-images"]], "Settings": [[67, "Settings"]], "Image Pre Processing:": [[67, "Image-Pre-Processing:"]], "Image Post Processing:": [[67, "Image-Post-Processing:"]], "Image Display Size:": [[67, "Image-Display-Size:"]], "Graph Display Size:": [[67, "Graph-Display-Size:"]], "Graph/Experiment Step Size:": [[67, "Graph/Experiment-Step-Size:"]], "RGB Max Brightness:": [[67, "RGB-Max-Brightness:"]], "Dispaly Max Brightness:": [[67, "Dispaly-Max-Brightness:"]], "Other Settings": [[67, "Other-Settings"]], "Tutorial 2: Simple Customisation": [[68, "Tutorial-2:-Simple-Customisation"]], "Images": [[68, "Images"]], "Metrics": [[68, "Metrics"], [69, "Metrics"]], "Metric Images": [[68, "Metric-Images"]], "Transformations": [[68, "Transformations"], [69, "Transformations"]], "Putting it all together": [[68, "Putting-it-all-together"]], "Tutorial 3: Customisation Details": [[69, "Tutorial-3:-Customisation-Details"]], "Making the UI": [[69, "Making-the-UI"]], "Tutorial 4: Running a 2AFC Experiment": [[70, "Tutorial-4:-Running-a-2AFC-Experiment"]], "Experiment Screen": [[70, "Experiment-Screen"], [71, "Experiment-Screen"]], "Experiment Info": [[70, "Experiment-Info"], [71, "Experiment-Info"]], "Experiment Running": [[70, "Experiment-Running"], [71, "Experiment-Running"]], "Experiment Finished": [[70, "Experiment-Finished"], [71, "Experiment-Finished"]], "Visualising the experiment results": [[70, "Visualising-the-experiment-results"], [71, "Visualising-the-experiment-results"]], "Tutorial 4: Running a JND Experiment": [[71, "Tutorial-4:-Running-a-JND-Experiment"]], "IQMs": [[72, "iqms"]], "What is an IQM?": [[72, "what-is-an-iqm"]], "Different types of IQMs": [[72, "different-types-of-iqms"]], "How to Choose an IQM For Your Task?": [[72, "how-to-choose-an-iqm-for-your-task"]], "Tutorials": [[10, "tutorials"]], "IQM_Vis.UI.experiment_mode": [[14, "iqm-vis-ui-experiment-mode"]], "IQM_Vis.examples.experiment": [[31, "iqm-vis-examples-experiment"]], "IQM_Vis.examples.multiple": [[34, "iqm-vis-examples-multiple"]], "IQM_Vis.examples.new_api": [[35, "iqm-vis-examples-new-api"]], "IQM_Vis.examples.simple": [[36, "iqm-vis-examples-simple"]], "IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation": [[40, "iqm-vis-metrics-nlpd-torch-layers-divisive-normalisation"]], "IQM_Vis.metrics.NLPD_torch.utils.fourier": [[44, "iqm-vis-metrics-nlpd-torch-utils-fourier"]], "IQM_Vis.metrics.NLPD_torch.utils.interp1d": [[45, "iqm-vis-metrics-nlpd-torch-utils-interp1d"]], "IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters": [[46, "iqm-vis-metrics-nlpd-torch-utils-pyramid-filters"]]}, "indexentries": {}}) \ No newline at end of file
    diff --git a/dev_resources/docs/_build/html/modules.html b/dev_resources/docs/_build/html/modules.html index 7a7575b..552727d 100644 --- a/dev_resources/docs/_build/html/modules.html +++ b/dev_resources/docs/_build/html/modules.html @@ -96,7 +96,8 @@

    IQM_VisIQM_Vis.UI package diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_1-making_the_UI.html b/dev_resources/docs/_build/html/notebooks/Tutorial_1-making_the_UI.html index 1f23ef5..2e9063b 100644 --- a/dev_resources/docs/_build/html/notebooks/Tutorial_1-making_the_UI.html +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_1-making_the_UI.html @@ -78,8 +78,6 @@
  • Tutorial 2: Simple Customisation
  • Tutorial 3: Customisation Details
  • -
  • Tutorial 4: Running an Experiment
  • -
  • Visualising the experiment results
  • diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_2-Customisation.html b/dev_resources/docs/_build/html/notebooks/Tutorial_2-Customisation.html index e3c4bb6..e48bde3 100644 --- a/dev_resources/docs/_build/html/notebooks/Tutorial_2-Customisation.html +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_2-Customisation.html @@ -73,8 +73,6 @@
  • Tutorial 3: Customisation Details
  • -
  • Tutorial 4: Running an Experiment
  • -
  • Visualising the experiment results
  • diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_3-Advanced-Customisations.html b/dev_resources/docs/_build/html/notebooks/Tutorial_3-Advanced-Customisations.html index 7336352..4ee8ea4 100644 --- a/dev_resources/docs/_build/html/notebooks/Tutorial_3-Advanced-Customisations.html +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_3-Advanced-Customisations.html @@ -23,7 +23,7 @@ - + @@ -69,8 +69,6 @@
  • Making the UI
  • -
  • Tutorial 4: Running an Experiment
  • -
  • Visualising the experiment results
  • @@ -234,7 +232,7 @@

    Making the UI - +
    diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.html b/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.html similarity index 65% rename from dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.html rename to dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.html index ebb3b1d..1034159 100644 --- a/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.html +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.html @@ -4,7 +4,7 @@ - Tutorial 4: Running an Experiment — IQM-Vis 0.2 documentation + Tutorial 4: Running a 2AFC Experiment — IQM-Vis 0.2 documentation @@ -21,9 +21,7 @@ - - - + @@ -58,23 +56,8 @@
  • Getting Started
  • Tutorials:

    -
      -
    • Tutorials -
    • +

      Documentation:

        @@ -96,10 +79,9 @@

        @@ -107,23 +89,25 @@
        -

        View the whole notebook: https://github.com/mattclifford1/IQM-Vis/tree/main/dev_resources/docs/notebooks/Tutorial_4-running_an_experiment.ipynb

        +

        View the whole notebook: https://github.com/mattclifford1/IQM-Vis/tree/main/dev_resources/docs/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb


        -
        -

        Tutorial 4: Running an Experiment

        -

        In this tutorial we will go through how to setup and run an experiment.

        +
        +

        Tutorial 4: Running a 2AFC Experiment

        +

        In this tutorial we will go through how to setup and run a 2 Alternate Forced Choice experiment.

        First you need to Launch the UI with your required customisations (see previous tutorials).

        -

        Things to setup: - Load your own images

        +

        Things to setup: - Load your own images and select the image which you want to test

          -
        • Make sure that the settings are corrects (Image Display Size, Luminance Calibration etc.)

        • -
        • Only the required transforms are selected

        • +
        • Make sure that the settings are correct in the ‘image settings’ tab (Image Display Size, Luminance Calibration etc.)

        • +
        • Only the required transforms are selected in the ‘experiments’ tab with the correct range and number of steps

        • +
        • Check that the Root Save Folder is correct

        -

        Once you are ready, press the ‘Run Experiment’ button, this will launch the experiment:

        +

        Once you are ready, press the ‘Run 2AFC Experiment’ button, this will launch the experiment:

        ../_images/experiment_setup.png

        Experiment Screen

        -

        The first screen will show the settings and images used for the experiment

        +

        The first screen will show the settings and images used for the experiment. Double checl the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same image but use different transforms or processing etc.

        ../_images/experiment_1.png +

        The Expected Number of Comparison shows how many clicks the user should expect to do.

        If everything is correct, click the ‘Setup’ button. This will take you to the experiment information screen for the participant to read.

        Experiment Info

        @@ -133,10 +117,11 @@

        Experiment Info

        Experiment Running

        The experiment uses the quick sort algorithm with the user giving the pairwise most similar image until the images are sorted.

        +

        The user needs to click on the image which they believe is most similar to the reference image.

        ../_images/experiment_3.png

        -
        -

        Experiment Finsihed

        +
        +

        Experiment Finished

        Once the images are sorted you will be shown the sorting order and the folder when the experiments are saved.

        The save folder shown contains the experiment images and a csv file with all the experiment runs

        ../_images/experiment_4.png @@ -145,19 +130,19 @@

        Experiment Finsihed

        Visualising the experiment results

        -

        To visualise the experiment correlation plots, return to the main UI and load the experiment using the menu option: File>Load Human Scores.

        -

        From here select the experiment image-results.csv. This will load the scores and the correlation plot against IQMs will be generated.

        -

        On the plot you can click on points to view the corresponding transformation that might disagree with the correlation with a metric. N.B. make sure the UI has that transformation loaded and the metrics selected you want to compare against.

        +

        The experiment results will be automatically loaded into the ‘Correlation’ tab in IQM-Vis

        +

        On the plot you can click on points to view the corresponding transformation that might disagree with the correlation with a metric.

        +

        Use the right and left buttons below the graph to scroll through the different selected metrics.

        +

        The Spearmean’s and Pearson’s correlation will be shown in the figure title.

        ../_images/correlation_plot.png +

        N.B. make sure the UI has that transformation loaded and the metrics selected you want to compare against.

        +

        To load previously saved experiments the experiment using the menu option: File>Load Human Scores, or use the ‘Load Experiment’ button below the graph.

        -
        +

        diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.ipynb b/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb similarity index 62% rename from dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.ipynb rename to dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb index 18a3c8c..4974de7 100644 --- a/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_an_experiment.ipynb +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_4-running_a_2AFC_experiment copy.ipynb @@ -5,18 +5,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Tutorial 4: Running an Experiment\n", + "# Tutorial 4: Running a 2AFC Experiment\n", "\n", - "In this tutorial we will go through how to setup and run an experiment.\n", + "In this tutorial we will go through how to setup and run a 2 Alternate Forced Choice experiment.\n", "\n", "First you need to Launch the UI with your required customisations (see previous tutorials).\n", "\n", "Things to setup:\n", - "- Load your own images\n", + "- Load your own images and select the image which you want to test\n", "\n", - "- Make sure that the settings are corrects (Image Display Size, Luminance Calibration etc.)\n", + "- Make sure that the settings are correct in the 'image settings' tab (Image Display Size, Luminance Calibration etc.)\n", "\n", - "- Only the required transforms are selected\n", + "- Only the required transforms are selected in the 'experiments' tab with the correct range and number of steps\n", + "\n", + "- Check that the Root Save Folder is correct\n", "\n", "Once you are ready, press the 'Run 2AFC Experiment' button, this will launch the experiment:\n", "\n", @@ -30,10 +32,12 @@ "source": [ "## Experiment Screen\n", "\n", - "The first screen will show the settings and images used for the experiment\n", + "The first screen will show the settings and images used for the experiment. Double checl the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same image but use different transforms or processing etc.\n", "\n", "![](./resources/experiment_1.png)\n", "\n", + "The Expected Number of Comparison shows how many clicks the user should expect to do.\n", + "\n", "If everything is correct, click the 'Setup' button. This will take you to the experiment information screen for the participant to read." ] }, @@ -58,6 +62,8 @@ "\n", "The experiment uses the quick sort algorithm with the user giving the pairwise most similar image until the images are sorted.\n", "\n", + "The user needs to click on the image which they believe is most similar to the reference image.\n", + "\n", "![](./resources/experiment_3.png)" ] }, @@ -66,7 +72,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Experiment Finsihed\n", + "### Experiment Finished\n", "\n", "Once the images are sorted you will be shown the sorting order and the folder when the experiments are saved. \n", "\n", @@ -82,15 +88,25 @@ "source": [ "# Visualising the experiment results\n", "\n", - "To visualise the experiment correlation plots, return to the main UI and load the experiment using the menu option: File>Load Human Scores. \n", - "\n", - "From here select the experiment image-results.csv. This will load the scores and the correlation plot against IQMs will be generated. \n", + "The experiment results will be automatically loaded into the 'Correlation' tab in IQM-Vis\n", "\n", "On the plot you can click on points to view the corresponding transformation that might disagree with the correlation with a metric.\n", + "\n", + "Use the right and left buttons below the graph to scroll through the different selected metrics.\n", + "\n", + "The Spearmean's and Pearson's correlation will be shown in the figure title.\n", + "\n", + "![](./resources/correlation_plot.png)\n", + "\n", "N.B. make sure the UI has that transformation loaded and the metrics selected you want to compare against.\n", "\n", - "![](./resources/correlation_plot.png)" + "To load previously saved experiments the experiment using the menu option: File>Load Human Scores, or use the 'Load Experiment' button below the graph." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.html b/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.html new file mode 100644 index 0000000..52abc52 --- /dev/null +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.html @@ -0,0 +1,170 @@ + + + + + + + Tutorial 4: Running a JND Experiment — IQM-Vis 0.2 documentation + + + + + + + + + + + + + + + + + + +
        + + +
        + +
        +
        +
        + +
        +
        +
        +
        + +

        View the whole notebook: https://github.com/mattclifford1/IQM-Vis/tree/main/dev_resources/docs/notebooks/Tutorial_5-running_a_JND_experiment.ipynb

        +
        +
        +

        Tutorial 4: Running a JND Experiment

        +

        In this tutorial we will go through how to setup and run a Just Noticable Difference experiment.

        +

        First you need to Launch the UI with your required customisations (see previous tutorials).

        +

        Things to setup: - Load your own dataset of images

        +
          +
        • Select the range of images in the dataset to be used within ‘Dataset Range (JND)’

        • +
        • Make sure that the settings are correct in the ‘image settings’ tab (Image Display Size, Luminance Calibration etc.)

        • +
        • Only ONE transform is selected in the ‘experiments’ tab with the correct range and number of steps

        • +
        • Check that the Root Save Folder is correct

        • +
        • Name the dataset for use with save folder naming by ‘Dataset Name (JND)’

        • +
        +

        Once you are ready, press the ‘Run JND Experiment’ button, this will launch the experiment:

        +../_images/experiment_setup_JND.png +
        +

        Experiment Screen

        +

        The first screen will show the settings and images used for the experiment. Double check the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same dataset name but use different transforms or processing etc.

        +

        The first 25 images will be shown to get an idea if everything is correct.

        +../_images/experiment_1_JDN.png +

        The Number of Comparison shows how many clicks the user will to do.

        +

        If everything is correct, click the ‘Setup’ button. This will take you to the experiment information screen for the participant to read.

        +
        +

        Experiment Info

        +

        This will show the information for the participant. When they are ready, click the ‘Start’ button.

        +../_images/experiment_2_JND.png +
        +
        +

        Experiment Running

        +

        The user needs to click the ‘same’ or ‘different’ button based on whether they think that the comparison images is the same or not as the reference image.

        +../_images/experiment_3_JND.png +

        Note: users can also press the ‘S’ and ‘D’ keys on the keyboard to make their decisions.

        +
        +
        +

        Experiment Finished

        +

        The save folder shown contains the experiment images and a csv file with all the experiment runs

        +../_images/experiment_4_JND.png +
        +
        +
        +
        +

        Visualising the experiment results

        +

        The experiment results will be automatically loaded into the ‘JND’ tab in IQM-Vis

        +

        This shows the user(s) decisions over the transform’s parameter range.

        +

        For example here, only 0.02 hue and above can be detected by humans.

        +../_images/correlation_plot_JND.png +

        If you repeat the experiment with a new participant just click ‘Run JND Experiment’ again and the results will be merged into the existing database.

        +
        + + +
        +
        + +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.ipynb b/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.ipynb new file mode 100644 index 0000000..653a4d7 --- /dev/null +++ b/dev_resources/docs/_build/html/notebooks/Tutorial_5-running_a_JND_experiment.ipynb @@ -0,0 +1,133 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial 4: Running a JND Experiment\n", + "\n", + "In this tutorial we will go through how to setup and run a Just Noticable Difference experiment.\n", + "\n", + "First you need to Launch the UI with your required customisations (see previous tutorials).\n", + "\n", + "Things to setup:\n", + "- Load your own dataset of images\n", + "\n", + "- Select the range of images in the dataset to be used within 'Dataset Range (JND)'\n", + "\n", + "- Make sure that the settings are correct in the 'image settings' tab (Image Display Size, Luminance Calibration etc.)\n", + "\n", + "- Only ONE transform is selected in the 'experiments' tab with the correct range and number of steps\n", + "\n", + "- Check that the Root Save Folder is correct\n", + "\n", + "- Name the dataset for use with save folder naming by 'Dataset Name (JND)'\n", + "\n", + "Once you are ready, press the 'Run JND Experiment' button, this will launch the experiment:\n", + "\n", + "![](./resources/experiment_setup_JND.png)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Experiment Screen\n", + "\n", + "The first screen will show the settings and images used for the experiment. Double check the Save folder matches what the experiment type and image name, a unique experiment number will be generated based on any saved experiments that use the same dataset name but use different transforms or processing etc.\n", + "\n", + "The first 25 images will be shown to get an idea if everything is correct.\n", + "\n", + "![](./resources/experiment_1_JDN.png)\n", + "\n", + "The Number of Comparison shows how many clicks the user will to do.\n", + "\n", + "If everything is correct, click the 'Setup' button. This will take you to the experiment information screen for the participant to read." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Info\n", + "\n", + "This will show the information for the participant. When they are ready, click the 'Start' button.\n", + "\n", + "![](./resources/experiment_2_JND.png)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Running\n", + "\n", + "The user needs to click the 'same' or 'different' button based on whether they think that the comparison images is the same or not as the reference image. \n", + "\n", + "![](./resources/experiment_3_JND.png)\n", + "\n", + "Note: users can also press the 'S' and 'D' keys on the keyboard to make their decisions." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment Finished\n", + "\n", + "The save folder shown contains the experiment images and a csv file with all the experiment runs\n", + "\n", + "![](./resources/experiment_4_JND.png)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualising the experiment results\n", + "\n", + "The experiment results will be automatically loaded into the 'JND' tab in IQM-Vis\n", + "\n", + "This shows the user(s) decisions over the transform's parameter range.\n", + "\n", + "For example here, only 0.02 hue and above can be detected by humans.\n", + "\n", + "![](./resources/correlation_plot_JND.png)\n", + "\n", + "If you repeat the experiment with a new participant just click 'Run JND Experiment' again and the results will be merged into the existing database." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/dev_resources/docs/_build/html/objects.inv b/dev_resources/docs/_build/html/objects.inv index bee3f46..b7d476b 100644 Binary files a/dev_resources/docs/_build/html/objects.inv and b/dev_resources/docs/_build/html/objects.inv differ diff --git a/dev_resources/docs/_build/html/py-modindex.html b/dev_resources/docs/_build/html/py-modindex.html index 6ae6a73..2e39ad5 100644 --- a/dev_resources/docs/_build/html/py-modindex.html +++ b/dev_resources/docs/_build/html/py-modindex.html @@ -140,11 +140,6 @@

        Python Module Index

        IQM_Vis.examples.dists
        - IQM_Vis.examples.experiment -
        @@ -158,17 +153,7 @@

    Python Module Index

        - IQM_Vis.examples.multiple -
        - IQM_Vis.examples.new_api -
        - IQM_Vis.examples.simple + IQM_Vis.examples.KODAK_dataset
        IQM_Vis.metrics.NLPD_torch.layers
        - IQM_Vis.metrics.NLPD_torch.layers.divisive_normalisation -
        @@ -210,21 +190,6 @@

    Python Module Index

        IQM_Vis.metrics.NLPD_torch.utils.conv
        - IQM_Vis.metrics.NLPD_torch.utils.fourier -
        - IQM_Vis.metrics.NLPD_torch.utils.interp1d -
        - IQM_Vis.metrics.NLPD_torch.utils.pyramid_filters -
        @@ -283,7 +248,12 @@

    Python Module Index

        - IQM_Vis.UI.experiment_mode + IQM_Vis.UI.experiment_mode_2AFC +
        + IQM_Vis.UI.experiment_mode_JND