Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare three-dimensional structures

I need to evaluate if two sets of 3d points are the same (ignoring translations and rotations) by finding and comparing a proper geometric hash. I did some paper research on geometric hashing techniques, and I found a couple of algorithms, that however tend to be complicated by "vision requirements" (eg. 2d to 3d, occlusions, shadows, etc).

Moreover, I would love that, if the two geometries are slightly different, the hashes are also not very different.

Does anybody know some algorithm that fits my need, and can provide some link for further study?

Thanks

like image 924
Stefano Borini Avatar asked Jun 21 '09 22:06

Stefano Borini


People also ask

What is a three-dimensional structure?

The three-dimensional (3D) structure is also called the tertiary structure. If a protein molecule consists of more than one polypeptide, it also has the quaternary structure, which specifies the relative positions among the polypeptides (subunits) in a protein.

How do you compare protein structures?

Two protein structures can be compared to show their similarity and the differences. The second of the two proteins is rotated and translated so as to minimize the Root Mean Square (RMS) difference between it and the first geometry. If swapping pairs of atoms would reduce the RMS error, this is done.

Why is 3D structure important?

Knowledge of protein's 3D structure is a huge hint for understanding how the protein works, and use that information for different purposes; control or modify protein's function, predict what molecules bind to that protein and understand various biological interactions, assist drug discovery or even design our own ...

How can you differentiate between regular and irregular secondary structures?

Unlike regular secondary structure, the backbone of irregular secondary structure does not form any hydrogen bonds. Unlike regular secondary structure, successive residues in irregular secondary structure do not have the same backbone configuration.


2 Answers

Your first thought may be trying to find the rotation that maps one object to another but this a very very complex topic... and is not actually necessary! You're not asking how to best match the two, you're just asking if they are the same or not.

Characterize your model by a list of all interpoint distances. Sort the list by that distance. Now compare the list for each object. They should be identical, since interpoint distances are not affected by translation or rotation.

Three issues:

1) What if the number of points is large, that's a large list of pairs (N*(N-1)/2). In this case you may elect to keep only the longest ones, or even better, keep the 1 or 2 longest ones for each vertex so that every part of your model has some contribution. Dropping information like this however changes the problem to be probabilistic and not deterministic.

2) This only uses vertices to define the shape, not edges. This may be fine (and in practice will be) but if you expect to have figures with identical vertices but different connecting edges. If so, test for the vertex-similarity first. If that passes, then assign a unique labeling to each vertex by using that sorted distance. The longest edge has two vertices. For each of THOSE vertices, find the vertex with the longest (remaining) edge. Label the first vertex 0 and the next vertex 1. Repeat for other vertices in order, and you'll have assigned tags which are shift and rotation independent. Now you can compare edge topologies exactly (check that for every edge in object 1 between two vertices, there's a corresponding edge between the same two vertices in object 2) Note: this starts getting really complex if you have multiple identical interpoint distances and therefore you need tiebreaker comparisons to make the assignments stable and unique.

3) There's a possibility that two figures have identical edge length populations but they aren't identical.. this is true when one object is the mirror image of the other. This is quite annoying to detect! One way to do it is to use four non-coplanar points (perhaps the ones labeled 0 to 3 from the previous step) and compare the "handedness" of the coordinate system they define. If the handedness doesn't match, the objects are mirror images.

Note the list-of-distances gives you easy rejection of non-identical objects. It also allows you to add "fuzzy" acceptance by allowing a certain amount of error in the orderings. Perhaps taking the root-mean-squared difference between the two lists as a "similarity measure" would work well.

Edit: Looks like your problem is a point cloud with no edges. Then the annoying problem of edge correspondence (#2) doesn't even apply and can be ignored! You still have to be careful of the mirror-image problem #3 though.

like image 150
SPWorley Avatar answered Sep 25 '22 14:09

SPWorley


There a bunch of SIGGRAPH publications which may prove helpful to you.

e.g. "Global Non-Rigid Alignment of 3-D Scans" by Brown and Rusinkiewicz:

http://portal.acm.org/citation.cfm?id=1276404

A general search that can get you started:

http://scholar.google.com/scholar?q=siggraph+point+cloud+registration

like image 29
nsanders Avatar answered Sep 24 '22 14:09

nsanders