texture matching between patches of an image I have an image A which I have divided into 4 x 4 subband images. For a given patch P1 in image A, I need to find another patch P2  in the same image A which is most similar: have same texture.

Till now my appraoch is to create feature vectors Fi for all i patches and using Euclid's distance formula find out which patch's feature vector is closest to given patch P1's feature vector.

Currently I have added following features:


  
  Mean &amp; Standard Deviation of brightness (using L channel of LAB colorspace)
  Mean &amp; Standard Deviation of color values in A channel of LAB colorspace
  Mean &amp; Standard Deviation of color values in B channel of LAB colorspace
  


Although I am getting similar patches but I still think the matching can be improved if I incorporate more prominent features (which I'm unaware of). 

Following are my queries:


  
  I have a doubt whether this is a good way to compare color between two patches.
  Please suggest some more good features which can be helpful to get a proper differentiation.
  Although most of my images are proper but are there any restrictions/drawbacks with the approach if image is dark and/or noisy? If yes, is there a good alternative approach or
  feature(s)?
  


Please help!
The mean and standard deviation are two measurements of a distribution. Others you could also use are higher order moments like 'skewness' (how skewed the distribution is) and 'kurtosis' (how 'peaky' the distribution is).

However, what I would try is a histogram of the values for each of the channels. For example, if you used a histogram with 16 bins, you would get a feature vector with 48 values. The histogram bin values can be thought of as a descriptor of the distribution.

To account for changes in brightness, you need to introduce some illumination invariance. Already the LAB colour-space splits the image into luminance (L) and color (AB) channels. To achieve illumination invariance I would normalise the L channel histogram values using the norm of whatever measure you are using (in this case, euclidean distance, it would be the l2 norm). Normalising the A or B channels is probably not necessary. The normalisation accounts for any linear changes in luminance.

Depending on the images, you could also add vectors like:


histogram of oriented gradients (HOG)
histogram of connected components (make B/W then count how many pixels are white in the 8 connected neighbours)
k-means clustering of LAB values to get k centre LAB values which you can compare to other images.


and so on.