public void compare() {
        // setup change display image
        imgc = imageToBufferedImage(img2);
        Graphics2D gc = imgc.createGraphics();
        gc.setColor(Color.RED);
        // convert to gray images.
        img1 = imageToBufferedImage(GrayFilter.createDisabledImage(img1));
        img2 = imageToBufferedImage(GrayFilter.createDisabledImage(img2));
        // how big are each section
        int blocksx = (int) (img1.getWidth() / comparex);
        int blocksy = (int) (img1.getHeight() / comparey);
        // set to a match by default, if a change is found then flag non-match
        this.match = true;
        // loop through whole image and compare individual blocks of images
        for (int y = 0; y < comparey; y++) {
            if (debugMode > 0) {
                System.out.print("|");
            }
            for (int x = 0; x < comparex; x++) {
                int b1 = getAverageBrightness(img1.getSubimage(x * blocksx, y * blocksy, blocksx - 1, blocksy - 1));
                int b2 = getAverageBrightness(img2.getSubimage(x * blocksx, y * blocksy, blocksx - 1, blocksy - 1));
                int diff = Math.abs(b1 - b2);
                if (diff > factorA) { // the difference in a certain region has passed the threshold value of factorA
                    // draw an indicator on the change image to show where change was detected.
                    gc.drawRect(x * blocksx, y * blocksy, blocksx - 1, blocksy - 1);
                    this.match = false;
                }
                if (debugMode == 1) {
                    System.out.print((diff > factorA ? "X" : " "));
                }
                if (debugMode == 2) {
                    System.out.print(diff + (x < comparex - 1 ? "," : ""));
                }
            }
            if (debugMode > 0) {
                System.out.println("|");
            }
        }
    }