Example #1
0
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;
}
Example #2
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;
}