Eu recomendaria deixar de usar apenas um histograma RGB.
Um resumo melhor de sua imagem pode ser obtido se você pegar uma wavelet Haar 2d da imagem (é muito mais fácil do que parece, é apenas uma grande quantidade de médias e algumas raízes quadradas usadas para ponderar seus coeficientes) e apenas reter o k maior coeficientes ponderados na wavelet como um vetor esparso, normalize-o e salve-o para reduzir seu tamanho. Você deve redimensionar RG e B usando pesos perceptuais de antemão, pelo menos, ou eu recomendo mudar para YIQ (ou YCoCg, para evitar ruído de quantização) para que você possa amostrar informações de crominância com importância reduzida.
Agora você pode usar o produto escalar de dois desses vetores normalizados esparsos como uma medida de similaridade. Os pares de imagens com os maiores produtos escalares serão muito semelhantes em estrutura. Isso tem a vantagem de ser ligeiramente resistente a redimensionamento, mudança de matiz e marca d'água, além de ser realmente fácil de implementar e compactar.
Você pode trocar armazenamento e precisão aumentando ou diminuindo k.
Classificar por uma única pontuação numérica será intratável para esse tipo de problema de classificação. Se você pensar sobre isso, seria necessário que as imagens só pudessem 'mudar' ao longo de um eixo, mas elas não mudam. É por isso que você precisa de um vetor de recursos. No caso da wavelet Haar é aproximadamente onde ocorrem as descontinuidades mais nítidas na imagem. Você pode calcular a distância entre as imagens aos pares, mas como tudo o que você tem é uma métrica de distância, uma ordenação linear não tem como expressar um 'triângulo' de 3 imagens que estão todas igualmente distantes. (ou seja, pense em uma imagem totalmente verde, uma imagem totalmente vermelha e uma imagem totalmente azul.)
Isso significa que qualquer solução real para o seu problema precisará de O (n ^ 2) operações no número de imagens que você tem. Ao passo que, se tivesse sido possível linearizar a medida, você poderia exigir apenas O (n log n) ou O (n) se a medida fosse adequada para, digamos, uma classificação de raiz. Dito isso, você não precisa gastar O (n ^ 2), pois na prática você não precisa vasculhar todo o conjunto, você só precisa encontrar o que está mais próximo do que algum limite. Assim, aplicando uma das várias técnicas para particionar seu espaço vetorial esparso, você pode obter assintóticos muito mais rápidos para o problema de 'encontrar o me k das imagens que são mais semelhantes do que um determinado limite' do que comparar ingenuamente todas as imagens com todas as imagens, dando-lhe o que você provavelmente precisa ... se não exatamente o que você pediu.
Em qualquer caso, usei isso há alguns anos com bons resultados pessoalmente ao tentar minimizar o número de texturas diferentes que estava armazenando, mas também houve muito ruído de pesquisa neste espaço, mostrando sua eficácia (e, neste caso, comparando para uma forma mais sofisticada de classificação de histograma):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
Se você precisar de melhor precisão na detecção, os algoritmos minHash e tf-idf podem ser usados com a wavelet Haar (ou o histograma) para lidar com as edições de forma mais robusta:
http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf
Finalmente, Stanford tem uma pesquisa de imagens baseada em uma variante mais exótica desse tipo de abordagem, baseada em fazer mais extração de recursos das ondas para encontrar seções giradas ou dimensionadas de imagens, etc., mas isso provavelmente vai muito além da quantidade de trabalho que você gostaria de fazer.
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi