diff options
Diffstat (limited to 'catapult/telemetry/telemetry/util/color_histogram_unittest.py')
-rw-r--r-- | catapult/telemetry/telemetry/util/color_histogram_unittest.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/util/color_histogram_unittest.py b/catapult/telemetry/telemetry/util/color_histogram_unittest.py new file mode 100644 index 00000000..a853d534 --- /dev/null +++ b/catapult/telemetry/telemetry/util/color_histogram_unittest.py @@ -0,0 +1,117 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import unittest + +from telemetry.util import color_histogram +from telemetry.util import image_util +from telemetry.util import rgba_color + +class HistogramDistanceTest(unittest.TestCase): + def testNoData(self): + hist1 = [] + hist2 = [] + self.assertEqual(color_histogram.HistogramDistance(hist1, hist2), 0) + + hist1 = [0, 0, 0] + hist2 = [0, 0, 0] + self.assertRaises( + ValueError, lambda: color_histogram.HistogramDistance(hist1, hist2)) + + def testWrongSizes(self): + hist1 = [1] + hist2 = [1, 0] + self.assertRaises( + ValueError, lambda: color_histogram.HistogramDistance(hist1, hist2)) + + def testNoDistance(self): + hist1 = [2, 4, 1, 8, 0, 0] + hist2 = [2, 4, 1, 8, 0, 0] + self.assertEqual(color_histogram.HistogramDistance(hist1, hist2), 0) + + def testNormalizeCounts(self): + hist1 = [0, 0, 1, 0, 0] + hist2 = [0, 0, 0, 0, 7] + self.assertEqual(color_histogram.HistogramDistance(hist1, hist2), 2) + self.assertEqual(color_histogram.HistogramDistance(hist2, hist1), 2) + + def testDistance(self): + hist1 = [2, 0, 1, 3, 4] + hist2 = [3, 1, 2, 4, 0] + self.assertEqual(color_histogram.HistogramDistance(hist1, hist2), 1) + self.assertEqual(color_histogram.HistogramDistance(hist2, hist1), 1) + + hist1 = [0, 1, 3, 1] + hist2 = [2, 2, 1, 0] + self.assertEqual(color_histogram.HistogramDistance(hist1, hist2), 1.2) + self.assertEqual(color_histogram.HistogramDistance(hist2, hist1), 1.2) + + +class HistogramTest(unittest.TestCase): + def testHistogram(self): + pixels = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, + 1, 2, 3, 8, 7, 6, 5, 4, 6, 1, 2, 3, + 1, 2, 3, 8, 7, 6, 5, 4, 6, 1, 2, 3] + bmp = image_util.FromRGBPixels(4, 3, pixels) + bmp = image_util.Crop(bmp, 1, 1, 2, 2) + + hist = image_util.GetColorHistogram(bmp) + for i in xrange(3): + self.assertEquals(sum(hist[i]), + image_util.Width(bmp) * image_util.Height(bmp)) + self.assertEquals(hist.r[1], 0) + self.assertEquals(hist.r[5], 2) + self.assertEquals(hist.r[8], 2) + self.assertEquals(hist.g[2], 0) + self.assertEquals(hist.g[4], 2) + self.assertEquals(hist.g[7], 2) + self.assertEquals(hist.b[3], 0) + self.assertEquals(hist.b[6], 4) + + def testHistogramIgnoreColor(self): + pixels = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, + 1, 2, 3, 8, 7, 6, 5, 4, 6, 1, 2, 3, + 1, 2, 3, 8, 7, 6, 5, 4, 6, 1, 2, 3] + bmp = image_util.FromRGBPixels(4, 3, pixels) + + hist = image_util.GetColorHistogram( + bmp, ignore_color=rgba_color.RgbaColor(1, 2, 3)) + self.assertEquals(hist.r[1], 0) + self.assertEquals(hist.r[5], 2) + self.assertEquals(hist.r[8], 2) + self.assertEquals(hist.g[2], 0) + self.assertEquals(hist.g[4], 2) + self.assertEquals(hist.g[7], 2) + self.assertEquals(hist.b[3], 0) + self.assertEquals(hist.b[6], 4) + + def testHistogramIgnoreColorTolerance(self): + pixels = [1, 2, 3, 4, 5, 6, + 7, 8, 9, 8, 7, 6] + bmp = image_util.FromRGBPixels(2, 2, pixels) + + hist = image_util.GetColorHistogram( + bmp, ignore_color=rgba_color.RgbaColor(0, 1, 2), tolerance=1) + self.assertEquals(hist.r[1], 0) + self.assertEquals(hist.r[4], 1) + self.assertEquals(hist.r[7], 1) + self.assertEquals(hist.r[8], 1) + self.assertEquals(hist.g[2], 0) + self.assertEquals(hist.g[5], 1) + self.assertEquals(hist.g[7], 1) + self.assertEquals(hist.g[8], 1) + self.assertEquals(hist.b[3], 0) + self.assertEquals(hist.b[6], 2) + self.assertEquals(hist.b[9], 1) + + def testHistogramDistanceIgnoreColor(self): + pixels = [1, 2, 3, 1, 2, 3, + 1, 2, 3, 1, 2, 3] + bmp = image_util.FromRGBPixels(2, 2, pixels) + + hist1 = image_util.GetColorHistogram( + bmp, ignore_color=rgba_color.RgbaColor(1, 2, 3)) + hist2 = image_util.GetColorHistogram(bmp) + + self.assertEquals(hist1.Distance(hist2), 0) |