diff --git a/gm/rebaseline_server/imagediffdb.py b/gm/rebaseline_server/imagediffdb.py index a37e8ce956..6b684143b0 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 b1d534a5e0..4fc8c66f2b 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 95b7e4d44d..3b4cf8e95c 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 b5d6206d70..c2f17ba01a 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 8e71311266..7db245daf0 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 68340ebe14..fda767c5b4 100644 --- a/gm/rebaseline_server/static/view.html +++ b/gm/rebaseline_server/static/view.html @@ -280,7 +280,7 @@