COPEX-high-rate-compression-quality-metrics


NameCOPEX-high-rate-compression-quality-metrics JSON
Version 0.5.4 PyPI version JSON
download
home_pagehttps://github.com/VisioTerra/COPEX_high_rate_compression_quality_metrics
SummaryCOPEX high rate compression quality metrics
upload_time2024-11-06 12:48:29
maintainerNone
docs_urlNone
authorVisioTerra
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # COPEX High Rate Compression Quality Metrics

This package provides quality metrics for high rate compression.

## Installation

```console
pip install COPEX_high_rate_compression_quality_metrics
```

## Library usage
### Comparison of Two Multiband TIFF Images via LRSP (L:LPIPS, R:RMSE, S:SSIM, P:PSNR)

the following shows concrete example of use of the library

### Steps:
1. Import necessary libraries
2. Initialize the model and specify the file paths
3. Define preprocessing functions
4. Load the TIFF files
5. Calculate the metrics individually
6. Json Builder


### 1 Library install / import
use "pip install COPEX-high-rate-compression-quality-metrics" to install the library


```python
# Array handler
import numpy as np
# to have a json formated output
import json
import math
# File handler
from skimage import io

# File path handler
import os

# Metrics and utils
import COPEX_high_rate_compression_quality_metrics.metrics as COPEX_metrics
import COPEX_high_rate_compression_quality_metrics.utils as COPEX_utils
```

### 2 LPIPS initialization


```python
# LPIPS initialization
loss_fn = COPEX_metrics.initialize_LPIPS()
```


### 3 File path definition


```python
# Specify file paths here
file_path1 = os.path.join('T28PGV_20160318T111102_B04_20m.tif')
file_path2 = os.path.join('T28PGV_20160318T111102_B04_20m_ter.tif')
```

### 4 File loading


```python
#load images and show shapes
image1 = io.imread(file_path1)
print(file_path1," [shape =",image1.shape,", min =",np.min(image1), ", max =",np.max(image1), ", dtype = ",image1.dtype,"]")
image2 = io.imread(file_path2)
print(file_path2," [shape =",image2.shape,", min =",np.min(image2), ", max =",np.max(image2), ", dtype = ",image2.dtype,"]")


# checking if images have the same shape
if image1.shape != image2.shape:
    raise ValueError("Les deux images doivent avoir les mêmes dimensions.")
print("images loaded with success.")
```


### File visualization (optional)


```python
COPEX_utils.display_multiband_tiffs(image1, image2)
```


    
![png](output_10_0.png)
    


### 5 metrics calculation


```python
# Calculate all metrics
lpips_values,lpips_value = COPEX_metrics.calculate_lpips_multiband(image1, image2,loss_fn)
mean_ssim = COPEX_metrics.calculate_ssim_multiband(image1, image2)
psnr_value = COPEX_metrics.calculate_psnr(image1, image2)
rmse_value = COPEX_metrics.calculate_rmse(image1, image2)
```

## Results interpretation
### see <span style="color:#68E8D7">VT-P382-SLD-003-E-01-00_COPEX_DCC_PM3_20230630.pdf</span> for more informations about metrics weeknesses

<span style="color:#407CBF">LPIPS</span> : (<span style="color:#19E629">identical images</span>) <b>0 <==========> 1</b> (<span style="color:#F55353">completely different images</span>) <b>lower is better</b> [very good LPIPS do not mean that images are not totaly different pixel wise]

<span style="color:#BF40BB">RMSE</span> : (<span style="color:#19E629">identical images</span>) <b>0 <==========> +inf</b> (<span style="color:#F55353">completely different images</span>) <b>lower is better</b> [different kind of degradations can give the same score, do not capture blurring]

<span style="color:#BF8340">SSIM</span> : (<span style="color:#F55353">completely different images</span>) <b>-1 <==========> 1</b> (<span style="color:#19E629">identical images</span>) <b>higher is better</b> [sensible to little local distorions, sensible to noise differences]

<span style="color:#40BF44">PSNR</span> : (<span style="color:#F55353">completely different images</span>) <b>0 <==========> +inf</b> (<span style="color:#19E629">identical images</span>) <b>higher is better</b> [sensible to Big local differences]


