{"id":13645938,"url":"https://github.com/google/butteraugli","last_synced_at":"2025-09-28T19:31:54.844Z","repository":{"id":37549689,"uuid":"51076841","full_name":"google/butteraugli","owner":"google","description":"butteraugli estimates the psychovisual difference between two images","archived":true,"fork":false,"pushed_at":"2022-09-09T07:22:58.000Z","size":6490,"stargazers_count":1971,"open_issues_count":39,"forks_count":140,"subscribers_count":86,"default_branch":"master","last_synced_at":"2025-01-07T16:07:27.503Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-04T13:13:40.000Z","updated_at":"2024-12-23T17:07:45.000Z","dependencies_parsed_at":"2022-08-26T15:22:50.224Z","dependency_job_id":null,"html_url":"https://github.com/google/butteraugli","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fbutteraugli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fbutteraugli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fbutteraugli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fbutteraugli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/butteraugli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234555865,"owners_count":18851860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:02:45.410Z","updated_at":"2025-09-28T19:31:49.791Z","avatar_url":"https://github.com/google.png","language":"C++","readme":"# butteraugli\n\n\u003e A tool for measuring perceived differences between images\n\n## Introduction\n\nButteraugli is a project that estimates the psychovisual similarity of two\nimages. It gives a score for the images that is reliable in the domain of barely\nnoticeable differences. Butteraugli not only gives a scalar score, but also\ncomputes a spatial map of the level of differences.\n\nOne of the main motivations for this project is the statistical differences in\nlocation and density of different color receptors, particularly the low density\nof blue cones in the fovea. Another motivation comes from more accurate modeling\nof ganglion cells, particularly the frequency space inhibition.\n\n## Use\n\nButteraugli can work as a quality metric for lossy image and video compression.\nOn our small test corpus butteraugli performs better than our implementations of\nthe reference methods, psnrhsv-m, ssim, and our yuv-color-space variant of ssim.\nOne possible use is to define the quality level setting used in a jpeg\ncompressor, or to compare two or more compression methods at the same level of\npsychovisual differences.\n\nButteraugli is intended to be a research tool more than a practical tool for\nchoosing compression formats. We don't know how well butteraugli performs with\nmajor deformations -- we have mostly tuned it within a small range of quality,\nroughly corresponding to jpeg qualities 90 to 95.\n\n## Interface\n\nOnly a C++ interface is provided. The interface takes two images and outputs a\nmap together with a scalar value defining the difference. The scalar value can\nbe compared to two reference values that divide the value space into three\nexperience classes: 'great', 'acceptable' and 'not acceptable'.\n\n## Build instructions\n\nInstall [Bazel](http://bazel.build) by following the\n[instructions](https://www.bazel.build/docs/install.html). Run `bazel build -c opt\n//:butteraugli` in the directory that contains this README file to build the\n[command-line utility](#cmdline-tool). If you want to use Butteraugli as a\nlibrary, depend on the `//:butteraugli_lib` target.\n\nAlternatively, you can use the Makefile provided in the `butteraugli` directory,\nafter ensuring that [libpng](http://www.libpng.org/) and\n[libjpeg](http://ijg.org/) are installed. On some systems you might need to also\ninstall corresponding `-dev` packages.\n\nThe code is portable and also compiles on Windows after defining\n`_CRT_SECURE_NO_WARNINGS` in the project settings.\n\n## Command-line utility {#cmdline-tool}\n\nButteraugli, apart from the library, comes bundled with a comparison tool. The\ncomparison tool supports PNG and JPG images as inputs. To compare images, run:\n\n```\nbutteraugli image1.{png|jpg} image2.{png|jpg}\n```\n\nThe tool can also produce a heatmap of differences between images. The heatmap\nwill be output as a PNM image. To produce one, run:\n\n```\nbutteraugli image1.{png|jpg} image2.{png|jpg} heatmap.pnm\n```\n","funding_links":[],"categories":["C++","Projects built with Bazel"],"sub_categories":["Google projects"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fbutteraugli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fbutteraugli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fbutteraugli/lists"}