Pergunta

Como cluster extraídos descritores SIFT.O objetivo de fazer de clusters é usá-lo para a classificação finalidade.

Foi útil?

Solução 2

Para cluster , converter N*128 dimensão(N é o número de descritor de cada imagem) em uma matriz de M*128 dimensão (M número de descritor de todas as imagens).e executar cluster de dados.

por exemplo:

def dict2numpy(dict):
    nkeys = len(dict)
    array = zeros((nkeys * PRE_ALLOCATION_BUFFER, 128))
    pivot = 0
    for key in dict.keys():
        value = dict[key]
        nelements = value.shape[0]
        while pivot + nelements > array.shape[0]:
            padding = zeros_like(array)
            array = vstack((array, padding))
        array[pivot:pivot + nelements] = value
        pivot += nelements
    array = resize(array, (pivot, 128))
    return array

all_features_array = dict2numpy(all_features)
nfeatures = all_features_array.shape[0]
nclusters = 100
codebook, distortion = vq.kmeans(all_features_array,
                                         nclusters)

Outras dicas

Abordagem:

  • Primeiro de tudo, calcular o SIFT descriptor para cada imagem/objeto e, em seguida, push_back que o descritor em uma única imagem (permite chamado de imagem Mat featuresUnclustered).

  • Depois que sua tarefa é a de cluster de todos os descritor em algumas número de grupos (clusters que é decidido por você).Que vai ser o tamanho do seu vocabulário/dicionário.

    int dictionarySize=200;

  • E, finalmente, vem a etapa de agrupamento-los

    //define Term Criteria
    TermCriteria tc(CV_TERMCRIT_ITER,100,0.001);
    
    //retries number
    int retries=1;
    
    //necessary flags
    int flags=KMEANS_PP_CENTERS;
    
    //Create the BoW (or BoF) trainer
    BOWKMeansTrainer bowTrainer(dictionarySize,tc,retries,flags);
    
    //cluster the feature vectors
    Mat dictionary=bowTrainer.cluster(featuresUnclustered);    
    

geralmente kmleans é aplicado para obter centros k, você pode alterar cada imagem em umvetor do k (cada dimensão representa quantos patch nesse cluster).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top