```python
data = {
    "files paths":{
        "file1":file_path1,
        "file2":file_path2
        },
    "metrics":{
        "LPIPS":lpips_value,
        "RMSE":rmse_value,
        "SSIM":mean_ssim,
        "PSNR":str(psnr_value) if math.isinf(psnr_value) else psnr_value     
    }
}
json_data = json.dumps(data, indent=4)

print(json_data)
```
```console

    {
        "files paths": {
            "file1": "T28PGV_20160318T111102_B04_20m.tif",
            "file2": "T28PGV_20160318T111102_B04_20m_ter.tif"
        },
        "metrics": {
            "LPIPS": 0.038381848484277725,
            "RMSE": 192.01308995822703,
            "SSIM": 0.9817911582274915,
            "PSNR": 26.491058156522357
        }
    }
```

## Json builder
### auto_update the bensh algo json file automaticly
#### 1 import library

```python 

import COPEX_high_rate_compression_quality_metrics.json_builder as json_builder
import COPEX_high_rate_compression_quality_metrics.metrics as metrics
```
#### 2 define pathparameters
```python

root_directory = "data"
dataset_name = "RANDOM"
test_case_number = 4
nnvvppp_algoname = "01-01-002_JPEG2000"
```
#### 3 calculate generics/thematics in any order you want

```python
#json_builder.initialize_json(root_directory=root_directory, dataset_name=dataset_name,test_case_number=test_case_number,nnvvppp_algoname=nnvvppp_algoname)
json_builder.make_generic(root_directory = root_directory,
                          dataset_name = dataset_name,
                          test_case_number = test_case_number,
                          nnvvppp_algoname = nnvvppp_algoname)

json_builder.make_thematic(root_directory,
                           dataset_name,
                           test_case_number,
                           nnvvppp_algoname,
                           thematic.compute_kmeans_score_for_multiband,
                           original_folder_path,
                           decompressed_folder_path,
                           satellite_type)
```
#### 4 look at results

