Image classification if rotated version same
Just encode your images first and do the classification on the encoded data (Wavelet transformation). Parts of similar image regions will result in very similar encoded matrix. Further denoising the encoded matrix by zeroing the absolute values that are less or equal some small constant should reduce overfitting and improve your accuracy.

Here an example for a simple Haar-Wavelet transform encoder:

First we take the R values of the RGB-image and divide it into 8x8 matrices such as this one:
   $\begin{pmatrix}{97,95,99,94,97,88,90,95}\\{88,86,89,90,95,96,99,98}\\{95,99,94,91,88,85,90,94}\\{78,75,84,86,80,74,77,99}\\{71,75,78,70,71,84,91,90}\\{67,74,69,70,65,68,74,70}\\{59,55,64,68,70,84,86,90}\\{79,82,88,90,85,82,88,90}\end{pmatrix}$

Now we begin with the first row: $\begin{pmatrix}{97,95,99,94,97,88,90,95}\end{pmatrix}$

Grouping two adjacent values we obtain the 4 groups:

{97,95},{99,94},{97,88},{90,95}

Next step is to calculate the average of each group:

(96, 96.5, 92.5, 92.5)

And the difference of the second value of each group and the average:

95-96 = -1, 94-96.5 = -2.5, 88-92.5 = -4.5, and 95-92.5 = 2.5

Putting them together: (-1, -2.5, -4.5, 2.5)

Attaching them to the list of our average values we get:

(96, 96.5, 92.5, 92.5, -1, -2.5, -4.5, 2.5)

Now we repeat that process, but only using the first 4 values:

Grouping: {96, 96.5}, {92.5, 92.5}

Averages and differences: (96.25, 92.5, 0.25, 0)

One last time the same process but now only using the first 2 values:

Grouping: {96.25, 92.5}

Average and difference: (94.375, -1.875)

Putting it all together we obtain the new values of the first row, where we can see, that one value was already zeroed out:

(94.375, -1.875, 0.25, 0, -1, -2.5, -4.5, 2.5)

The next steps would be just applying the above process on the other 7 rows and then doing the same for every column of the resulting 8x8 matrix. Then doing the same on every other 8x8 part of our RGB-image's R-matrix and then doing the same for the G-matrix and B-matrix. The resulting RGB-matrices will be very sparse because of all the zeroed values. We got rid of all low entropy pixels what is left are the core features of the objects from the image. Using some simple similarity metrics will result in a high accuracy classifier.

The whole process can be very easy implemented using a simple recursive function, or by using linear algebra and matrix multiplications.
This is a lossless compression, meaning the resulted matrix still have all needed information to decode it and getting the original image.
However it is possible to apply some denoising routines to get more zeroes, but doing it, information will be lost.