--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <map>
+
+#define FROM 1
+#define TO 600
+#define WIDTH 640
+#define HEIGHT 360
+#define HEADER 15
+
+#define ROI_X_FROM 261
+#define ROI_X_TO (261+312)
+#define ROI_Y_FROM 42
+#define ROI_Y_TO (42+246)
+
+std::map<int, const char *> pix;
+
+int main(void)
+{
+ for (int i = FROM; i < TO; ++i) {
+ char filename[256];
+ sprintf(filename, "%08d.ppm", i);
+ FILE *fp = fopen(filename, "rb");
+ if (fp == NULL) {
+ perror(filename);
+ exit(1);
+ }
+
+ fprintf(stderr, "Reading %s...\n", filename);
+
+ char *ptr = new char[WIDTH * HEIGHT * 3];
+ fseek(fp, HEADER, SEEK_SET);
+
+ if (fread(ptr, WIDTH * HEIGHT * 3, 1, fp) != 1) {
+ fprintf(stderr, "%s: Short read\n", filename);
+ exit(1);
+ }
+
+ pix[i] = ptr;
+ }
+
+ for (int i = FROM; i < TO; ++i) {
+ for (int j = FROM; j < TO; ++j) {
+ const char *ptri = pix[i];
+ const char *ptrj = pix[j];
+
+ int sumdiff = 0;
+ for (int y = ROI_Y_FROM; y < ROI_Y_TO; ++y) {
+ for (int x = ROI_X_FROM; x < ROI_X_TO; ++x) {
+ for (int c = 0; c < 3; ++c) {
+ sumdiff += abs(ptri[(y * WIDTH + x) * 3 + c] - ptrj[(y * WIDTH + x) * 3 + c]);
+ }
+ }
+ }
+
+ printf("%d %d %d\n", i, j, sumdiff);
+ }
+ }
+}