Я изложу свой вопрос, потому что это было недостаточно ясно. Итак, кластеризация k означает разбиение «n наблюдений» на k кластеров, в которых каждое наблюдение относится к кластеру с ближайшим средним значением. В моем случае «наблюдения» - «двоичные образы»; действительно, я хочу сгруппировать набор двоичных изображений в кластер k, потому что этот набор изображений близок. Я хочу разбить их на k closter, чтобы представлять каждый кластер на одно изображение (характеристическое изображение). Я пытаюсь реализовать предложение @ Miki («матрица» MxN, где N = image.rows * image.cols). Но я не знаю, как преобразовать «матрицу» в cv :: InputArray, чтобы использовать метод k -средства opencv. Это часть моего кода:Как использовать k-средство между двоичными изображениями?
CString numImage
int i,j,k,val,Nx,Ny,***matrice;
FILE *fsource,*fdist;
//memory allocation
matrix = (int***)malloc(100*sizeof(int**)); //100 binary images
for (int q=0 ;q < 100;q++)
{
numImage.Format("%d",q);
fsource = fopen("path_to_image" + numImage + ".txt","r");
fscanf(fsource,"%d %d",&Nx,&Ny);
//memory allocation
matrice[q] = (int**)malloc(Nx*sizeof(int*));
for(i = 0 ; i < Nx ;i++)
matrice[q][i] = (int*)malloc(Ny*sizeof(int));
// Loading data
for(i = 0 ; i < Nx ; i++)
{
for(j = 0 ; j < Ny ; j++)
{
fscanf(fsource,"%d",&val);
matrice[q][i][j] = val;
}
}
}
певце не применяются kmeans к изображениям, но и на точках в N-мерном пространстве. Поэтому, пожалуйста, уточните, что вы пытаетесь сделать. В настоящее время не имеет никакого смысла – Miki
k - означает, что кластеризация нацелена на разделение «n наблюдений» на k кластеров, в которых каждое наблюдение относится к кластеру с ближайшим средним значением. В моем случае «наблюдения» - «двоичные образы»; действительно, я хочу сгруппировать набор двоичных изображений в кластер k, потому что этот набор изображений близок. Я хочу разбить их на кластер K для представления позже, каждая группа с одним характерным изображением. Надеюсь, что мой вопрос ясен. – Ilyass
Итак, каждая из ваших N-мерных точек - это _unrolled_ изображение, где N = image.rows * image.cols. Вы можете кормить kmeans матрицей MxN, где M - количество ваших изображений. Обратите внимание, что если ваши изображения большие (большой N), вам понадобится очень большое количество изображений (M), чтобы иметь какой-то смысл, или вы понесете в _curse размерности_ – Miki