CONVEX GEOMETRY IMAGE CAPTURE
20230215033 · 2023-07-06
Inventors
Cpc classification
International classification
Abstract
Systems and methods are provided for identifying data points in a three-dimensional image. The method receives an input image with data points having coordinates in a three-dimensional (3D) image space. A convex geometry is created that surrounds a first group of data points. The convex geometry is composed of planes with faces, where each plane only intersects planes from adjacent faces. For each plane, a first face is determined, and every data point associated with the plane's first face is identified. Common identified data points (data points associated with every first face) are determined and presented as a representation of the first group of data points. In one aspect, the first face is defined as an outside face, so that the step of identifying every data point associated with the plane's first face becomes the identification of every data point not faced by the plane's outside face.
Claims
1. A method for identifying data points in a three-dimensional image, the method comprising: receiving an input image with data points having coordinates in a three-dimensional (3D) image space; creating a convex geometry surrounding a first group of data points, the convex geometry comprising planes with faces, where each plane only intersects planes from adjacent faces; for each plane, determining a first face; for each plane, identifying every data point associated with the first face; determining common identified data points; and, presenting the common identified data points as a representation of the first group of data points.
2. The method of claim 1 wherein determining the first face includes determining an outside face; wherein identifying every data point associated with the first face includes identifying every data point not faced by the plane's outside face; the method further comprising: prior to identifying every data point not faced by the plane's outside face, determining a first outside sub-face having a coplanar orientation with respect to a second outside sub-face; and, eliminating the second outside sub-face from the step of data point identification.
3. The method of claim 1 wherein creating the convex geometry includes: creating sets of coplanar sub-faces; and, associating each set of coplanar sub-faces with a corresponding plane.
4. The method of claim 3 wherein the sub-faces are triangular surfaces.
5. The method of claim 3 wherein each sub-face is defined by a corresponding group of coordinates; wherein associating each set of coplanar sub-faces with a corresponding plane includes: determining a cross product vector for coordinates associated with each sub-face; and, recognizing sub-faces having a common cross product vector as a plane.
6. The method of claim 5 wherein determining the first face includes: determining a cross product vector direction for each plane; in response to the cross-product vector direction, determining an outside face of each plane; and, wherein identifying every data point associated with the plane's first face includes identifying every data point not faced by the plane's outside face.
7. The method of claim 6 wherein identifying every data point not faced by the plane's outside face includes: calculating a sample vector to each data point in the input image from a sample point on each plane's outside face; determining the dot product between each sample vector and the cross product vector for each plane's outside face; and determining data points associated with dot products having a negative value.
8. The method of claim 7 wherein determining common identified data points includes only recording common identified data points.
9. The method of claim 7 further comprising: in response to recognizing sub-faces having a common cross product vector as a plane, using only one of the sub-faces to represent the outside face of the plane.
10. The method of claim 9 wherein determining a cross product for each sub-face includes: normalizing each cross product vector; determining normalized cross product vectors having the same value; and, wherein using only one of the sub-faces for the identification of data points includes using only one of the sub-faces sharing the same normalized cross product vector value.
11. The method of claim 10 further comprising: selecting an error tolerance; and, wherein determining normalized cross product vectors having the same value includes determining normalized cross product vectors having the same value within the selected error tolerance.
12. The method of claim 1 wherein receiving the input image with data points includes receiving data points depicting a 3D object comprising the first group of data points; and, wherein creating the convex geometry includes creating the convex geometry surrounding the 3D object.
13. The method of claim 1 wherein creating the convex geometry includes creating a first convex geometry surrounding the first group of data points; the method further comprising: creating a second convex geometry surrounding a first subset of the first group of data points. wherein determining common identified data points includes, for each convex geometry, determining common identified data points; the method further comprising: subtracting the determined common identified data points associated with the second convex geometry from the determined common identified data points associated with the first convex geometry to create a second subset of the first group data points; and, presenting the second subset of the first group of data points.
14. The method of claim 1 wherein creating the convex geometry surrounding a first group of data points includes creating a plurality of convex geometries, with each convex geometry surrounding a subset of the first group of data points; wherein determining common identified data points includes, for each convex geometry, determining common identified data points; the method further comprising: combining the determined common identified data points associated with each convex geometry into an overall collection of data points; and, presenting the overall collection of data points.
15. A non-transitory memory device storing a set of processor instructions for identifying data points in a three-dimensional (3D) image, the instructions comprising: receiving an input image with data points having coordinates in a 3D image space; creating a convex geometry surrounding a first group of data points, the convex geometry comprising planes with faces, where each plane only intersects planes from adjacent faces; for each plane, determining a first face; for each plane, identifying every data point associated with the first face; determining common identified data points; and, presenting the common identified data points as a representation of the first group of data points.
16. The instructions of claim 15 wherein determining the first face includes determining an outside face; wherein identifying every data point associated with the first face includes identifying every data point not faced by the plane's outside face; the instructions further comprising: prior to identifying every data point not faced by the plane's outside face, determining a first outside sub-face having a coplanar orientation with respect to a second outside sub-face; and, eliminating the second outside sub-face from the step of data point identification.
17. The instructions of claim 15 wherein determining the first face includes: determining a cross product vector direction for each plane; in response to the cross-product vector direction, determining an outside face of each plane; and, wherein identifying every data point associated with the plane's first face includes identifying every data point not faced by the plane's outside face.
18. The instructions of claim 17 wherein identifying every data point not faced by the plane's outside face includes: calculating a sample vector to each data point in the input image from a sample point on each plane's outside face; determining the dot product between each sample vector and the cross product vector for each plane's outside face; and determining data points associated with dot products having a negative value.
19. The instructions of claim 18 further comprising: in response to recognizing sub-faces having a common cross product as a plane, using only one of the sub-faces for the identification of data points.
20. The instructions of claim 15 wherein creating the convex geometry includes creating a first convex geometry surrounding the first group of data points; the instructions further comprising: creating a second convex geometry surrounding a first subset of the first group of data points. wherein determining common identified data points includes, for each convex geometry, determining common identified data points; the instructions further comprising: subtracting the determined common identified data points associated with the second convex geometry from the determined common identified data points associated with the first convex geometry to create a second subset of the first group data points; and, presenting the second subset of the first group of data points.
21. The instructions of claim 15 wherein creating the convex geometry surrounding a first group of data points includes creating a plurality of convex geometries, with each convex geometry surrounding a subset of the first group of data points; wherein determining common identified data points includes, for each convex geometry, determining common identified data points; the instructions further comprising: combining the determined common identified data points associated with each convex geometry into an overall collection of data points; and, presenting the overall collection of data points.
22. A system for identifying data points in a three-dimensional image, the system comprising: a non-transitory memory; a display having an interface to accept an input image with data points having coordinates in a three-dimensional (3D) image space; a user interface having an interface to accept commands for creating a convex geometry on the display surrounding a first group of data points, where the convex geometry comprises planes with faces, with each plane only intersects planes from adjacent faces; a data point identification software application stored in the memory, including processor executable instructions for accepting the convex geometry from the display, determining a first face for each plane, identifying every data point associated with the first face for each plane, determining common identified data points, and providing the common identified data points to the display for presentation as a representation of the first group of data points; and, a processor.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
DETAILED DESCRIPTION
[0033]
[0034] Processor 314 generally represents any type or form of processing unit capable of processing data or interpreting and executing instructions. Processor 314 may represent an application-specific integrated circuit (ASIC), a system on a chip (e.g., a network processor), a hardware accelerator, a general purpose processor, and/or any other suitable processing element. As is common with most computer system, processing is supported through the use of an operating system (OS) 316 stored in memory 302a.
[0035] System memory 302a generally represents any type or form of non-volatile (non-transitory) storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory 302a may include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system 300 may include both a volatile memory unit and a non-volatile storage device. System memory 302a may be implemented as shared memory and/or distributed memory in a network device. Furthermore, system memory 302a may store packets and/or other information used in networking operations.
[0036] In certain embodiments, exemplary computing system 300 may also include one or more components or elements in addition to processor 314 and system memory 302a. For example, computing system 300 may include a memory controller, an Input/Output (I/O) controller, and a communication interface (not shown), as would be understood by one with ordinary skill in the art. Further, examples of communication infrastructure include, without limitation, a communication bus (such as a Serial ATA (SATA), an Industry Standard Architecture (ISA), a Peripheral Component Interconnect (PCI), a PCI Express (PCIe), and/or any other suitable bus), and a network. For simplicity the communication between devices in system 300 is shown as using bus line 308, although in practice the devices may be connected on different lines using different communication protocols.
[0037]
[0038] Step 402 receives an input image with data points having coordinates in a 3D image space. As used herein, a data point or point is a set of coordinates in three dimensional space defined by x, y, and z coordinates.
[0039]
[0040] Returning to
[0041]
[0042] Returning to
[0043]
[0044] Returning to
[0045]
[0046] Returning to
[0047] In one aspect as mentioned above, determining the first face in Step 406 includes determining an outside face of a plane, and identifying every data point associated with the plane's first face in Step 408 includes identifying every data point not faced by the plane's outside face. Then, prior to identifying every data point not faced by the plane's outside face, Step 407a determines a first outside sub-face having a coplanar orientation with respect to a second outside sub-face. As explained below, coplanar sub-faces together form a face in the plane, and thus, a portion of the plane. Step 407b eliminates the second outside sub-face from the step of data point identification. Looking ahead to
[0048] Returning to
[0049]
[0050] Returning to
[0051] More explicitly, determining the first face in Step 406 includes the following substeps. Step 406a determines a cross product vector direction for each sub-face, and in response to the cross-product vector direction, the first face (e.g. outside face in this example) of each plane is determined in Step 406b. Step 408 then identifies every data point not faced by the plane's outside face.
[0052]
[0053]
[0054] Returning to
[0055]
[0056]
[0057] Returning to
[0058]
[0059] Returning to
[0060]
[0061] Returning to
[0062] In other aspects, Step 404 may create a plurality of convex geometries, with each convex geometry surrounding a subset of the first group of data points.
[0063]
[0064] Returning to
[0065] Below is listed pseudo-code substantially enabling the method of data point identification presented in
TABLE-US-00001 function findPointsInsideGeometry(geometry, points) { const planes = createPlanesFrom(geometry.triangles); deduplicate(planes); return findPointsInsidePlanes(planes, points); } function createPlanesFrom(triangles) { return geometry.triangles.map((triangle) => createPlaneFromCoplanarPoints(triangle.a, triangle.b, triangle.c) ); } // We expect the triangles that form the geometry to be constructed // such that their three points a, b and c are arranged // counter-clockwise when viewed from outside the shape. function createPlaneFromCoplanarPoints(a, b, c) { return { // This cross product gives us the a vector that is orthogonal // to the plane, pointing the direction that is outward wrt the // shape. normalVector: normalize(crossProduct(c − b, a − b)), samplePoint: a, } } // There are a small number of planes, and a huge number of points. // So it is worth spending compute time to eliminate duplicates that // came from multiple triangles that comprise a single face of the // geometry. function deduplicate(planes) { // Compare each plane to all the others. If multiple of them have // the same normal vector, only keep one. (Two faces of a convex // geometry cannot share the same normal vector.) // Look for an approximate match, because of rounding/truncation // errors in the math that creates the geometries and planes. } function findPointsInsidePlanes(planes, points) { return points.filter((point) => !planes.some((plane) => planeFaces(point, plane)) ); } function planeFaces(point, plane) { // Find a sample vector from the plane to the point. The dot product // will be positive or negative depending on whether that vector // points closer to the same direction as “outward” wrt the shape // than “inward”. const directionToPoint = point − plane.samplePoint; return dotProduct(directionToPoint, plane.normalvector) > 0; }
[0066] Below is an alternative explanation of the method for determining data points in a 3D image space.
[0067] 1. Create a face from coplanar triangles (i.e., sub-face) in the geometry;
[0068] a. Map each triangle to a normal vector that points outward, along with 1 sample point from the triangle. Those two things together are how a plane is represented;
[0069] 2. Deduplicate sub-faces;
[0070] a. Normalize all the cross product (normal) vectors (divide each of their coordinates by their length);
[0071] b. Eliminate all but one of each sub-face that shares the same normal vector;
[0072] 3. Find the points that are inside all the faces. For each point:
[0073] a. For each face in turn, create a vector from its sample point to this point;
[0074] b. If that dot product is positive for any face, eliminate this point;
[0075] c. If the dot product is negative for all faces, add it to the final list.
[0076] The data point identification method presented above is not limited to any particular convex geometry shape. In addition to cuboids, a cylinder may be used as a convex geometry. It is a natural and useful tool to give the users is a simple paintbrush. A circle on the screen follows their mouse, so that as the user drags, all the points that are visually within the circle are painted. To power such a tool a cylinder can be approximated using a circle, positioned under the user's mouse cursor, and oriented such that the end is pointing directly at the camera. Then, the data point identification algorithm presented above can be used to “find” all points that are visually within the circular cursor.
[0077]
[0078]
[0079] Another type of convex geometry is a sphere, with planar surfaces, that starts small when first initiated. As the mouse is dragged outward the sphere grows, painting anything inside it. As noted above, the convex geometry is not limited to any particular shape, as long as the plane faces only intersect adjacent plane faces.
[0080] A system and method have been provided for identifying data points in a 3D image. Examples of particular geometries and routines have been presented to illustrate the invention. However, the invention is not limited to merely these examples. Other variations and embodiments of the invention will occur to those skilled in the art.