From 69bdc0d15608b20c976fd87e734176e784041c64 Mon Sep 17 00:00:00 2001 From: Amir Hossein Kargaran Date: Sat, 24 Dec 2022 14:57:04 +0100 Subject: [PATCH] feat(metric): add Mirror symmetry - contour pixel --- backend/aim/metrics/m26/__init__.py | 0 .../m26/m26_mirror_symmetry_contour_pixel.py | 290 ++++ .../evaluations/ALEXA_500/m26_0_histogram.png | Bin 0 -> 14512 bytes .../tests/input_values/duckduckgo.com.png | Bin 0 -> 95649 bytes backend/tests/metrics/test_m26.py | 94 ++ frontend/src/assets/results/m26_results.json | 1283 +++++++++++++++++ metrics.json | 53 +- 7 files changed, 1719 insertions(+), 1 deletion(-) create mode 100644 backend/aim/metrics/m26/__init__.py create mode 100644 backend/aim/metrics/m26/m26_mirror_symmetry_contour_pixel.py create mode 100644 backend/data/evaluations/ALEXA_500/m26_0_histogram.png create mode 100644 backend/data/tests/input_values/duckduckgo.com.png create mode 100644 backend/tests/metrics/test_m26.py create mode 100644 frontend/src/assets/results/m26_results.json diff --git a/backend/aim/metrics/m26/__init__.py b/backend/aim/metrics/m26/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/aim/metrics/m26/m26_mirror_symmetry_contour_pixel.py b/backend/aim/metrics/m26/m26_mirror_symmetry_contour_pixel.py new file mode 100644 index 0000000..37d886c --- /dev/null +++ b/backend/aim/metrics/m26/m26_mirror_symmetry_contour_pixel.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Metric: + Mirror symmetry - contour pixel + + +Description: + The similarity of an object reflection across a straight axis. The measure + considered contour pixels of image. In this metric contour symmetry + was measured by looking for a match for each contour pixel across the central + vertical axis. If a contour pixel had a counterpart across the main vertical + axis, it was counted as a symmetrical pixel. The metric compute ratio of + symmetrical pixels to all edge pixels and normalized it by edge density. + + Category: Organization of Information > Symmetry. + + +Funding information and contact: + This work was funded by Technology Industries of Finland in a three-year + project grant on self-optimizing web services. The principal investigator + is Antti Oulasvirta (antti.oulasvirta@aalto.fi) of Aalto University. + + +References: + 1. Miniukovich, A. and De Angeli, A. (2014). Quantification of Interface + Visual Complexity. In Proceedings of the 2014 International Working + Conference on Advanced Visual Interfaces (AVI '14), pp. 153-160. ACM. + doi: https://doi.org/10.1145/2598153.2598173 + + 2. Miniukovich, A. and De Angeli, A. (2014). Visual Impressions of Mobile + App Interfaces. In Proceedings of the 8th Nordic Conference on + Human-Computer Interaction (NordiCHI '14), pp. 31-40. ACM. + doi: https://doi.org/10.1145/2639189.2641219 + + +Change log: + v2.0 (2022-12-24) + * Revised implementation + + v1.0 (2017-05-29) + * Initial implementation +""" + + +# ---------------------------------------------------------------------------- +# Imports +# ---------------------------------------------------------------------------- + +# Standard library modules +import base64 +from io import BytesIO +from typing import Any, Dict, List, Optional, Tuple, Union + +# Third-party modules +import cv2 +import numpy as np +from PIL import Image +from pydantic import HttpUrl + +# First-party modules +from aim.common.constants import GUI_TYPE_DESKTOP, GUI_TYPE_MOBILE +from aim.metrics.interfaces import AIMMetricInterface + +# ---------------------------------------------------------------------------- +# Metadata +# ---------------------------------------------------------------------------- + +__author__ = "Amir Hossein Kargaran, Markku Laine, Thomas Langerak" +__date__ = "2022-12-24" +__email__ = "markku.laine@aalto.fi" +__version__ = "2.0" + + +# ---------------------------------------------------------------------------- +# Metric +# ---------------------------------------------------------------------------- + + +class Metric(AIMMetricInterface): + """ + Metric: Mirror Symmetry (Contour Pixel). + """ + + # Private constants + _CANNY_EDGE_DETECTION_MATLAB_LOW_THRESHOLD_DESKTOP: float = 0.11 + _CANNY_EDGE_DETECTION_MATLAB_HIGH_THRESHOLD_DESKTOP: float = 0.27 + _CANNY_EDGE_DETECTION_PYTHON_LOW_THRESHOLD_MOBILE: int = 50 + _CANNY_EDGE_DETECTION_PYTHON_HIGH_THRESHOLD_MOBILE: int = 50 + _CANNY_EDGE_DETECTION_PYTHON_MIN_THRESHOLD: int = 0 + _CANNY_EDGE_DETECTION_PYTHON_MAX_THRESHOLD: int = 255 + _GAUSSIAN_KERNEL_SIZE: Tuple[int, int] = (0, 0) + _GAUSSIAN_KERNEL_STANDARD_DEVIATION: int = 2 + _KEY_RADIUS: int = 3 + _SYMMETRY_RADIUS: int = 4 + + @staticmethod + def _get_pixels_in_radius( + x: int, y: int, width: int, height: int, radius: int + ) -> List[List[int]]: + # Get x border + if x < radius: + rad_x_left: int = -x + rad_x_right: int = radius + elif width - x < radius: + rad_x_right = 1 * (width - x) + rad_x_left = -radius + else: + rad_x_left = -radius + rad_x_right = radius + + # Get y borders + if y < radius: + rad_y_top: int = -y + rad_y_bottom: int = radius + elif height - y < radius: + rad_y_bottom = 1 * (height - y) + rad_y_top = -radius + else: + rad_y_top = -radius + rad_y_bottom = radius + + pixels: List[List[int]] = [] + for m in range(rad_x_left, rad_x_right): + for n in range(rad_y_top, rad_y_bottom): + if m != 0 or n != 0: + pixel: List[int] = [x + m, y + n] + pixels.append(pixel) + + return pixels + + # Public methods + @classmethod + def execute_metric( + cls, + gui_image: str, + gui_type: int = GUI_TYPE_DESKTOP, + gui_segments: Optional[Dict[str, Any]] = None, + gui_url: Optional[HttpUrl] = None, + ) -> Optional[List[Union[int, float, str]]]: + """ + Execute the metric. + + Args: + gui_image: GUI image (PNG) encoded in Base64 + + Kwargs: + gui_type: GUI type, desktop = 0 (default), mobile = 1 + gui_segments: GUI segments (defaults to None) + gui_url: GUI URL (defaults to None) + + Returns: + Results (list of measures) + - Normalized pixel symmetry (float, [0, +inf]) + """ + # Create PIL image + img: Image.Image = Image.open(BytesIO(base64.b64decode(gui_image))) + + # Convert image from ??? (should be RGBA) to L (grayscale) color space + img_l: Image.Image = img.convert("L") + + # Get NumPy array + img_l_nparray: np.ndarray = np.array(img_l) + + # Gaussian filter parameters + ksize: Tuple[int, int] = cls._GAUSSIAN_KERNEL_SIZE + sigma: int = cls._GAUSSIAN_KERNEL_STANDARD_DEVIATION + # Note 1: ksize.width and ksize.height can differ but they both must + # be positive and odd. Or, they can be zero's and then they are + # computed from sigma. For details, see + # https://docs.opencv.org/4.4.0/d4/d86/group__imgproc__filter.html#gaabe8c836e97159a9193fb0b11ac52cf1 + # Note 2: According to the following link + # (https://dsp.stackexchange.com/questions/4716/differences-between-opencv-canny-and-matlab-canny), + # OpenCV's GaussianBlur() function + # (https://docs.opencv.org/4.4.0/d4/d86/group__imgproc__filter.html#gaabe8c836e97159a9193fb0b11ac52cf1) + # with sigma=2 mimics the default sigma (sqrt(2)) in MATLAB Canny. + + # Smooth image + img_blurred_nparray: np.ndarray = cv2.GaussianBlur( + src=img_l_nparray, ksize=ksize, sigmaX=sigma, sigmaY=sigma + ) + + # Canny edge detection parameters + low_threshold: float = ( + cls._CANNY_EDGE_DETECTION_PYTHON_LOW_THRESHOLD_MOBILE + if gui_type == GUI_TYPE_MOBILE + else round( + cls._CANNY_EDGE_DETECTION_PYTHON_MAX_THRESHOLD + * cls._CANNY_EDGE_DETECTION_MATLAB_LOW_THRESHOLD_DESKTOP, + 2, + ) + ) # 50 or 28.05 [0, 255] for mobile and desktop GUIs, respectively + high_threshold: float = ( + cls._CANNY_EDGE_DETECTION_PYTHON_HIGH_THRESHOLD_MOBILE + if gui_type == GUI_TYPE_MOBILE + else round( + cls._CANNY_EDGE_DETECTION_PYTHON_MAX_THRESHOLD + * cls._CANNY_EDGE_DETECTION_MATLAB_HIGH_THRESHOLD_DESKTOP, + 2, + ) + ) # 50 or 68.85 [0, 255] for mobile and desktop GUIs, respectively + # Note 1: According to [3], low and high thresholds for desktop GUIs + # were set to 0.11 and 0.27 (MATLAB), respectively. However, MATLAB's + # edge() function (https://www.mathworks.com/help/images/ref/edge.html) + # with the 'Canny' method expects thresholds to be in the range of + # [0, 1], whereas OpenCV's Canny() function + # (https://docs.opencv.org/4.4.0/dd/d1a/group__imgproc__feature.html#ga04723e007ed888ddf11d9ba04e2232de) + # does not specify the scale. According to the following link + # (https://www.pyimagesearch.com/2015/04/06/zero-parameter-automatic-canny-edge-detection-with-python-and-opencv/), + # OpenCV's Canny() function expects thresholds to be in the range of + # [0, 255], though. + # Note 2: According to a personal discussion with Miniukovich, both + # low and high thresholds for mobile GUIs were set to 50 on the 0-255 + # scale. This information is not present in [2]. + + # Detect edges + img_contours_nparray: np.ndarray = cv2.Canny( + image=img_blurred_nparray, + threshold1=low_threshold, + threshold2=high_threshold, + ) + + # Calculate image shape and number of all pixels + img_shape: Tuple[int, ...] = img_contours_nparray.shape + height: int = img_shape[0] + width: int = img_shape[1] + n_all_pixels: int = height * width # height * width + + # Set all pixels in radius of an edge pixel to 0 + n_all_keys: int = 0 + for y in range(height): + for x in range(width): + if img_contours_nparray[y][x] != 0: + n_all_keys += 1 + pixels_in_radius: List[ + List[int] + ] = cls._get_pixels_in_radius( + x, y, width, height, cls._KEY_RADIUS + ) + for pixel in pixels_in_radius: + img_contours_nparray[pixel[1], pixel[0]] = 0 + + # Check vertical symmetry + n_all_sym: int = 0 + for y in range(height): + for x in range(int(width / 2)): + if img_contours_nparray[y][x] != 0: + vertical_pixels: List[ + List[int] + ] = cls._get_pixels_in_radius( + width - x, y, width, height, cls._SYMMETRY_RADIUS + ) + horizontal_pixels: List[ + List[int] + ] = cls._get_pixels_in_radius( + x, height - y, width, height, cls._SYMMETRY_RADIUS + ) + + for pixel in vertical_pixels: + if ( + img_contours_nparray[int(pixel[1]), int(pixel[0])] + != 0 + ): + n_all_sym += 1 + break + + for pixel in horizontal_pixels: + if ( + img_contours_nparray[int(pixel[1]), int(pixel[0])] + != 0 + ): + n_all_sym += 1 + break + + # Compute normalized pixel symmetry + try: + sym_normalized: float = (float(n_all_sym) / float(n_all_keys)) * ( + ( + float((n_all_keys - 1) * cls._SYMMETRY_RADIUS) + / float(n_all_pixels) + ) + ** -1 + ) + except ZeroDivisionError: + sym_normalized = 0.0 + + return [ + sym_normalized, + ] diff --git a/backend/data/evaluations/ALEXA_500/m26_0_histogram.png b/backend/data/evaluations/ALEXA_500/m26_0_histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..33ce92b7d99ebb4533aee431cb359b2d55d03239 GIT binary patch literal 14512 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 Jvre45@-J%{ literal 0 HcmV?d00001 diff --git a/backend/data/tests/input_values/duckduckgo.com.png b/backend/data/tests/input_values/duckduckgo.com.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf6cf19a5c29cf6144db321d6826cddfac07592 GIT binary patch literal 95649 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 I62@Qu7jrky?*IS* literal 0 HcmV?d00001 diff --git a/backend/tests/metrics/test_m26.py b/backend/tests/metrics/test_m26.py new file mode 100644 index 0000000..e20513c --- /dev/null +++ b/backend/tests/metrics/test_m26.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Tests for the 'Mirror symmetry - contour pixel' metric (m26). +""" + + +# ---------------------------------------------------------------------------- +# Imports +# ---------------------------------------------------------------------------- + +# Standard library modules +import pathlib +from typing import Any, List, Optional, Union + +# Third-party modules +import pytest + +# First-party modules +from aim.common import image_utils +from aim.metrics.m26.m26_mirror_symmetry_contour_pixel import Metric +from tests.common.constants import DATA_TESTS_INPUT_VALUES_DIR + +# ---------------------------------------------------------------------------- +# Metadata +# ---------------------------------------------------------------------------- + +__author__ = "Amir Hossein Kargaran, Markku Laine" +__date__ = "2021-12-24" +__email__ = "markku.laine@aalto.fi" +__version__ = "1.0" + + +# ---------------------------------------------------------------------------- +# Tests +# ---------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + ["input_value", "expected_results"], + [ + ("wikipedia.org_website.png", [1.72452]), + ("duckduckgo.com.png", [4.07753]), + ("aalto.fi_website.png", [0.45583]), + ("transparent.png", [0.0]), # transparent -> white pixels + ("white.png", [0.0]), + ("black.png", [0.0]), + ("gray.png", [0.0]), + ("red.png", [0.0]), + ("green.png", [0.0]), + ("blue.png", [0.0]), + ( + "white_50_transparent_50.png", + [0.0], + ), # transparent -> white pixels + ( + "black_50_transparent_50.png", + [3.60452], + ), # transparent -> white pixels + ("white_50_black_50.png", [3.60452]), + ("red_50_green_50.png", [3.60452]), + ("green_50_blue_50.png", [3.60452]), + ("blue_50_red_50.png", [3.60452]), + ("4_high-contrast_shades_of_gray.png", [0.79900]), + ("4_low-contrast_shades_of_gray.png", [0.0]), + ], +) +def test_mirror_symmetry_contour_pixel_desktop( + input_value: str, expected_results: List[Any] +) -> None: + """ + Test mirror symmetry - contour pixel (desktop GUIs). + + Args: + input_value: GUI image file name + expected_results: Expected results (list of measures) + """ + # Build GUI image file path + gui_image_filepath: pathlib.Path = ( + pathlib.Path(DATA_TESTS_INPUT_VALUES_DIR) / input_value + ) + + # Read GUI image (PNG) + gui_image_png_base64: str = image_utils.read_image(gui_image_filepath) + + # Execute metric + result: Optional[List[Union[int, float, str]]] = Metric.execute_metric( + gui_image_png_base64 + ) + + # Test result + if result is not None and isinstance(result[0], float): + assert round(result[0], 5) == expected_results[0] diff --git a/frontend/src/assets/results/m26_results.json b/frontend/src/assets/results/m26_results.json new file mode 100644 index 0000000..a6f5bf5 --- /dev/null +++ b/frontend/src/assets/results/m26_results.json @@ -0,0 +1,1283 @@ +[ + { + "m26_0":0.7544 + }, + { + "m26_0":0.9789 + }, + { + "m26_0":0.8353 + }, + { + "m26_0":0.7491 + }, + { + "m26_0":0.5236 + }, + { + "m26_0":0.5643 + }, + { + "m26_0":1.0348 + }, + { + "m26_0":0.4838 + }, + { + "m26_0":0.5462 + }, + { + "m26_0":0.331 + }, + { + "m26_0":0.7325 + }, + { + "m26_0":0.4272 + }, + { + "m26_0":1.0808 + }, + { + "m26_0":0.8214 + }, + { + "m26_0":1.5312 + }, + { + "m26_0":1.4307 + }, + { + "m26_0":0.397 + }, + { + "m26_0":0.6842 + }, + { + "m26_0":0.3903 + }, + { + "m26_0":1.0954 + }, + { + "m26_0":0.5637 + }, + { + "m26_0":1.5646 + }, + { + "m26_0":0.807 + }, + { + "m26_0":0.6801 + }, + { + "m26_0":0.7086 + }, + { + "m26_0":0.4404 + }, + { + "m26_0":0.4294 + }, + { + "m26_0":0.8096 + }, + { + "m26_0":0.6579 + }, + { + "m26_0":0.6868 + }, + { + "m26_0":0.4711 + }, + { + "m26_0":0.2891 + }, + { + "m26_0":0.8354 + }, + { + "m26_0":0.7484 + }, + { + "m26_0":1.3007 + }, + { + "m26_0":0.7217 + }, + { + "m26_0":0.6525 + }, + { + "m26_0":0.3348 + }, + { + "m26_0":1.1295 + }, + { + "m26_0":0.5484 + }, + { + "m26_0":0.8531 + }, + { + "m26_0":0.6131 + }, + { + "m26_0":2.9378 + }, + { + "m26_0":0.5264 + }, + { + "m26_0":0.5275 + }, + { + "m26_0":0.7649 + }, + { + "m26_0":0.7058 + }, + { + "m26_0":0.927 + }, + { + "m26_0":0.4679 + }, + { + "m26_0":0.7533 + }, + { + "m26_0":1.1651 + }, + { + "m26_0":0.7957 + }, + { + "m26_0":0.4774 + }, + { + "m26_0":0.6851 + }, + { + "m26_0":0.8579 + }, + { + "m26_0":0.5121 + }, + { + "m26_0":0.6403 + }, + { + "m26_0":0.7225 + }, + { + "m26_0":0.9819 + }, + { + "m26_0":1.0707 + }, + { + "m26_0":0.3858 + }, + { + "m26_0":1.0223 + }, + { + "m26_0":0.9584 + }, + { + "m26_0":0.3523 + }, + { + "m26_0":0.8553 + }, + { + "m26_0":0.6798 + }, + { + "m26_0":0.808 + }, + { + "m26_0":0.6927 + }, + { + "m26_0":0.6803 + }, + { + "m26_0":0.4153 + }, + { + "m26_0":0.7541 + }, + { + "m26_0":0.6428 + }, + { + "m26_0":0.4713 + }, + { + "m26_0":0.6395 + }, + { + "m26_0":0.1865 + }, + { + "m26_0":0.8629 + }, + { + "m26_0":0.7147 + }, + { + "m26_0":1.0209 + }, + { + "m26_0":1.1171 + }, + { + "m26_0":0.5854 + }, + { + "m26_0":0.6767 + }, + { + "m26_0":0.8738 + }, + { + "m26_0":1.3047 + }, + { + "m26_0":1.4002 + }, + { + "m26_0":0.402 + }, + { + "m26_0":0.4505 + }, + { + "m26_0":0.8786 + }, + { + "m26_0":0.7842 + }, + { + "m26_0":1.868 + }, + { + "m26_0":0.836 + }, + { + "m26_0":0.6198 + }, + { + "m26_0":0.8554 + }, + { + "m26_0":0.5255 + }, + { + "m26_0":0.8125 + }, + { + "m26_0":1.0405 + }, + { + "m26_0":0.5737 + }, + { + "m26_0":0.4921 + }, + { + "m26_0":2.094 + }, + { + "m26_0":0.4219 + }, + { + "m26_0":0.8954 + }, + { + "m26_0":0.8461 + }, + { + "m26_0":0.4996 + }, + { + "m26_0":1.2678 + }, + { + "m26_0":0.2487 + }, + { + "m26_0":0.9281 + }, + { + "m26_0":0.523 + }, + { + "m26_0":0.5232 + }, + { + "m26_0":0.7616 + }, + { + "m26_0":0.4748 + }, + { + "m26_0":4.0775 + }, + { + "m26_0":0.5517 + }, + { + "m26_0":0.6495 + }, + { + "m26_0":0.3303 + }, + { + "m26_0":0.5487 + }, + { + "m26_0":0.4679 + }, + { + "m26_0":0.4144 + }, + { + "m26_0":0.5413 + }, + { + "m26_0":0.7059 + }, + { + "m26_0":0.612 + }, + { + "m26_0":0.8456 + }, + { + "m26_0":0.8762 + }, + { + "m26_0":0.4712 + }, + { + "m26_0":0.7776 + }, + { + "m26_0":1.34 + }, + { + "m26_0":0.6399 + }, + { + "m26_0":2.197 + }, + { + "m26_0":0.6949 + }, + { + "m26_0":1.5448 + }, + { + "m26_0":1.1098 + }, + { + "m26_0":0.6078 + }, + { + "m26_0":0.5418 + }, + { + "m26_0":0.5241 + }, + { + "m26_0":0.463 + }, + { + "m26_0":0.6232 + }, + { + "m26_0":0.9358 + }, + { + "m26_0":0.96 + }, + { + "m26_0":0.6898 + }, + { + "m26_0":0.5461 + }, + { + "m26_0":0.8045 + }, + { + "m26_0":1.375 + }, + { + "m26_0":0.4032 + }, + { + "m26_0":2.036 + }, + { + "m26_0":0.4623 + }, + { + "m26_0":0.6364 + }, + { + "m26_0":1.1978 + }, + { + "m26_0":0.4653 + }, + { + "m26_0":0.6002 + }, + { + "m26_0":0.6971 + }, + { + "m26_0":0.9696 + }, + { + "m26_0":0.4851 + }, + { + "m26_0":0.6039 + }, + { + "m26_0":5.6125 + }, + { + "m26_0":1.4665 + }, + { + "m26_0":0.748 + }, + { + "m26_0":1.8962 + }, + { + "m26_0":0.754 + }, + { + "m26_0":0.4669 + }, + { + "m26_0":0.9121 + }, + { + "m26_0":3.5715 + }, + { + "m26_0":0.4647 + }, + { + "m26_0":0.9862 + }, + { + "m26_0":0.7786 + }, + { + "m26_0":0.9547 + }, + { + "m26_0":0.4155 + }, + { + "m26_0":1.1283 + }, + { + "m26_0":0.8317 + }, + { + "m26_0":0.3525 + }, + { + "m26_0":0.9487 + }, + { + "m26_0":0.7104 + }, + { + "m26_0":0.5378 + }, + { + "m26_0":0.5181 + }, + { + "m26_0":1.2016 + }, + { + "m26_0":0.2264 + }, + { + "m26_0":1.3595 + }, + { + "m26_0":0.4626 + }, + { + "m26_0":0.6542 + }, + { + "m26_0":0.4621 + }, + { + "m26_0":1.0547 + }, + { + "m26_0":3.9814 + }, + { + "m26_0":0.8266 + }, + { + "m26_0":1.33 + }, + { + "m26_0":0.7238 + }, + { + "m26_0":0.4901 + }, + { + "m26_0":0.56 + }, + { + "m26_0":0.6759 + }, + { + "m26_0":0.6808 + }, + { + "m26_0":0.6598 + }, + { + "m26_0":0.6064 + }, + { + "m26_0":0.8353 + }, + { + "m26_0":0.4724 + }, + { + "m26_0":1.0945 + }, + { + "m26_0":0.3818 + }, + { + "m26_0":0.7258 + }, + { + "m26_0":1.0306 + }, + { + "m26_0":0.8363 + }, + { + "m26_0":0.7615 + }, + { + "m26_0":0.4366 + }, + { + "m26_0":0.9684 + }, + { + "m26_0":0.5763 + }, + { + "m26_0":0.6567 + }, + { + "m26_0":0.8045 + }, + { + "m26_0":2.5041 + }, + { + "m26_0":0.6575 + }, + { + "m26_0":0.5776 + }, + { + "m26_0":0.4364 + }, + { + "m26_0":0.6654 + }, + { + "m26_0":0.3243 + }, + { + "m26_0":0.6149 + }, + { + "m26_0":0.5054 + }, + { + "m26_0":0.9486 + }, + { + "m26_0":0.4114 + }, + { + "m26_0":0.531 + }, + { + "m26_0":0.1687 + }, + { + "m26_0":1.7354 + }, + { + "m26_0":0.8021 + }, + { + "m26_0":0.9775 + }, + { + "m26_0":0.4841 + }, + { + "m26_0":0.4741 + }, + { + "m26_0":0.6279 + }, + { + "m26_0":0.3699 + }, + { + "m26_0":0.9037 + }, + { + "m26_0":0.9355 + }, + { + "m26_0":0.6805 + }, + { + "m26_0":0.7989 + }, + { + "m26_0":0.975 + }, + { + "m26_0":2.0881 + }, + { + "m26_0":0.9256 + }, + { + "m26_0":1.7451 + }, + { + "m26_0":0.5227 + }, + { + "m26_0":0.5872 + }, + { + "m26_0":0.572 + }, + { + "m26_0":0.7326 + }, + { + "m26_0":0.6015 + }, + { + "m26_0":0.3898 + }, + { + "m26_0":0.9413 + }, + { + "m26_0":0.4622 + }, + { + "m26_0":0.4196 + }, + { + "m26_0":0.9825 + }, + { + "m26_0":0.1992 + }, + { + "m26_0":0.5363 + }, + { + "m26_0":0.3792 + }, + { + "m26_0":0.6406 + }, + { + "m26_0":0.799 + }, + { + "m26_0":0.9221 + }, + { + "m26_0":0.6892 + }, + { + "m26_0":0.5888 + }, + { + "m26_0":0.729 + }, + { + "m26_0":0.5619 + }, + { + "m26_0":0.5593 + }, + { + "m26_0":0.7603 + }, + { + "m26_0":0.6752 + }, + { + "m26_0":1.3384 + }, + { + "m26_0":0.5582 + }, + { + "m26_0":0.7068 + }, + { + "m26_0":0.5693 + }, + { + "m26_0":1.2796 + }, + { + "m26_0":1.0733 + }, + { + "m26_0":0.621 + }, + { + "m26_0":0.3701 + }, + { + "m26_0":0.7227 + }, + { + "m26_0":0.9331 + }, + { + "m26_0":1.1469 + }, + { + "m26_0":1.0175 + }, + { + "m26_0":0.467 + }, + { + "m26_0":1.393 + }, + { + "m26_0":0.6757 + }, + { + "m26_0":0.2896 + }, + { + "m26_0":0.4569 + }, + { + "m26_0":0.7256 + }, + { + "m26_0":0.5366 + }, + { + "m26_0":1.0128 + }, + { + "m26_0":1.0955 + }, + { + "m26_0":0.5152 + }, + { + "m26_0":0.681 + }, + { + "m26_0":1.2097 + }, + { + "m26_0":0.6897 + }, + { + "m26_0":0.8288 + }, + { + "m26_0":0.599 + }, + { + "m26_0":0.5018 + }, + { + "m26_0":1.0745 + }, + { + "m26_0":0.3227 + }, + { + "m26_0":0.6281 + }, + { + "m26_0":0.5935 + }, + { + "m26_0":0.8311 + }, + { + "m26_0":0.3608 + }, + { + "m26_0":0.4687 + }, + { + "m26_0":0.8857 + }, + { + "m26_0":0.663 + }, + { + "m26_0":0.7509 + }, + { + "m26_0":0.7595 + }, + { + "m26_0":0.9361 + }, + { + "m26_0":0.7712 + }, + { + "m26_0":0.692 + }, + { + "m26_0":0.5951 + }, + { + "m26_0":0.3258 + }, + { + "m26_0":1.5543 + }, + { + "m26_0":0.5602 + }, + { + "m26_0":1.337 + }, + { + "m26_0":0.5851 + }, + { + "m26_0":0.517 + }, + { + "m26_0":0.5325 + }, + { + "m26_0":1.0919 + }, + { + "m26_0":2.6874 + }, + { + "m26_0":0.8117 + }, + { + "m26_0":0.2312 + }, + { + "m26_0":1.0119 + }, + { + "m26_0":0.729 + }, + { + "m26_0":0.5208 + }, + { + "m26_0":0.8182 + }, + { + "m26_0":0.3531 + }, + { + "m26_0":0.6851 + }, + { + "m26_0":0.497 + }, + { + "m26_0":0.4306 + }, + { + "m26_0":0.4318 + }, + { + "m26_0":0.6495 + }, + { + "m26_0":0.8295 + }, + { + "m26_0":0.4989 + }, + { + "m26_0":0.5201 + }, + { + "m26_0":0.4779 + }, + { + "m26_0":1.667 + }, + { + "m26_0":2.0572 + }, + { + "m26_0":0.5174 + }, + { + "m26_0":4.2681 + }, + { + "m26_0":0.7707 + }, + { + "m26_0":0.5969 + }, + { + "m26_0":12.3923 + }, + { + "m26_0":0.7209 + }, + { + "m26_0":0.7654 + }, + { + "m26_0":0.6356 + }, + { + "m26_0":0.494 + }, + { + "m26_0":0.9339 + }, + { + "m26_0":0.9353 + }, + { + "m26_0":0.4016 + }, + { + "m26_0":1.7312 + }, + { + "m26_0":1.0938 + }, + { + "m26_0":1.0131 + }, + { + "m26_0":0.4814 + }, + { + "m26_0":5.4341 + }, + { + "m26_0":0.6304 + }, + { + "m26_0":0.4986 + }, + { + "m26_0":0.2764 + }, + { + "m26_0":0.7741 + }, + { + "m26_0":0.9398 + }, + { + "m26_0":0.6017 + }, + { + "m26_0":0.4922 + }, + { + "m26_0":0.5261 + }, + { + "m26_0":1.2777 + }, + { + "m26_0":4.392 + }, + { + "m26_0":0.6442 + }, + { + "m26_0":1.0798 + }, + { + "m26_0":1.4054 + }, + { + "m26_0":1.4359 + }, + { + "m26_0":0.324 + }, + { + "m26_0":0.6162 + }, + { + "m26_0":0.4028 + }, + { + "m26_0":1.1662 + }, + { + "m26_0":1.5664 + }, + { + "m26_0":0.6 + }, + { + "m26_0":0.5425 + }, + { + "m26_0":0.3717 + }, + { + "m26_0":0.5857 + }, + { + "m26_0":0.6462 + }, + { + "m26_0":1.1673 + }, + { + "m26_0":1.1952 + }, + { + "m26_0":0.603 + }, + { + "m26_0":0.5841 + }, + { + "m26_0":0.6196 + }, + { + "m26_0":0.7875 + }, + { + "m26_0":0.8218 + }, + { + "m26_0":0.5851 + }, + { + "m26_0":2.1737 + }, + { + "m26_0":0.898 + }, + { + "m26_0":1.4945 + }, + { + "m26_0":0.5472 + }, + { + "m26_0":0.8498 + }, + { + "m26_0":0.6748 + }, + { + "m26_0":0.6593 + }, + { + "m26_0":0.6553 + }, + { + "m26_0":1.734 + }, + { + "m26_0":1.2631 + }, + { + "m26_0":0.8239 + }, + { + "m26_0":1.3816 + }, + { + "m26_0":0.7134 + }, + { + "m26_0":0.6324 + }, + { + "m26_0":0.4234 + }, + { + "m26_0":1.0015 + }, + { + "m26_0":0.5435 + }, + { + "m26_0":0.5456 + }, + { + "m26_0":0.7244 + }, + { + "m26_0":2.5057 + }, + { + "m26_0":0.6558 + }, + { + "m26_0":0.7737 + }, + { + "m26_0":0.667 + }, + { + "m26_0":0.9857 + }, + { + "m26_0":0.2373 + }, + { + "m26_0":0.5209 + }, + { + "m26_0":0.5932 + }, + { + "m26_0":1.3509 + }, + { + "m26_0":1.289 + }, + { + "m26_0":0.4254 + }, + { + "m26_0":0.8943 + }, + { + "m26_0":0.9511 + }, + { + "m26_0":1.4766 + }, + { + "m26_0":0.6018 + }, + { + "m26_0":0.7122 + }, + { + "m26_0":0.6238 + }, + { + "m26_0":0.7356 + }, + { + "m26_0":0.6524 + }, + { + "m26_0":0.6223 + }, + { + "m26_0":0.5405 + }, + { + "m26_0":1.8425 + }, + { + "m26_0":0.6833 + }, + { + "m26_0":0.4984 + }, + { + "m26_0":1.2665 + }, + { + "m26_0":0.9656 + }, + { + "m26_0":0.5721 + }, + { + "m26_0":1.0082 + }, + { + "m26_0":0.4646 + }, + { + "m26_0":0.4171 + }, + { + "m26_0":0.5838 + }, + { + "m26_0":2.7687 + }, + { + "m26_0":0.638 + }, + { + "m26_0":0.7095 + }, + { + "m26_0":1.0746 + }, + { + "m26_0":1.2306 + }, + { + "m26_0":0.9877 + }, + { + "m26_0":0.5791 + } +] \ No newline at end of file diff --git a/metrics.json b/metrics.json index 82f9ddf..2e0aec1 100644 --- a/metrics.json +++ b/metrics.json @@ -18,7 +18,7 @@ { "name": "Perceptual Fluency", "icon": "brain", - "metrics": ["m2", "m4", "m5", "m6", "m7", "m8", "m9", "m21", "m22", "m24", "m25"] + "metrics": ["m2", "m4", "m5", "m6", "m7", "m8", "m9", "m21", "m22", "m24", "m25", "m26"] } ], "metrics": { @@ -1924,6 +1924,57 @@ "description": false } ] + }, + "m26": { + "id": "m26", + "name": "Mirror symmetry - contour pixel", + "description": "The similarity of an object reflection across a straight axis. The measure considered contour pixels of image.", + "evidence": 4, + "relevance": 2, + "speed": 2, + "segmentation_required": false, + "references": [ + { + "title": "Miniukovich, A. and De Angeli, A. (2014). Quantification of Interface Visual Complexity. In Proceedings of the 2014 International Working Conference on Advanced Visual Interfaces (AVI '14), pp. 153-160. ACM. doi: https://doi.org/10.1145/2598153.2598173", + "url": "https://doi.org/10.1145/2598153.2598173" + }, + { + "title": "Miniukovich, A. and De Angeli, A. (2014). Visual Impressions of Mobile App Interfaces. In Proceedings of the 8th Nordic Conference on Human-Computer Interaction (NordiCHI '14), pp. 31-40. ACM. doi: https://doi.org/10.1145/2639189.2641219", + "url": "https://doi.org/10.1145/2639189.2641219" + } + ], + "results": [ + { + "id": "m26_0", + "index": 0, + "type": "float", + "name": "Normalized pixel symmetry", + "description": false, + "scores": [ + { + "id": "r1", + "range": [0.0, 0.5344], + "description": "Non-Symmetric", + "icon": ["fas", "exclamation-triangle"], + "judgment": "bad" + }, + { + "id": "r2", + "range": [0.5345, 0.9498], + "description": "Fair", + "icon": [null, null], + "judgment": "normal" + }, + { + "id": "r3", + "range": [0.9499, null], + "description": "Symmetric", + "icon": ["far", "check-circle"], + "judgment": "good" + } + ] + } + ] } } }