Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1214)

Unified Diff: third_party/fuzzymatch/fuzzymatch.c

Issue 13159: Add fuzzy image matching tool for Linux pixel tests (Closed)
Patch Set: Add license block Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/fuzzymatch/SConstruct ('k') | webkit/tools/layout_tests/layout_package/test_failures.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/fuzzymatch/fuzzymatch.c
diff --git a/third_party/fuzzymatch/fuzzymatch.c b/third_party/fuzzymatch/fuzzymatch.c
new file mode 100644
index 0000000000000000000000000000000000000000..b1624e0928594c51d485a1d63b88ee0aacb65a09
--- /dev/null
+++ b/third_party/fuzzymatch/fuzzymatch.c
@@ -0,0 +1,98 @@
+// Copyright (c) 2008 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.
+
+/* Fuzzy pixel test matching.
+ *
+ * This is designed to compare two layout test images (RGB 800x600) and manage
+ * to ignore the noise caused by the font renderers choosing slightly different
+ * pixels.
+ *
+ * A B
+ * | |
+ * |--->delta<---|
+ * |
+ * V
+ * gray
+ * |
+ * V
+ * binary
+ * |
+ * |-------------|
+ * | |
+ * 1x3 3x1 Morphological openings
+ * | |
+ * |-----OR------|
+ * |
+ * V
+ * count pixels
+ *
+ * The result is that three different pixels in a row (vertically or
+ * horizontally) will cause the match to fail and the binary exits with code 1.
+ * Otherwise the binary exists with code 0.
+ *
+ * This requires leptonica to be installed. On Ubuntu do
+ * # apt-get install libleptonica libleptonica-dev
+ *
+ * Build with:
+ * % gcc -o fuzzymatch fuzzymatch.c -llept -ljpeg -ltiff -lpng -lz -lm -Wall -O2
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <leptonica/allheaders.h>
+
+static int
+usage(const char *argv0) {
+ fprintf(stderr, "Usage: %s <input a> <input b>\n", argv0);
+ return 1;
+}
+
+int
+main(int argc, char **argv) {
+ if (argc != 3)
+ return usage(argv[0]);
+
+ PIX *a = pixRead(argv[1]);
+ PIX *b = pixRead(argv[2]);
+
+ if (!a) {
+ fprintf(stderr, "Failed to open %s\n", argv[1]);
+ return 1;
+ }
+
+ if (!b) {
+ fprintf(stderr, "Failed to open %s\n", argv[1]);
+ return 1;
+ }
+
+ if (pixGetWidth(a) != pixGetWidth(b) ||
+ pixGetHeight(a) != pixGetHeight(b)) {
+ fprintf(stderr, "Inputs are difference sizes\n");
+ return 1;
+ }
+
+ PIX *delta = pixAbsDifference(a, b);
+ pixInvert(delta, delta);
+ pixDestroy(&a);
+ pixDestroy(&b);
+
+ PIX *deltagray = pixConvertRGBToGray(delta, 0, 0, 0);
+ pixDestroy(&delta);
+
+ PIX *deltabinary = pixThresholdToBinary(deltagray, 254);
+
+ PIX *hopened = pixOpenBrick(NULL, deltabinary, 3, 1);
+ PIX *vopened = pixOpenBrick(NULL, deltabinary, 1, 3);
+ pixDestroy(&deltabinary);
+
+ PIX *opened = pixOr(NULL, hopened, vopened);
+ pixDestroy(&hopened);
+ pixDestroy(&vopened);
+
+ l_int32 count;
+ pixCountPixels(opened, &count, NULL);
+ fprintf(stderr, "%d\n", count);
+
+ return count;
+}
« no previous file with comments | « third_party/fuzzymatch/SConstruct ('k') | webkit/tools/layout_tests/layout_package/test_failures.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698