From 984b97c496e3e2d798c1091de4066f495e8afebd Mon Sep 17 00:00:00 2001 From: epoger Date: Wed, 11 Jun 2014 20:35:59 -0700 Subject: [PATCH] rebaseline_server: delete no-longer-used weightedDiffMeasure (replaced by perceptual diff) NOTRY=True R=rmistry@google.com TBR=rmistry Author: epoger@google.com Review URL: https://codereview.chromium.org/334533003 --- gm/rebaseline_server/imagediffdb.py | 37 ---------------------- gm/rebaseline_server/imagediffdb_test.py | 14 ++++---- gm/rebaseline_server/imagepair_test.py | 2 -- gm/rebaseline_server/imagepairset_test.py | 2 -- gm/rebaseline_server/static/constants.js | 1 - gm/rebaseline_server/static/view.html | 2 +- .../gm.json | 14 +++----- .../gm.json | 17 ++++------ 8 files changed, 18 insertions(+), 71 deletions(-) diff --git a/gm/rebaseline_server/imagediffdb.py b/gm/rebaseline_server/imagediffdb.py index a37e8ce..6b68414 100644 --- a/gm/rebaseline_server/imagediffdb.py +++ b/gm/rebaseline_server/imagediffdb.py @@ -49,7 +49,6 @@ KEY__DIFFERENCES__MAX_DIFF_PER_CHANNEL = 'maxDiffPerChannel' KEY__DIFFERENCES__NUM_DIFF_PIXELS = 'numDifferingPixels' KEY__DIFFERENCES__PERCENT_DIFF_PIXELS = 'percentDifferingPixels' KEY__DIFFERENCES__PERCEPTUAL_DIFF = 'perceptualDifference' -KEY__DIFFERENCES__WEIGHTED_DIFF = 'weightedDiffMeasure' class DiffRecord(object): @@ -117,8 +116,6 @@ class DiffRecord(object): diff_image = _generate_image_diff(actual_image, expected_image) diff_histogram = diff_image.histogram() (diff_width, diff_height) = diff_image.size - self._weighted_diff_measure = _calculate_weighted_diff_metric( - diff_histogram, diff_width * diff_height) self._max_diff_per_channel = _max_per_band(diff_histogram) # Generate the whitediff image (any differing pixels show as white). @@ -189,14 +186,6 @@ class DiffRecord(object): """Returns the perceptual difference percentage.""" return self._perceptual_difference - def get_weighted_diff_measure(self): - """Returns a weighted measure of image diffs, as a float between 0 and 100 - (inclusive). - - TODO(epoger): Delete this function, now that we have perceptual diff? - """ - return self._weighted_diff_measure - def get_max_diff_per_channel(self): """Returns the maximum difference between the expected and actual images for each R/G/B channel, as a list.""" @@ -209,7 +198,6 @@ class DiffRecord(object): KEY__DIFFERENCES__NUM_DIFF_PIXELS: self._num_pixels_differing, KEY__DIFFERENCES__PERCENT_DIFF_PIXELS: self.get_percent_pixels_differing(), - KEY__DIFFERENCES__WEIGHTED_DIFF: self.get_weighted_diff_measure(), KEY__DIFFERENCES__MAX_DIFF_PER_CHANNEL: self._max_diff_per_channel, KEY__DIFFERENCES__PERCEPTUAL_DIFF: self._perceptual_difference, } @@ -290,31 +278,6 @@ class ImageDiffDB(object): # Utility functions -def _calculate_weighted_diff_metric(histogram, num_pixels): - """Given the histogram of a diff image (per-channel diff at each - pixel between two images), calculate the weighted diff metric (a - stab at how different the two images really are). - - TODO(epoger): Delete this function, now that we have perceptual diff? - - Args: - histogram: PIL histogram of a per-channel diff between two images - num_pixels: integer; the total number of pixels in the diff image - - Returns: a weighted diff metric, as a float between 0 and 100 (inclusive). - """ - # TODO(epoger): As a wild guess at an appropriate metric, weight each - # different pixel by the square of its delta value. (The more different - # a pixel is from its expectation, the more we care about it.) - assert(len(histogram) % VALUES_PER_BAND == 0) - num_bands = len(histogram) / VALUES_PER_BAND - max_diff = num_pixels * num_bands * (VALUES_PER_BAND - 1)**2 - total_diff = 0 - for index in xrange(len(histogram)): - total_diff += histogram[index] * (index % VALUES_PER_BAND)**2 - return float(100 * total_diff) / max_diff - - def _max_per_band(histogram): """Given the histogram of an image, return the maximum value of each band (a.k.a. "color channel", such as R/G/B) across the entire image. diff --git a/gm/rebaseline_server/imagediffdb_test.py b/gm/rebaseline_server/imagediffdb_test.py index b1d534a..4fc8c66 100755 --- a/gm/rebaseline_server/imagediffdb_test.py +++ b/gm/rebaseline_server/imagediffdb_test.py @@ -56,23 +56,22 @@ class ImageDiffDbTest(unittest.TestCase): # 2. actual image locator # 3. actual image URL # 4. expected percent_pixels_differing (as a string, to 4 decimal places) - # 5. expected weighted_diff_measure (as a string, to 4 decimal places) - # 6. expected perceptual difference (as a string, to 4 decimal places) - # 7. expected max_diff_per_channel + # 5. expected perceptual difference (as a string, to 4 decimal places) + # 6. expected max_diff_per_channel selftests = [ [ 'arcofzorro/16206093933823793653', IMG_URL_BASE + 'arcofzorro/16206093933823793653.png', 'arcofzorro/13786535001616823825', IMG_URL_BASE + 'arcofzorro/13786535001616823825.png', - '0.0662', '0.0113', '0.0662', [255, 255, 247], + '0.0662', '0.0662', [255, 255, 247], ], [ 'gradients_degenerate_2pt/10552995703607727960', IMG_URL_BASE + 'gradients_degenerate_2pt/10552995703607727960.png', 'gradients_degenerate_2pt/11198253335583713230', IMG_URL_BASE + 'gradients_degenerate_2pt/11198253335583713230.png', - '100.0000', '66.6667', '100.0000', [255, 0, 255], + '100.0000', '100.0000', [255, 0, 255], ], ] @@ -89,9 +88,8 @@ class ImageDiffDbTest(unittest.TestCase): actual_image_locator=selftest[2]) self.assertEqual('%.4f' % record.get_percent_pixels_differing(), selftest[4]) - self.assertEqual('%.4f' % record.get_weighted_diff_measure(), selftest[5]) - self.assertEqual('%.4f' % record.get_perceptual_difference(), selftest[6]) - self.assertEqual(record.get_max_diff_per_channel(), selftest[7]) + self.assertEqual('%.4f' % record.get_perceptual_difference(), selftest[5]) + self.assertEqual(record.get_max_diff_per_channel(), selftest[6]) def main(): diff --git a/gm/rebaseline_server/imagepair_test.py b/gm/rebaseline_server/imagepair_test.py index 95b7e4d..3b4cf8e 100755 --- a/gm/rebaseline_server/imagepair_test.py +++ b/gm/rebaseline_server/imagepair_test.py @@ -88,7 +88,6 @@ class ImagePairTest(unittest.TestCase): 'numDifferingPixels': 662, 'percentDifferingPixels': 0.0662, 'perceptualDifference': 0.06620000000000914, - 'weightedDiffMeasure': 0.01127756555171088, }, 'imageAUrl': 'arcofzorro/16206093933823793653.png', 'imageBUrl': 'arcofzorro/13786535001616823825.png', @@ -115,7 +114,6 @@ class ImagePairTest(unittest.TestCase): 'numDifferingPixels': 102400, 'percentDifferingPixels': 100.00, 'perceptualDifference': 100.00, - 'weightedDiffMeasure': 66.66666666666667, }, 'expectations': { 'bugs': [1001, 1002], diff --git a/gm/rebaseline_server/imagepairset_test.py b/gm/rebaseline_server/imagepairset_test.py index b5d6206..c2f17ba 100755 --- a/gm/rebaseline_server/imagepairset_test.py +++ b/gm/rebaseline_server/imagepairset_test.py @@ -35,7 +35,6 @@ IMAGEPAIR_2_AS_DICT = { 'maxDiffPerChannel': [1, 2, 3], 'numDifferingPixels': 111, 'percentDifferingPixels': 22.222, - 'weightedDiffMeasure': 33.333, }, imagepair.KEY__IMAGEPAIRS__EXTRACOLUMNS: { 'builder': 'MyBuilder', @@ -50,7 +49,6 @@ IMAGEPAIR_3_AS_DICT = { 'maxDiffPerChannel': [4, 5, 6], 'numDifferingPixels': 111, 'percentDifferingPixels': 44.444, - 'weightedDiffMeasure': 33.333, }, imagepair.KEY__IMAGEPAIRS__EXPECTATIONS: { 'bugs': [1001, 1002], diff --git a/gm/rebaseline_server/static/constants.js b/gm/rebaseline_server/static/constants.js index 8e71311..7db245d 100644 --- a/gm/rebaseline_server/static/constants.js +++ b/gm/rebaseline_server/static/constants.js @@ -20,7 +20,6 @@ module.constant('constants', (function() { KEY__DIFFERENCES__NUM_DIFF_PIXELS: 'numDifferingPixels', KEY__DIFFERENCES__PERCENT_DIFF_PIXELS: 'percentDifferingPixels', KEY__DIFFERENCES__PERCEPTUAL_DIFF: 'perceptualDifference', - KEY__DIFFERENCES__WEIGHTED_DIFF: 'weightedDiffMeasure', // NOTE: Keep these in sync with ../imagepair.py KEY__IMAGEPAIRS__DIFFERENCES: 'differenceData', diff --git a/gm/rebaseline_server/static/view.html b/gm/rebaseline_server/static/view.html index 68340eb..fda767c 100644 --- a/gm/rebaseline_server/static/view.html +++ b/gm/rebaseline_server/static/view.html @@ -280,7 +280,7 @@ perceptual difference diff --git a/gm/rebaseline_server/testdata/outputs/expected/compare_configs_test.CompareConfigsTest.test_gm/gm.json b/gm/rebaseline_server/testdata/outputs/expected/compare_configs_test.CompareConfigsTest.test_gm/gm.json index d98ac41..49a73f7 100644 --- a/gm/rebaseline_server/testdata/outputs/expected/compare_configs_test.CompareConfigsTest.test_gm/gm.json +++ b/gm/rebaseline_server/testdata/outputs/expected/compare_configs_test.CompareConfigsTest.test_gm/gm.json @@ -94,7 +94,7 @@ } }, "header": { - "dataHash": "-3232866296817265056", + "dataHash": "5496105477154010366", "isEditable": false, "isExported": true, "schemaVersion": 3, @@ -189,8 +189,7 @@ ], "numDifferingPixels": 6081, "percentDifferingPixels": 2.4324, - "perceptualDifference": 1.917199999999994, - "weightedDiffMeasure": 0.06644571780084584 + "perceptualDifference": 1.917199999999994 }, "extraColumns": { "builder": "Test-Builder-We-Have-No-Expectations-File-For", @@ -211,8 +210,7 @@ ], "numDifferingPixels": 50097, "percentDifferingPixels": 30.5767822265625, - "perceptualDifference": 3.3917, - "weightedDiffMeasure": 1.4826590790651433 + "perceptualDifference": 3.3917 }, "extraColumns": { "builder": "Test-Builder-We-Have-No-Expectations-File-For", @@ -255,8 +253,7 @@ ], "numDifferingPixels": 6081, "percentDifferingPixels": 2.4324, - "perceptualDifference": 1.917199999999994, - "weightedDiffMeasure": 0.06644571780084584 + "perceptualDifference": 1.917199999999994 }, "extraColumns": { "builder": "Test-Mac10.7-MacMini4.1-GeForce320M-x86_64-Debug", @@ -277,8 +274,7 @@ ], "numDifferingPixels": 50097, "percentDifferingPixels": 30.5767822265625, - "perceptualDifference": 3.3917, - "weightedDiffMeasure": 1.4826590790651433 + "perceptualDifference": 3.3917 }, "extraColumns": { "builder": "Test-Mac10.7-MacMini4.1-GeForce320M-x86_64-Debug", diff --git a/gm/rebaseline_server/testdata/outputs/expected/compare_to_expectations_test.CompareToExpectationsTest.test_gm/gm.json b/gm/rebaseline_server/testdata/outputs/expected/compare_to_expectations_test.CompareToExpectationsTest.test_gm/gm.json index c8c884b..f2f40d5 100644 --- a/gm/rebaseline_server/testdata/outputs/expected/compare_to_expectations_test.CompareToExpectationsTest.test_gm/gm.json +++ b/gm/rebaseline_server/testdata/outputs/expected/compare_to_expectations_test.CompareToExpectationsTest.test_gm/gm.json @@ -110,7 +110,7 @@ } }, "header": { - "dataHash": "-5343462047057549086", + "dataHash": "7849962375815855931", "isEditable": false, "isExported": true, "schemaVersion": 3, @@ -128,8 +128,7 @@ ], "numDifferingPixels": 120000, "percentDifferingPixels": 75.0, - "perceptualDifference": 50.122499999999995, - "weightedDiffMeasure": 8.413046264257337 + "perceptualDifference": 50.122499999999995 }, "expectations": { "bugs": null, @@ -155,8 +154,7 @@ ], "numDifferingPixels": 765891, "percentDifferingPixels": 97.38807678222656, - "perceptualDifference": 25.25699999999999, - "weightedDiffMeasure": 14.10677058693997 + "perceptualDifference": 25.25699999999999 }, "expectations": { "bugs": [ @@ -184,8 +182,7 @@ ], "numDifferingPixels": 422432, "percentDifferingPixels": 53.715006510416664, - "perceptualDifference": 25.120500000000007, - "weightedDiffMeasure": 14.005823726182287 + "perceptualDifference": 25.120500000000007 }, "expectations": { "bugs": [ @@ -213,8 +210,7 @@ ], "numDifferingPixels": 53150, "percentDifferingPixels": 12.035778985507246, - "perceptualDifference": 100, - "weightedDiffMeasure": 3.713243437353155 + "perceptualDifference": 100 }, "expectations": { "bugs": [ @@ -242,8 +238,7 @@ ], "numDifferingPixels": 53773, "percentDifferingPixels": 12.17685688405797, - "perceptualDifference": 100, - "weightedDiffMeasure": 3.6723483686597684 + "perceptualDifference": 100 }, "expectations": { "bugs": [ -- 2.7.4