int main() { int i,k; printf("\n------------------------------------------ input1 -----------------------------\n"); int n; printf("First Input Text File => No. of Rows : "); scanf("%d",&n); int **ceps1 = (int **)malloc(sizeof(int*)*n); for(int i=0; i < n;i++) { ceps1[i]= (int *)malloc(sizeof(int)*12); } char filename1[256]; printf("First Input Text File Name : "); scanf("%s",filename1); printf("\n"); FILE *file1; file1 = fopen(filename1,"r"); if(file1==NULL) printf("file not found!"); for(i=0; i<n; i++) { for(k=0; k<12; k++) { fscanf(file1,"%d",&ceps1[i][k]); printf("%d ",ceps1[i][k]); }printf("\n"); } fclose(file1); printf("\n------------------------------------------ input2 -----------------------------\n"); int m; printf("First Input Text File => No. of Rows : "); scanf("%d",&m); int** ceps2 = (int**)malloc(sizeof(int *)*m); for(int i= 0;i<m;i++) { ceps2[i]=(int*)malloc(sizeof(int)*12); } char filename2[256]; printf("Second Input Text File Name : "); scanf("%s",filename2); printf("\n"); FILE *file2; file2 = fopen(filename2,"r"); if(file2==NULL) printf("file not found!"); for(i=0; i<m; i++) { for(k=0; k<12; k++) { fscanf(file2,"%d",&ceps2[i][k]); printf("%d ",ceps2[i][k]); }printf("\n"); } fclose(file2); printf("\n----------------------------- Local Distance Matrix ---------------------------\n\n"); int local_distance[n][m]; for(i=0; i<n; i++) { for(k=0; k<m; k++) { local_distance[i][k] = distance_measure(ceps1[i],ceps2[k]); printf("%d\t ",local_distance[i][k]); } printf("\n"); } printf("-------------------------------------------------------------------------------\n\n"); printf("----------------------------- Global Distance Matrix --------------------------\n\n"); int global_distance[n][m]; global_distance[0][0] = local_distance[0][0]; printf("%d\t ",global_distance[0][0]); for(i=1; i<n; i++) // generating first row element of global_distance matrix global_distance[i][0] = local_distance[i][0] + global_distance[i-1][0]; for(k=1; k<m; k++) // generating first column element of global_distance matrix { global_distance[0][k] = local_distance[0][k] + global_distance[0][k-1]; printf("%d\t ",global_distance[0][k]); } printf("\n"); for(i=1; i<n; i++) { printf("%d\t ",global_distance[i][0]); for(k=1; k<m; k++) { global_distance[i][k] = local_distance[i][k] + min(global_distance[i-1][k],global_distance[i-1][k-1],global_distance[i][k-1]); printf("%d\t ",global_distance[i][k]); } printf("\n"); } printf("-------------------------------------------------------------------------------\n\n"); printf("Optimal Warping Path : (0,0) "); i=0; k=0; while((i!=n-1)||(k!=m-1)) { if(i==n-1) // if you reached to the last row (n-1) then go only one step forward in last row k=k+1; else if(k==m-1) //if you have reached to the last column (m-1) then go only one step upward in last column i=i+1; else { int global_minm = min(global_distance[i+1][k],global_distance[i+1][k+1],global_distance[i][k+1]); if(global_distance[i+1][k] == global_minm) { i=i+1; } else if(global_distance[i+1][k+1] == global_minm) { i=i+1; k=k+1; } else//(global_distance[i][k+1] == global_minm) { k=k+1; } } printf("(%d,%d) ",i,k); } printf("\nOptimal Warping Path Cost : %d\n", global_distance[n-1][m-1]); printf("\n-------------------------------------------------------------------------------\n\n"); return 0; }
// Get the vector distance (x, y, z) of the mean distance between pairs of closest points // - For each point, find it's closest neighbour and save the distance // - Take the mean of all the values to obtain the mean spacing between points // // vector<float> get_mean_point_distance(vector<int> & x, vector<int> & y, vector<int> & z) { vector<float> dist (3, 0); // distance pairs vector<int> sx; vector<int> sy; vector<int> sz; long dmeas; long dist1; long nn; for (int m=0; m<x.size(); m++) { dmeas = numeric_limits<long>::max(); for (int n=0; n<x.size(); n++) { // Skip comparing point to itself if (n==m) continue; // Calculate the squared distance between each point and every other dist1 = distance_measure(x[m], y[m], z[m], x[n], y[n], z[n]); if (dist1 < dmeas) { // If closer then save the indices for that point dmeas = dist1; nn=n; } } // Save the closest distance for that point sx.push_back(abs(x[m] - x[nn])); sy.push_back(abs(y[m] - y[nn])); sz.push_back(abs(z[m] - z[nn])); } float d0m = 0; float d1m = 0; float d2m = 0; for (int r=0; r<sx.size(); r++) { d0m += sx.at(r); d1m += sy.at(r); d2m += sz.at(r); } // Mean distance instead dist[0] = d0m/sx.size(); dist[1] = d1m/sy.size(); dist[2] = d2m/sz.size(); // Find the maximum distance between two points in the region and use this for the supervoxel extraction // dist[0] = *max_element(sx.begin(), sx.end()); // dist[1] = *max_element(sy.begin(), sy.end()); // dist[2] = *max_element(sz.begin(), sz.end()); return dist; }