```json
{
    "original_size": 525312,
    "compressed_size": 48637,
    "compression_factor": 10.8,
    "compression_time": 253,
    "decompression_time": 432,
    "compression_algorithm": "01-01-002_JPEG2000",
    "algorithm_version": "01",
    "compression_parameter": "002",
    "metrics": {
        "LPIPS": {
            "library": "scikit-image",
            "version": "0.24.0",
            "date": "2024-08-19 16:53:07",
            "results": {
                "4c_256_256_random_band_1.tif": 0.15013514459133148,
                "4c_256_256_random_band_2.tif": 0.1589806228876114,
                "4c_256_256_random_band_3.tif": 0.1509121209383011,
                "4c_256_256_random_band_4.tif": 0.1467234492301941
            },
            "average": 0.152,
            "stdev": 0.004
        },
        "SSIM": {
            "library": "scikit-image",
            "version": "0.24.0",
            "date": "2024-08-19 16:53:07",
            "results": {
                "4c_256_256_random_band_1.tif": 0.01048029893613139,
                "4c_256_256_random_band_2.tif": -0.0020971790915714186,
                "4c_256_256_random_band_3.tif": 0.007405245569149331,
                "4c_256_256_random_band_4.tif": 0.005087706587301147
            },
            "average": 0.005,
            "stdev": 0.005
        },
        "PSNR": {
            "library": "scikit-image",
            "version": "0.24.0",
            "date": "2024-08-19 16:53:07",
            "results": {
                "4c_256_256_random_band_1.tif": 7.801028498092282,
                "4c_256_256_random_band_2.tif": 7.75118324229439,
                "4c_256_256_random_band_3.tif": 7.785848197523122,
                "4c_256_256_random_band_4.tif": 7.762412297083275
            },
            "average": 7.775,
            "stdev": 0.019
        },
        "RMSE": {
            "library": "scikit-image",
            "version": "0.24.0",
            "date": "2024-08-19 16:53:07",
            "results": {
                "4c_256_256_random_band_1.tif": 26694.50541651717,
                "4c_256_256_random_band_2.tif": 26847.72648228625,
                "4c_256_256_random_band_3.tif": 26740.79206290665,
                "4c_256_256_random_band_4.tif": 26813.04036306841
            },
            "average": 26774.016,
            "stdev": 59.962
        }
    },
    "kmeans++S2-10-10-42": {
        "library": "scikit-learn",
        "version": "1.5.1",
        "date": "2024-09-11 17:18:17",
        "original bands": [
            "02",
            "03",
            "04",
            "05",
            "06",
            "07",
            "08",
            "11",
            "12"
        ],
        "resampled bands": [
          "05",
          "06",
          "07",
          "11",
          "12"
        ],
        "resampled_bands_factor": 2,
        "metrics": {
            "overall_accuracy": {
                "results": {
                    "S2A_MSIL1C_20200111T105421_N0208_R051_T29NNJ_20200111T123505.kmeans++-10-10-42.tif": 0.6520533690996381
                },
                "average": 0.652,
                "stdev": 0.0
            },
            "kappa_coefficient": {
                "results": {
                    "S2A_MSIL1C_20200111T105421_N0208_R051_T29NNJ_20200111T123505.kmeans++-10-10-42.tif": 0.5610928393084549
                },
                "average": 0.561,
                "stdev": 0.0
            }
        }
    }
}
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/VisioTerra/COPEX_high_rate_compression_quality_metrics",
    "name": "COPEX-high-rate-compression-quality-metrics",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "VisioTerra",
    "author_email": "info@visioterra.fr",
    "download_url": "https://files.pythonhosted.org/packages/95/72/06650415245fddfacb2a1e0846c144973195abc7f6a86622dc5a45fb69a2/COPEX_high_rate_compression_quality_metrics-0.5.4.tar.gz",
    "platform": null,
    "description": "# COPEX High Rate Compression Quality Metrics\r\n\r\nThis package provides quality metrics for high rate compression.\r\n\r\n## Installation\r\n\r\n```console\r\npip install COPEX_high_rate_compression_quality_metrics\r\n```\r\n\r\n## Library usage\r\n### Comparison of Two Multiband TIFF Images via LRSP (L:LPIPS, R:RMSE, S:SSIM, P:PSNR)\r\n\r\nthe following shows concrete example of use of the library\r\n\r\n### Steps:\r\n1. Import necessary libraries\r\n2. Initialize the model and specify the file paths\r\n3. Define preprocessing functions\r\n4. Load the TIFF files\r\n5. Calculate the metrics individually\r\n6. Json Builder\r\n\r\n\r\n### 1 Library install / import\r\nuse \"pip install COPEX-high-rate-compression-quality-metrics\" to install the library\r\n\r\n\r\n```python\r\n# Array handler\r\nimport numpy as np\r\n# to have a json formated output\r\nimport json\r\nimport math\r\n# File handler\r\nfrom skimage import io\r\n\r\n# File path handler\r\nimport os\r\n\r\n# Metrics and utils\r\nimport COPEX_high_rate_compression_quality_metrics.metrics as COPEX_metrics\r\nimport COPEX_high_rate_compression_quality_metrics.utils as COPEX_utils\r\n```\r\n\r\n### 2 LPIPS initialization\r\n\r\n\r\n```python\r\n# LPIPS initialization\r\nloss_fn = COPEX_metrics.initialize_LPIPS()\r\n```\r\n\r\n\r\n### 3 File path definition\r\n\r\n\r\n```python\r\n# Specify file paths here\r\nfile_path1 = os.path.join('T28PGV_20160318T111102_B04_20m.tif')\r\nfile_path2 = os.path.join('T28PGV_20160318T111102_B04_20m_ter.tif')\r\n```\r\n\r\n### 4 File loading\r\n\r\n\r\n```python\r\n#load images and show shapes\r\nimage1 = io.imread(file_path1)\r\nprint(file_path1,\" [shape =\",image1.shape,\", min =\",np.min(image1), \", max =\",np.max(image1), \", dtype = \",image1.dtype,\"]\")\r\nimage2 = io.imread(file_path2)\r\nprint(file_path2,\" [shape =\",image2.shape,\", min =\",np.min(image2), \", max =\",np.max(image2), \", dtype = \",image2.dtype,\"]\")\r\n\r\n\r\n# checking if images have the same shape\r\nif image1.shape != image2.shape:\r\n    raise ValueError(\"Les deux images doivent avoir les m\u00c3\u00aames dimensions.\")\r\nprint(\"images loaded with success.\")\r\n```\r\n\r\n\r\n### File visualization (optional)\r\n\r\n\r\n```python\r\nCOPEX_utils.display_multiband_tiffs(image1, image2)\r\n```\r\n\r\n\r\n    \r\n![png](output_10_0.png)\r\n    \r\n\r\n\r\n### 5 metrics calculation\r\n\r\n\r\n```python\r\n# Calculate all metrics\r\nlpips_values,lpips_value = COPEX_metrics.calculate_lpips_multiband(image1, image2,loss_fn)\r\nmean_ssim = COPEX_metrics.calculate_ssim_multiband(image1, image2)\r\npsnr_value = COPEX_metrics.calculate_psnr(image1, image2)\r\nrmse_value = COPEX_metrics.calculate_rmse(image1, image2)\r\n```\r\n\r\n## Results interpretation\r\n### see <span style=\"color:#68E8D7\">VT-P382-SLD-003-E-01-00_COPEX_DCC_PM3_20230630.pdf</span> for more informations about metrics weeknesses\r\n\r\n<span style=\"color:#407CBF\">LPIPS</span> : (<span style=\"color:#19E629\">identical images</span>) <b>0 <==========> 1</b> (<span style=\"color:#F55353\">completely different images</span>) <b>lower is better</b> [very good LPIPS do not mean that images are not totaly different pixel wise]\r\n\r\n<span style=\"color:#BF40BB\">RMSE</span> : (<span style=\"color:#19E629\">identical images</span>) <b>0 <==========> +inf</b> (<span style=\"color:#F55353\">completely different images</span>) <b>lower is better</b> [different kind of degradations can give the same score, do not capture blurring]\r\n\r\n<span style=\"color:#BF8340\">SSIM</span> : (<span style=\"color:#F55353\">completely different images</span>) <b>-1 <==========> 1</b> (<span style=\"color:#19E629\">identical images</span>) <b>higher is better</b> [sensible to little local distorions, sensible to noise differences]\r\n\r\n<span style=\"color:#40BF44\">PSNR</span> : (<span style=\"color:#F55353\">completely different images</span>) <b>0 <==========> +inf</b> (<span style=\"color:#19E629\">identical images</span>) <b>higher is better</b> [sensible to Big local differences]\r\n\r\n\r\n```python\r\ndata = {\r\n    \"files paths\":{\r\n        \"file1\":file_path1,\r\n        \"file2\":file_path2\r\n        },\r\n    \"metrics\":{\r\n        \"LPIPS\":lpips_value,\r\n        \"RMSE\":rmse_value,\r\n        \"SSIM\":mean_ssim,\r\n        \"PSNR\":str(psnr_value) if math.isinf(psnr_value) else psnr_value     \r\n    }\r\n}\r\njson_data = json.dumps(data, indent=4)\r\n\r\nprint(json_data)\r\n```\r\n```console\r\n\r\n    {\r\n        \"files paths\": {\r\n            \"file1\": \"T28PGV_20160318T111102_B04_20m.tif\",\r\n            \"file2\": \"T28PGV_20160318T111102_B04_20m_ter.tif\"\r\n        },\r\n        \"metrics\": {\r\n            \"LPIPS\": 0.038381848484277725,\r\n            \"RMSE\": 192.01308995822703,\r\n            \"SSIM\": 0.9817911582274915,\r\n            \"PSNR\": 26.491058156522357\r\n        }\r\n    }\r\n```\r\n\r\n## Json builder\r\n### auto_update the bensh algo json file automaticly\r\n#### 1 import library\r\n\r\n```python \r\n\r\nimport COPEX_high_rate_compression_quality_metrics.json_builder as json_builder\r\nimport COPEX_high_rate_compression_quality_metrics.metrics as metrics\r\n```\r\n#### 2 define pathparameters\r\n```python\r\n\r\nroot_directory = \"data\"\r\ndataset_name = \"RANDOM\"\r\ntest_case_number = 4\r\nnnvvppp_algoname = \"01-01-002_JPEG2000\"\r\n```\r\n#### 3 calculate generics/thematics in any order you want\r\n\r\n```python\r\n#json_builder.initialize_json(root_directory=root_directory, dataset_name=dataset_name,test_case_number=test_case_number,nnvvppp_algoname=nnvvppp_algoname)\r\njson_builder.make_generic(root_directory = root_directory,\r\n                          dataset_name = dataset_name,\r\n                          test_case_number = test_case_number,\r\n                          nnvvppp_algoname = nnvvppp_algoname)\r\n\r\njson_builder.make_thematic(root_directory,\r\n                           dataset_name,\r\n                           test_case_number,\r\n                           nnvvppp_algoname,\r\n                           thematic.compute_kmeans_score_for_multiband,\r\n                           original_folder_path,\r\n                           decompressed_folder_path,\r\n                           satellite_type)\r\n```\r\n#### 4 look at results\r\n\r\n```json\r\n{\r\n    \"original_size\": 525312,\r\n    \"compressed_size\": 48637,\r\n    \"compression_factor\": 10.8,\r\n    \"compression_time\": 253,\r\n    \"decompression_time\": 432,\r\n    \"compression_algorithm\": \"01-01-002_JPEG2000\",\r\n    \"algorithm_version\": \"01\",\r\n    \"compression_parameter\": \"002\",\r\n    \"metrics\": {\r\n        \"LPIPS\": {\r\n            \"library\": \"scikit-image\",\r\n            \"version\": \"0.24.0\",\r\n            \"date\": \"2024-08-19 16:53:07\",\r\n            \"results\": {\r\n                \"4c_256_256_random_band_1.tif\": 0.15013514459133148,\r\n                \"4c_256_256_random_band_2.tif\": 0.1589806228876114,\r\n                \"4c_256_256_random_band_3.tif\": 0.1509121209383011,\r\n                \"4c_256_256_random_band_4.tif\": 0.1467234492301941\r\n            },\r\n            \"average\": 0.152,\r\n            \"stdev\": 0.004\r\n        },\r\n        \"SSIM\": {\r\n            \"library\": \"scikit-image\",\r\n            \"version\": \"0.24.0\",\r\n            \"date\": \"2024-08-19 16:53:07\",\r\n            \"results\": {\r\n                \"4c_256_256_random_band_1.tif\": 0.01048029893613139,\r\n                \"4c_256_256_random_band_2.tif\": -0.0020971790915714186,\r\n                \"4c_256_256_random_band_3.tif\": 0.007405245569149331,\r\n                \"4c_256_256_random_band_4.tif\": 0.005087706587301147\r\n            },\r\n            \"average\": 0.005,\r\n            \"stdev\": 0.005\r\n        },\r\n        \"PSNR\": {\r\n            \"library\": \"scikit-image\",\r\n            \"version\": \"0.24.0\",\r\n            \"date\": \"2024-08-19 16:53:07\",\r\n            \"results\": {\r\n                \"4c_256_256_random_band_1.tif\": 7.801028498092282,\r\n                \"4c_256_256_random_band_2.tif\": 7.75118324229439,\r\n                \"4c_256_256_random_band_3.tif\": 7.785848197523122,\r\n                \"4c_256_256_random_band_4.tif\": 7.762412297083275\r\n            },\r\n            \"average\": 7.775,\r\n            \"stdev\": 0.019\r\n        },\r\n        \"RMSE\": {\r\n            \"library\": \"scikit-image\",\r\n            \"version\": \"0.24.0\",\r\n            \"date\": \"2024-08-19 16:53:07\",\r\n            \"results\": {\r\n                \"4c_256_256_random_band_1.tif\": 26694.50541651717,\r\n                \"4c_256_256_random_band_2.tif\": 26847.72648228625,\r\n                \"4c_256_256_random_band_3.tif\": 26740.79206290665,\r\n                \"4c_256_256_random_band_4.tif\": 26813.04036306841\r\n            },\r\n            \"average\": 26774.016,\r\n            \"stdev\": 59.962\r\n        }\r\n    },\r\n    \"kmeans++S2-10-10-42\": {\r\n        \"library\": \"scikit-learn\",\r\n        \"version\": \"1.5.1\",\r\n        \"date\": \"2024-09-11 17:18:17\",\r\n        \"original bands\": [\r\n            \"02\",\r\n            \"03\",\r\n            \"04\",\r\n            \"05\",\r\n            \"06\",\r\n            \"07\",\r\n            \"08\",\r\n            \"11\",\r\n            \"12\"\r\n        ],\r\n        \"resampled bands\": [\r\n          \"05\",\r\n          \"06\",\r\n          \"07\",\r\n          \"11\",\r\n          \"12\"\r\n        ],\r\n        \"resampled_bands_factor\": 2,\r\n        \"metrics\": {\r\n            \"overall_accuracy\": {\r\n                \"results\": {\r\n                    \"S2A_MSIL1C_20200111T105421_N0208_R051_T29NNJ_20200111T123505.kmeans++-10-10-42.tif\": 0.6520533690996381\r\n                },\r\n                \"average\": 0.652,\r\n                \"stdev\": 0.0\r\n            },\r\n            \"kappa_coefficient\": {\r\n                \"results\": {\r\n                    \"S2A_MSIL1C_20200111T105421_N0208_R051_T29NNJ_20200111T123505.kmeans++-10-10-42.tif\": 0.5610928393084549\r\n                },\r\n                \"average\": 0.561,\r\n                \"stdev\": 0.0\r\n            }\r\n        }\r\n    }\r\n}\r\n```\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "COPEX high rate compression quality metrics",
    "version": "0.5.4",
    "project_urls": {
        "Homepage": "https://github.com/VisioTerra/COPEX_high_rate_compression_quality_metrics"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "233c2b6159c4b9fc8f3cec659917e49eb8e379afadd05e482cc8b821035f9922",
                "md5": "43d12e556465eb2d4022f9ae9d82d45c",
                "sha256": "98085b671f7d780c6223eaf8b4a2d1888d90229c26d4c1c17347e549494ff3c1"
            },
            "downloads": -1,
            "filename": "COPEX_high_rate_compression_quality_metrics-0.5.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "43d12e556465eb2d4022f9ae9d82d45c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 56058,
            "upload_time": "2024-11-06T12:48:12",
            "upload_time_iso_8601": "2024-11-06T12:48:12.148099Z",
            "url": "https://files.pythonhosted.org/packages/23/3c/2b6159c4b9fc8f3cec659917e49eb8e379afadd05e482cc8b821035f9922/COPEX_high_rate_compression_quality_metrics-0.5.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "957206650415245fddfacb2a1e0846c144973195abc7f6a86622dc5a45fb69a2",
                "md5": "a81eec62ae619ff641a19b4f02c780d5",
                "sha256": "e0f82d5e8b1ef828f984d85f1037bdc8f44ccda107c52353e289f490b4bf0258"
            },
            "downloads": -1,
            "filename": "COPEX_high_rate_compression_quality_metrics-0.5.4.tar.gz",
            "has_sig": false,
            "md5_digest": "a81eec62ae619ff641a19b4f02c780d5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 46718,
            "upload_time": "2024-11-06T12:48:29",
            "upload_time_iso_8601": "2024-11-06T12:48:29.753703Z",
            "url": "https://files.pythonhosted.org/packages/95/72/06650415245fddfacb2a1e0846c144973195abc7f6a86622dc5a45fb69a2/COPEX_high_rate_compression_quality_metrics-0.5.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-06 12:48:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "VisioTerra",
    "github_project": "COPEX_high_rate_compression_quality_metrics",
    "github_not_found": true,
    "lcname": "copex-high-rate-compression-quality-metrics"
}
        
Elapsed time: 0.37380s