コード例 #1
0
ファイル: contactSetting.cpp プロジェクト: jaredweiss/graspit
bool neighborhoodsOverlap(const Neighborhood &n1, const Neighborhood &n2) {
	// both neighborhoods are assumed to be in the same frame 
	Neighborhood::const_iterator it1, it2;
	for (it1 = n1.begin(); it1!=n1.end(); it1++)
		for (it2 = n2.begin(); it2 != n2.end(); it2++) {
			if ( *it1 == *it2 )
				return true;
		}
	return false;
}
コード例 #2
0
ファイル: contactSetting.cpp プロジェクト: jaredweiss/graspit
void mergeNeighborhoods(Neighborhood &n1, Neighborhood &n2)
{
	Neighborhood::iterator it1, it2;
	bool present;
	for (it2 = n2.begin(); it2 != n2.end(); it2++) {
		present = false;
		for (it1 = n1.begin(); it1 != n1.end(); it1++) {
			if ( *it1 == *it2 ) {
				present = true;
				break;
			}
		}
		if (!present) {
			n1.push_back( *it2 );
		}
	}
}
コード例 #3
0
ファイル: connected-components.C プロジェクト: bmajoros/util
void Application::connectedComponents(SparseGraph &G,
				      Vector<Neighborhood> &components)
{
  int N=G.getNumVertices(), componentId=1;
  Array1D<bool> mark(N);
  mark.setAllTo(false);
  for(VertexId i=0 ; i<N ; ++i) {
    if(mark[i]) continue;
    Neighborhood component;
    dfs(G,i,mark,component);
    components.push_back(component);
    int size=component.size();
    cout<<"Component #"<<componentId++<<" "<<size<<" vertices:"<<endl;
    for(Neighborhood::iterator cur=component.begin(), end=component.end() ; 
	cur!=end ; ++cur) {
      VertexId id=*cur;
      cout<<G.getLabel(id)<<"\t";
    }
    cout<<endl;
  }
}
コード例 #4
0
ファイル: main.cpp プロジェクト: burk/image-restoration
int main(int argc, char *argv[])
{
	int p = 2;
	double beta = 10;

	int neighbors = 8;

	double sigma = 10.0;
	double rho   = 10.0;
	double gamma = 10000.0;

	int c;

	/* Read command line parameters beta and p. */
	while ((c = getopt(argc, argv, "b:p:r:s:g:n:fh")) != -1) {
		switch (c)
		{
		case 'p':
			p = atoi(optarg);
			break;
		case 'b':
			beta = atof(optarg);
			break;
		case 'g':
			gamma = atof(optarg);
			break;
		case 'r':
			rho = atof(optarg);
			break;
		case 's':
			sigma = atof(optarg);
			break;
		case 'n':
			neighbors = atoi(optarg);
			break;
		case '?':
			if (optopt == 'p' || optopt == 'b' || optopt == 'g'
					|| optopt == 'n' || optopt == 'r'
					|| optopt == 's') {
				fprintf(stderr, "Option -%c requires an argument.\n",
						optopt);
			}
			else if (isprint(optopt)) {
				fprintf(stderr, "Unknown option `-%c'.\n", optopt);
			}
			else {
				fprintf(stderr, "Unknown option character `\\x%x'.\n",
						optopt);
			}
			return 1;
		default:
			exit(1);
		}
	}

	/*
	 * Non-option arguments are now in argv from index optind
	 * to index argc-1
	 */
	Mat image;
	image = imread(argv[optind], CV_LOAD_IMAGE_GRAYSCALE);

	if (!image.data) {
		cout << "Loading image failed" << endl;
		return -1;
	}

	cout << "Using gamma = " << gamma << endl;
	cout << "Using rho = " << rho << endl;
	cout << "Using sigma = " << sigma << endl;

	Mat_<Tensor> tensors = Mat_<Tensor>::zeros(image.rows, image.cols);
	Mat blur, edge, structure, color;
	createAnisotropyTensor(tensors, image, sigma, rho, gamma,
			blur, edge, structure, color);
	imwrite(argv[optind + 1], blur);
	imwrite(argv[optind + 2], edge);
	imwrite(argv[optind + 3], structure);
	imwrite(argv[optind + 4], color);

	/*
	 * Network only handles integer edges, so we increase the scale a bit.
	 */
	int a;
	int b;
	a = 100;
	b = beta;

	/*
	 * Specify the neighbors of a pixel.
	 */
	cout << "Creating size " << neighbors << " neighborhood." << endl;
	Neighborhood neigh;
	if (neighbors >= 4) {
		neigh.add( 1, 0, b * 1.0);
		neigh.add( 0, 1, b * 1.0);
		neigh.add(-1, 0, b * 1.0);
		neigh.add( 0,-1, b * 1.0);
	}

	if (neighbors >= 8) {
		neigh.add( 1, 1, b * 1.0/sqrt(2.0));
		neigh.add(-1, 1, b * 1.0/sqrt(2.0));
		neigh.add( 1,-1, b * 1.0/sqrt(2.0));
		neigh.add(-1,-1, b * 1.0/sqrt(2.0));
	}

	if (neighbors >= 16) {
		neigh.add8(1, 2, 1.0);
	}

	if (neighbors >= 32) {
		neigh.add8(3, 1, 1.0);
		neigh.add8(3, 2, 1.0);
	}

	if (neighbors >= 48) {
		neigh.add8(1, 4, 1.0);
		neigh.add8(3, 4, 1.0);
	}

	if (neighbors >= 72) {
		neigh.add8(1, 5, 1.0);
		neigh.add8(2, 5, 1.0);
		neigh.add8(3, 5, 1.0);
	}

	cout << "Neighborhood: " << endl;
	neigh.setupAngles();
	for (Neighborhood::iterator it = neigh.begin(); it != neigh.end(); ++it) {
		cout << it->x << ", " << it->y << ": " << it->dt * 180 / M_PI << endl;
	}

	Mat out = image.clone();
	restoreAnisotropicTV(image, out, tensors, neigh, a, b, p);

	cout << "Writing output to " << argv[optind + 5] << endl;
	imwrite(argv[optind + 5], out);

	return 0;
}