Subsampling method for converting 3D scan data of an object for marine, civil, and architectural works into smaller densities for processing without CAD processing
11544419 · 2023-01-03
Inventors
- Evan Wingfield (Deerfield Beach, FL, US)
- Sophia Simpkins (Greer, SC, US)
- Kevin P. Monahan (Fort Lauderdale, FL, US)
- Michael T. Monahan (Winter Spings, FL, US)
Cpc classification
G06F30/12
PHYSICS
G06T19/00
PHYSICS
G06T3/40
PHYSICS
G06F30/13
PHYSICS
International classification
G06T3/40
PHYSICS
G06F30/12
PHYSICS
Abstract
The point cloud scan image data first is structured with a x-y-z coordinate system, then split into smaller Cluster Bounds (CB) volumes and a CB x-y-z is imposed on the CB centroid. The Euclidean x-y-z distance (ED) is calculated for each data point. Only points within Radial Distance (RD cylinder) are retained/processed. Data points within RD are weighted; points closer to centroid having higher weights. Each data point has Weighted Value WV (square of the inverse of the x-y-z distance). Each x, y, z has Weighted Average (WAV) per axes. WAV is sum of each original point coordinate times WV, divided by sum all WVs. Resultant is one subsampled point per axis. One WAV per CB is selected based upon axis nearly orthogonal to x, y, z WAV points. All CBs subsampled in parallel. Subsampled output comma separated coordinate file for CAD program.
Claims
1. A pre-processing subsampling method for converting 3D imaging scan data having a high-density data set of a plurality of 3D data points into a smaller density data set without engaging computer-aided design (CAD) programs comprising: selecting a subsampling density; selecting an x, y, z coordinate system for the subsampling process encompassing at least a portion of the 3D scan data; segmenting the portion of the 3D scan data into a plurality of cubic or rectangular subsample regions oriented with the selected x, y, z coordinate system wherein each respective subsample region has corresponding constituent 3D scan data points therein; applying a subsampling x, y, z coordinate system (“x, y, z SubSys”) at a centroid of each subsample region; applying a corresponding cylindrical region coaxial with a respective x, y, z SubSys axis and defining a corresponding x-axis cylinder, y-axis cylinder and z-axis cylinder in the subsample region; constituent data points within each respective x-axis, y-axis and z-axis cylinder defined as subsampling C-points for the subsample region; obtaining the Euclidean distance (ED) of each C-point to the respective x, y, z SubSys axis (EDx1. . . n, EDy1. . . n, EDz1. . . n); computing a weighted value (“WV”) of each corresponding C-point EDx1. . . n, EDy1. . . n, EDz1. . . n to its respective x, y, z SubSys axis such that C-points closer to the respective x, y, z SubSys axis are correlatively weighted greater than C-points farther away from the respective x, y, z SubSys axis; computing a weighted average (“WAV”) of all C-points in the corresponding x-axis, y-axis and z-axis cylinder (WAVx-axis, WAVy-axis, WAVz-axis points) on a x, y, z SubSys axis basis; determining which corresponding x, y and z SubSys axis is nearly orthogonal to WAVx-axis, WAVy-axis, WAVz-axis points and identifying a WAV on the nearly orthogonal x, y, z axis as a single subsampled output (SSO) for the subsample region; and processing substantially in parallel the SSO point for each subsample region.
2. The pre-processing subsampling method as claimed in claim 1 including outputting all SSO points for all subsample regions to the CAD program.
3. The pre-processing subsampling method as claimed in claim 1 wherein computing the weighted value (WV) of each corresponding C-point EDx1. . . n, EDy1. . . n, EDz1. . . n includes obtaining the square of the inverse of ED for each corresponding C-point EDx1. . . EDxn, EDy1. . . EDyn, and EDz1. . . EDzn.
4. The pre-processing subsampling method as claimed in claim 1 wherein computing the weighted average WAVx-axis, WAVy-axis, and WAVz-axis includes, for each x-axis, y-axis and z-axis cylinder, calculating the sum of each C-point coordinate EDx1. . . EDxn, EDy1. . . EDyn, and EDz1. . . EDzn multiplied by its weighted value WVx1. . . WVxn, WVy1. . . WVyn, and WVz1. . . WVyn, and a resultant sum being divided by the sum of all the weighted values WVx1+. . . WVxn, WVy1+. . . WVyn, and WVz1+. . . WVzn.
5. The pre-processing subsampling method as claimed in claim 1 wherein selecting the subsampling density includes selecting one subsampling density of a plurality of subsampling densities including a coarse density, a medium density and a fine density, wherein the coarse density includes defining m units within a selected axial span encompassing a span of the plurality of 3D data points, wherein the medium density includes defining n units within the selected axial span encompassing the span of the plurality of 3D data points, wherein the fine density includes defining o units within the selected axial span encompassing the span of the plurality of 3D data points, and wherein m>n>o.
6. The pre-processing subsampling method as claimed in claim 5 wherein selecting the sub sampling density includes a user selection of sub sampling density.
7. The pre-processing subsampling method as claimed in claim 5 wherein each subsample region in the plurality of subsample regions includes a predefined number of units.
8. The pre-processing subsampling method as claimed in claim 7 wherein the SSO is further processed by determining either the center of mass or the spatial center of constituent data points on non-orthogonal x, y, z axes, whereby the SSO includes the nearly orthogonal WAVx-axis, WAVy-axis, or WAVz-axis and a center of mass coordinate or a spatial center coordinate from the constituent data points on non-orthogonal x, y, z axes.
9. The pre-processing subsampling method as claimed in claim 8 wherein applying the corresponding cylindrical region coaxial with the respective x, y, z SubSys axis to obtain the corresponding x-axis cylinder, the y-axis cylinder and the z-axis cylinder includes: providing a coarse cylindrical region having a radius of p units, providing a medium cylindrical region having a radius of q units, providing a fine cylindrical region having a radius of r units, wherein p>q>r; and selecting the coarse, medium, and fine cylindrical region based upon the coarse, medium or fine selection for the subsampling density; applying the selected coarse, medium, and fine cylindrical region while applying the corresponding cylindrical region coaxial to obtain the corresponding for the x-axis cylinder, the y-axis cylinder and the z-axis cylinder.
10. A pre-processing subsampling method for converting 3D imaging scan data having a high-density data set of a plurality of 3D data points into a smaller density data set without engaging computer-aided design (CAD) programs comprising: selecting a subsampling density; selecting an x, y, z coordinate system for the subsampling process encompassing at least a portion of the 3D scan data; segmenting the portion of the scan data into a plurality of cubic or rectangular subsample regions oriented with the selected x, y, z coordinate system wherein each respective subsample region has corresponding constituent 3D scan data points therein; applying a complementary subsampling x, y, z coordinate system (“x, y, z SubSys”) at a centroid of each subsample region of the plurality of subsample regions; applying a corresponding cylindrical region coaxial with a respective x, y, z SubSys axis and defining a corresponding x-axis cylinder, y-axis cylinder and z-axis cylinder in the subsample region; constituent data points within each respective x-axis, y-axis and z-axis cylinders defined as subsampling C-points for the subsampling region; obtaining the Euclidean distance (ED) of each C-point to the respective x, y, z SubSys axis (EDx1. . . n, EDy1. . . n, EDz1. . . n); computing a weighted value (“WV”) of each corresponding C-point EDx1. . . n, EDy1. . . n, EDz1. . . n to its respective x, y, z SubSys axis such that C-points closer to the respective x, y, z SubSys axis are correlatively weighted greater than C-points farther away from the respective x, y, z SubSys axis wherein:
WVx1=(1/EDx1)*(1/EDx1) . . . WVxn=(1/EDxn)*(1/EDxn)
WVy1=(1/EDy1)*(1/EDy1) . . . WVyn=(1/EDyn)*(1/EDyn)
WVz1=(1/EDz1)*(1/EDz1) . . . WVzn=(1/EDzn)*(1/EDzn) computing a weighted average (“WAV”) of all C-points in the corresponding x-axis, y-axis and z-axis cylinder (WAVx-axis, WAVy-axis, WAVz-axis points) wherein:
WAVx-axis=((EDx1*WVx1)+(EDx2*WVx2)+. . . (EDxn*WVxn))÷(WVx1+WVx2+. . . WVxn)
WAVy-axis=((EDy1*WVy1)+(Edy2*WVy2)+. . . (EDyn*WVyn))÷(WVy1+WVy2+. . . WVyn)
WAVz-axis=((EDz1*WVz1)+(EDz2*WVz2)+. . . (EDzn*WVzn))÷(WVz1+WVz2+. . . WVzn); determining which corresponding x, y and z SubSys axis is nearly orthogonal to WAVx-axis, WAVy-axis, WAVz-axis points and identifying the respective WAV on the nearly orthogonal x, y, z axis as a single subsampled output (SSO) for the subsample region; and processing substantially in parallel the SSO point for each subsample region.
11. The pre-processing subsampling method as claimed in claim 10 including outputting all SSO points for all subsample regions to the computer-aided design program.
12. The pre-processing subsampling method as claimed in claim 10 wherein selecting the subsampling density includes selecting one subsampling density of a plurality of subsampling densities including a coarse density, a medium density and a fine density, wherein the coarse density includes defining m units within a selected axial span encompassing a span of the plurality of 3D data points, wherein the medium density includes defining n units within the selected axial span encompassing the span of the plurality of 3D data points, wherein the fine density includes defining o units within the selected axial span encompassing the span of the plurality of 3D data points, and wherein m>n>o.
13. The pre-processing subsampling method as claimed in claim 12 wherein selecting the subsampling density includes a user selection of subsampling density.
14. The pre-processing subsampling method as claimed in claim 12 wherein each subsample region in the plurality of subsample regions includes a predefined number of units.
15. The pre-processing subsampling method as claimed in claim 14 wherein the SSO is further processed to change the SSO coordinates for both non-orthogonal x, y, z axes based upon either a center of C-point mass or a spatial center of C-point in respective non-orthogonal x, y, z axes.
16. The pre-processing subsampling method as claimed in claim 15 wherein applying the corresponding cylindrical region coaxial with the respective x, y, z SubSys axis to obtain the corresponding x-axis cylinder, the y-axis cylinder and the z-axis cylinder includes: providing a coarse cylindrical region having a radius of p units, providing a medium cylindrical region having a radius of q units, providing a fine cylindrical region having a radius of r units, wherein p>q>r; and selecting the coarse, medium, and fine cylindrical region based upon the coarse, medium or fine selection for the subsampling density; applying the selected coarse, medium, and fine cylindrical region while applying the corresponding cylindrical region coaxial to obtain the corresponding for the x-axis cylinder, the y-axis cylinder and the z-axis cylinder.
17. A pre-processing subsampling method for converting 3D imaging scan data having a high-density data set of a plurality of 3D data points into a smaller density data set without engaging computer-aided design (CAD) programs comprising: selecting a subsampling density; selecting an x, y, z coordinate system for the subsampling process encompassing at least a portion of the 3D scan data; segmenting the portion of the scan data into a plurality of subsample regions oriented with the selected x, y, z coordinate system wherein each subsample regions has corresponding constituent 3D scan data points therein; applying a sub sampling x, y, z coordinate system (“x, y, z SubSys”) at a centroid of each subsample region oriented with the selected x, y, z coordinate system; applying a corresponding cylindrical region coaxial with a respective x, y, z SubSys axis thereby defining subsampling C-points consisting of constituent data points within respective corresponding x-axis, y-axis and z-axis cylinders; obtaining the Euclidean distance (ED) of each C-point to its respective x, y, z SubSys axis (EDx1. . . n, EDy1. . . n, EDz1. . . n); computing a weighted value (“WV”) of each corresponding C-point EDx1. . . n, EDy1. . . n, EDz1. . . n to its respective x, y, z SubSys axis such that C-points closer to the respective x, y, z SubSys axis are correlatively weighted greater than C-points farther away from the respective x, y, z SubSys axis; computing a weighted average (“WAV”) of all C-points relative to its corresponding x-axis, y-axis and z-axis cylinder as WAVx-axis, WAVy-axis, WAVz-axis points; determining which corresponding x, y and z SubSys axis is nearly orthogonal to WAVx-axis, WAVy-axis, WAVz-axis points and identifying the respective WAV on the nearly orthogonal x, y, z axis as a single subsampled output (SSO) for the subsample region, the SSO being one of the WAVx-axis, WAVy-axis, WAVz-axis points on the nearly orthogonal x, y, z axis; and processing substantially in parallel the SSO point for each subsample region.
18. The pre-processing subsampling method as claimed in claim 17 including outputting all SSO points for all subsample regions to the CAD program.
19. The pre-processing subsampling method as claimed in claim 17 wherein computing the weighted value (WV) of each corresponding C-point EDx1. . . n, EDy1. . . n, EDz1. . . n includes obtaining the square of the inverse of ED for each corresponding C-point EDx1. . . EDxn, EDy1. . . EDyn, and EDz1. . . EDzn.
20. The pre-processing subsampling method as claimed in claim 17 wherein computing the weighted average WAVx-axis, WAVy-axis, and WAVz-axis includes, for each x-axis, y-axis and z-axis cylinder, calculating the sum of each C-point coordinate EDx1. . .EDxn, EDy1. . .EDyn, and EDz1. . .EDzn multiplied by its weighted value WVx1. . . WVxn, WVy1 . . . WVyn, and WVz1. . . WVyn, and a resultant sum being divided by the sum of all the weighted values WVx1+. . . WVxn, WVy1+. . . WVyn, and WVz1+. . . WVzn.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) The accompanying figures, where like reference numerals refer to identical or functionally similar elements throughout the separate views and which together with the detailed description below are incorporated in and form part of the specification, serve to further illustrate various embodiments and explain various principles and advantages all in accordance with the present invention.
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
DETAILED DESCRIPTION
(11) While the specification concludes with claims defining the features of the invention that are regarded as novel, it is believed that the invention will be better understood from a consideration of the following description in conjunction with the drawing figures, in which like reference numerals are carried forward. It is to be understood that the disclosed embodiments are merely exemplary of the invention, which can be embodied in various forms. It should be noted that although the flow chart in
(12) Initially, in connection with
(13) In setting up the point cloud scan data file, the orientation of the original point cloud is aligned with desired x, y and z axes prior to importing the file into the pre-processing subsampler. The aligned point cloud is saved or exported to one of the supported coordinate file types: .csv, .txt, .pts, or .xyz. In one embodiment, the coordinates need to be exported as “comma separated” into the operational subsampler. Thereafter, the file is imported into pre-processing subsampler and the user defines a subsampling density, and whether automatic or custom sample planes are to be used.
(14)
(15) In the subsampling algorithm, the point cloud is split into smaller volumes referred to as Cluster Bounds (CB), with the sample planes centered within each Cluster Bound. Each Cluster Bound is analyzed individually, and one subsampled point will be produced per Cluster Bound. Further detail of this initial process is discussed later in connection with
(16)
(17) In connection with
(18) Stated otherwise, the method applies 3 cylindrical regions on the cubic scan data, one cylinder per axis, by imposing the Radial Distance (RD) limit to all C-points (C-points being all data points in the cube or CB). This RD or cylindric processing is done by obtaining the Euclidean distance (ED) of each C-point to the respective x, y, z SubSys axis (EDx1. . . n, EDy1. . . n, EDz1. . . n). These cylindrical regions are coaxial with a the cubic's x, y, z SubSys axes. The result being referred to as x-axis, y-axis and z-axis cylinders, each with a portion of the scan data therein. Each scan data point in the x, y, z cylinders defines a subsampling C-point for the cubic region. C-points outboard of the RD or x, y, z cylinders are ignored.
(19) Explained differently, for each Cluster Bound (CB) in the cluster array (this array being all scan data points to be processed), the CB Centerline is determined along each axis (x, y, z) where a CB Axial Centerline is defined as a line parallel to the corresponding cluster array axis and passing through the center of the Cluster Bound. This is graphically represented in
(20) Along each axis (x, y, z), for each C-point in each Cluster Bound (CB), the subsampler engine determines if the ED distance to the point is greater or less than the corresponding Radial Search Distance and creates an array of Distance Multipliers. For each C-point, if the C-point distance is greater than the Radial Search Distance, the multiplier is set to zero. Otherwise, the multiplier is set to 1. For each axis, the previously computed ED distance array is multiplied by its corresponding Distance Multiplier array (the 0 or 1 multiplier), with the result being that the distance value of points lying outside of the Radial Search Distance is set to zero, while the distance values of points within the Radial Search Distance are unchanged. This ensures that only the points nearest the Cluster Axial Centerline(s) contribute to the final subsampled point. Stated otherwise, C-points outboard of the x, y, z cylinders are ignored by the subsampler.
(21) In a further enhancement, the RSD can be pre-set based upon the total length of the point cloud to the processed (the physical length of the object scanned) and the coarse, medium or fine subsample selection made by the user. A coarse setting referring to larger CBs compared to a fine setting. As discussed below, the user can also set a custom subsampling control on the system. Alternatively, the user could set both the coarse, medium or fine subsample selection and the RSD size for thee data capturing cylinder about each axis in the CB.
(22)
(23) After C-points inboard the RSDs or axial cylinders are identified, the subsampler engine computes (a) a Weighted Value (WV) for each cylinder captured C-point and (b) the Weighted Average Value (WAV) for all captured C-points in the RSD or cylinder on a per axis basis. See
(24) There are several algorithms to determine the nearly orthogonal axis to the plane formed by WAVx-axis, WAVy-axis and WAVz-axis. One methodology is to select the highest absolute numeric value of WAVx-axis, WAVy-axis and WAVz-axis (ignoring the negative value of WAVx-axis, WAVy-axis and WAVz-axis). Since all the WAV points fall on a coordinate axis, x-axis, y-axis and z-axis, another method processes the orthogonal projection from each WAVx-axis, WAVy-axis and WAVz-axis data point to the opposing axes and select the shortest orthogonal projection from all orthogonal projections. For example, considering WAVz-axis data, one would obtain the orthogonal projection from WAVx-axis to the z-axis (WAVx-p1z) and obtain orthogonal projection from WAVy-axis to the z-axis (WAVy-p1z). The process repeats to obtain WAVx-p1y, WAVy-p1x, WAVz-p1x and WAVz-p1y. The lowest value of all orthogonal projections is the nearly orthogonal axis. If the absolute value of WAVx-axis, WAVy-axis and WAVz-axis are equal, then any WAV point is the SSO. If the absolute values of two WAV data points are equal (forming an isosceles plane), then the orthogonal projection values are equal. Stated otherwise, IF WAVx-axis=WAVy-axis, THEN WAVx-p1z=WAVy-p1z, and the nearly orthogonal axis is z-axis and the SSO is WAVz-axis. Lastly, since the WAV point collection has numerous orthogonal projections to the opposing WAVx-axis, WAVy-axis and WAVz-axis points, one selects each WAV and determines the orthogonal projections to the opposing x, y, z axis. The selected most orthogonal axis is the shortest orthogonal projection to the opposing x, y, z axes. Another method to determine the nearly orthogonal axis locates the centroid of the surface for defined by WAVx-axis, WAVy-axis and WAVz-axis and the orthogonal projections to x-axis, y-axis and z-axis could be computed. The smallest value of these orthogonal projections points to the nearly orthogonal axis.
(25) Stated otherwise, the process computes a weighted value (WV) for each C-point EDx1. . . n, EDy1. . . n, EDz1. . . n in each x, y, z cylinder. The sub sampling algorithm for the weighted value assigns a weight to the C-point such that C-points closer to the respective x, y, z SubSys axis are correlatively weighted greater than C-points farther away from the respective x, y, z SubSys axis. The following Formula 1 is instructive.
(26) TABLE-US-00001 TABLE WV FORMULA WVx1 = (1/EDx1)*(1/EDx1) . . . WVxn = (1/EDxn)*(1/EDxn) WVy1 =(1/EDy1)*(1/EDy1) . . . WVyn =(1/EDyn)*(1/EDyn) WVz1 = (1/EDz1)*(1/EDz1) . . . WVzn = (1/EDzn)*(1/EDzn)
(27) Once the weighted value (WV) for each C-point in the x, y, z, cylinder is computed, the process computes a weighted average (WAV) of all C-points in the x, y, z cylinder. See
(28) TABLE-US-00002 TABLE WAV FORMULA WAVx-axis = ((EDx1*WVx1) + (EDx2*WVx2) + . . . (EDxn*WVxn)) ÷ (WVx1 + WVx2 + . . . WVxn) WAVy-axis = ((EDy1*WVy1) + (Edy2*WVy2) + . . . (EDyn*WVyn)) ÷ (WVy1 + WVy2 + . . . WVyn) WAVz-axis = ((EDz1* WVz1) + (EDz2*WVz2) + . . . (EDzn*WVzn)) ÷ (WVz1 + WVz2 + . . . WVzn)
(29) The process then determines which corresponding x-axis, y-axis and z-axis is most nearly orthogonal to the WAVx-axis, WAVy-axis, WAVz-axis points. See
(30) As a further explanation in one embodiment of the invention, calculating weighting values includes, for each CB, and for each axis (x, y, z), calculating the reciprocal of the ED distance values for each C-point with the RSD or cylinder, and then squaring that ED reciprocal to determine the Weighted Value WV of each point in the truncated CB (that is, truncated by the RSD or cylinder). See WV equation in
(31) With respect to the weighted average WAV equation in
(32) With respect to
(33) A=angle WAVx-axis vs. WAVy-axis; B=angle WAVx-axis vs. WAVz-axis, and C=WAVy-axis vs. WAVz-axis, and A<B and B<C and A<C, then angle A, WAVx-axis vs. WAVy-axis, has the smallest angular relationship compared to other angular relationships. Stated otherwise, WAVz-axis and WAVx-axis are opposing axes to WAVy-axis; WAVy-axis, WAVz-are opposing axes to WAVx-axis; and WAVy-axis and WAVx-axis are opposing axes to WAVz-axis. Another method to determine the nearest orthogonal axis is to determine the imaginary orthogonal projections from WAV to each opposing axis. If the numerical value of the orthogonal projections WAVx-axis compared to opposing WAVy-axis, WAVz-axis is LESS THAN orthogonal projections WAVy-axis compared to its opposing axes and is further LESS THAN orthogonal projections WAVz-axis compared to its opposing axes, then the shortest orthogonal projections points to the nearest orthogonal axis.
(34) Also, the nearest orthogonal axis determination, based upon the smallest angular relationship of each WAV to the opposing axis may select nearly smallest angle wherein the nearly smallest angle is no more than 10 degrees larger than the smallest angular relationship.
(35) In the highly unlikely event all three WAV values are equal, the subsampler defaults to any pre-set axis, for example x-axis because all orthogonal projection values to all axes are equal. The pre-set default is not relevant to the outcome because any one of the three WAV would adequately represent the best CB subsampled output SSO. If two of the three WAV values are equal, the subsampler outputs the WAV value which is the largest of WAVx-axis, WAVy-axis and WAVz-axis.
(36) Once the SSO-WAV in Cluster CB is selected, the selected CB SSO-WAV from each Cluster must be normalized to all other CBs in the entire point cloud being subsampled. Hence, each CB SSO-WAV data in each CB must be re-calibrated to the entire array of CBs in the entire point cloud processed. The following example normalizes two CBs to each other. If SSO WAVx-axis is −28.6 units in CB 120 (CB 120 having an x-axis coordinate 20 of the 40 total CBs on the point cloud x-axis), and each CB has a maximum x-axis span of 100 units (from the CB origin or center-point, 50 units on either side of the x-axis), then the SSO or subsampled output for CB 120 is “point cloud normalized” to x-axis as −28.6 (to the left of the point cloud x-y origin). If the left-side adjacent CB 121 also has the −28.6 unit WAVx-axis, then the point cloud normalized SSO is −128.6 units for CB 121.
(37)
(38) The subsampler engine then prepares the data for filtering. Critical data is compiled to an array in preparation for filtering of the calculated weighted average points in order to determine the final subsampled points. In this manner, the selected WAV from each Cluster Bound (CB) must be normalized to the entire point cloud being subsampled. Hence, each CB WAV data in each CB must be re-calibrated to the entire array of CBs in the entire point cloud processed. The Sample Data Array (SDA) below computes this normalization. The SDA is created in which each element of the array is representative of a single Cluster. Within each element, values are stored as shown in Table 3 below.
(39) TABLE-US-00003 TABLE 3 Sample Data Array The center of the cluster in the X direction The center of the cluster in the Y direction The center of the cluster in the Z direction The Relative Range of the cluster in the X direction - RRx The Relative Range of the cluster in the Y direction - RRy The Relative Range of the cluster in the Z direction - RRz The weighted average point for the cluster in the X direction (WAVx-axis) The weighted average point for the cluster in the Y direction (WAVy-axis) The weighted average point for the cluster in the Z direction WAVz-axis)
(40) This Sample Data Array (“SDA”) array contains all of the data required to define the subsampled points “SSPt”—it is passed to the filtering logic in the following sections. Using the Sample Data Array above, the SSPt is the SSO described earlier.
(41) Filtering could be (i) Filtering Points for Global Subsample or (ii) Filtering Points for Planar Subsample. As for filtering points for global subsample If the user initially selected “Process Entire Cloud” (“PEC”) (explained later in connection with
(42) The filtering logic assigns an x, y, and z coordinate value for each element within the Sample Data Array, resulting in a single Subsample Point for each element (Cluster Bound or CB). For each element in the Sample Data Array, the minimum Relative Range is determined. The spatially Weighted Average WAV point corresponding to the axis with the minimum relative range is assigned as the corresponding coordinate in the Sample Point. The remaining two axis coordinates are defined as the center point of the cluster along those corresponding axes. The sample point for each Cluster is added to a Subsampled Point Array.
(43)
(44) With respect to filtering points for planar subsample, the user has earlier selected “Process Custom Sections.” For each element in the Sample Data Array a Subsample Point is determined. Each subsample point is an array consisting of a single element containing an x coordinate, a y coordinate, and z coordinate as shown above in the global subsample process.
(45) The filtering logic assigns an x, y, and z coordinate value for each element within the Sample Data Array, resulting in a single Subsample Point for each element (SSO for each CB). For each CB element in the Sample Data Array, the minimum Relative Range is determined. For the user-selected axis (x, y, z) the corresponding Sample Point coordinate is set to the value of the Cluster Center along that axis. Then, it is determined which of the remaining two axes has the minimum Relative Range. For this minimum Relative Range axis, the corresponding Sample Point Coordinate is set to the corresponding weighted average point value WAV. The remaining axis is set to the corresponding Cluster Center along that axis. The sample point for each Cluster is added to a Subsampled Point Array.
(46) Cleaning the subsampled array is also provided in this embodiment. The Subsampled Point Array is checked and cleaned prior to saving to the subsampled project. If any element of the array (each CB element representing a single WAV point of the subsample) is found to have a null value—that element is removed from the array. If a planar subsample was selected, the Subsampled Point Array is checked to verify that all points are located on planes corresponding to the specified user-input planar sample coordinates. Points which do not fall on these planes are removed from the array. The cleaned Subsample Data Array is written to a database table within the associated Project database. This database may be later accessed for creation of output files.
(47) The max-min process may be better referred to as determining the spatial center of the scan data points. The spatial center max-min process discussed in connection with
(48) Another method for determining the SSO for a CB (rather than the midpoint of the non-selected axes (axes other than the nearly orthogonal axis) determined by the max-min formulas above (
(49) Rather than use a center of mass algorithm, a density algorithm can be employed.
(50) In this embodiment of the invention, once one or multiple subsamples have been computed, they may be accessed and output as a useable file. To create an output file, the user selects one or multiple subsamples from the available project subsamples from a pull-down menu. The user then selects a filetype, location, and name for the output file. The Subsampled Point data from all of the selected project subsamples are read from the subsampling database and compiled into a single set of data. This data is then written to the user-defined file according to the filetype selected. Once a subsample file has been created, the user may import that file directly to 3D CAD software or other third-party software for analysis or further processing.
(51) The following Software Step Table provides additional explanation of the process.
(52) TABLE-US-00004 Software Step Table 1. # Get maximum and minimum dimensions along each axis # Determine total point cloud length along each axis 2. # Set up plane spacing 3. “““Determines the coordinates for plane locations given a minimum coordinate, maximum coordinate, and spacing between planes””” 4. # Determine the bounds in each direction # Set coordinates and spacing # Create 'slices' in the main processing direction “““Sets the bounds for a set of coordinates with a given spacing””” 5. When _sample_current_input( ) is called next, it will call_clean_input, which is what filters out the PCID that lies outside the min/max bounds. 6. # Create bins for splitting blocks # Group point data by blocks # Create lists of block points and bins # Convert to arrays and save as class variables 7. # Set up arrays for upper and lower boundaries of each block # Determine block midpoints # Determine max dimension of array # Create base array (per-block array) # # Create full array (per-point-per-block) # Create zeroing arrays for finding distances from block center # Calculate difference between each point and the center of the block xyzs = blocks # Determine point distances from block centerlines along each axis # Make appropriate delta zero for each axis in order to calculate distance from block center on that axis # Square all values to prepare for distance calculation # Take square root of the sum of squared values to calculate the distance for each point to the block center line # Make the distances arrays 8. # Determine multipliers for distances based on if the distance is greater or less than the search radius. # If the distance is less than the search radius, the point is kept and so the multiplier is set to 1 # Otherwise, the multiplier is set to zero 9. # Multiply by inverse square of the distance (ensures nearer points are weighted more heavily) 10. # Apply weighting to block points # Multiply each block by its weighting values # Calculate sum for each set of block weights # Calculate sum for each set of weighting values # Calculate weighted average for each point in each direction 11.# ----- Prepare data metrics to be used for filtering points from subsample ----- # Determine range of points relative to block width in each dimension 12. # Compile subsample data to a dataframe # remove zero relatives or remove ″blocks″ where the relative point density in all directions is zero (RRx = RRy = R). 13. Code eliminates/drops entire Clusters where the Relative Range of the cluster in the X, Y, and Z directions computed in Step 12 are all zero. Logically this step is happening in between steps 11 and 12.
(53) In summary regarding the subsampling outputs, once the subsampling is completed, the user can request the output file in any of the above-mentioned supporting file formats. The supported file formats are simple comma separated coordinate files that can be imported into most cad programs. Once the subsampling is completed, the user can request the output file in any of the above-mentioned supporting file formats. The supported file formats are simple comma separated coordinate files that can be imported into most cad programs. In a preferred embodiment, nearly all of the process steps operate on the input scan image data in parallel, that is, as a single process. Reduced file can be stored for BIM/Digital Twin or used for further processing such as 2D drawings, surface modeling/reverse engineering, taking measurements, interference checks, etc. The advantages of the pre-processing sampler include elimination or significant reduction of noise, the subsampling method produces a structured scan, reduces file size of the point cloud scan data, increases accuracy, and the pre-processing sampler can be run on a laptop or ordinary desktop.
(54)
(55)
(56)
(57)
(58) In one embodiment of the present invention, the preliminary processing of the point cloud data is discussed below. This preliminary processing occurs prior to the subsampling operations discussed above in connection with
(59) Prior to running the subsampler engine discussed in connection with
(60) The user then sets the “Process Type” dropdown to either “Process Entire Cloud” or “Process Custom Sections”. If “Process Custom Sections” is selected, the user sets the “Select Process Axis” dropdown to ‘X’, ‘Y’, or ‘Z’, corresponding to the axis along which planar sets of points should be sampled. Once an axis is selected, the user enters a set of coordinates in the “Input Section Coordinates” field. Coordinates are entered as a comma-separated list of numerical values. The Custom Selection permits the user to select only a part of the point cloud scan image data to be processed by the subsampler.
(61) Prior to subsampling (see
(62) The subsampler engine in this embodiment determines subdivision and sample plane spacing in the following manner. For each x, y, z direction, a “Spacing Value” is set based on the point cloud dimensions and user input. This is the same Spacing Value discussed above in the “estimating orthogonality of the axes.” If the user selected ‘Coarse’, ‘Medium’, or ‘Fine’ density, the coordinate values along each axis are read and a distribution of the spacing between points is determined. The Spacing Value is then set to a confidence interval of the distribution, with successively smaller confidence interval progressing from ‘Coarse’ to ‘Fine’. If a custom density value was entered, then the spacing for each axis is determined by: Spacing.sub.i=Length.sub.i [divided by] Density.
(63) The subsampler engine then sets the sample plane (SmPlane) coordinates. For each x, y, z direction, a list of numerical values is created, beginning with the corresponding axis minimum (“min”) value and ending with the corresponding axis maximum value with each successive value being one axis Spacing Value (“space”) greater than the prior value.
(64) TABLE-US-00005 TABLE Sample Plane Equation SmPlanes = [min’m.sub.i , min’m.sub.i + space.sub.i , min’m.sub.i + 2 * space.sub.i , max’m.sub.i]
(65) If the user selected Process Custom Sections, the planes for the user selected Process Axis are set to the user selected Section Coordinates. Unitization of the input and selected point cloud proceeds in a similar spacing as set forth above in connection with the pre-set selections (coarse, etc.).
(66) The subsampler engine then sets bounds or data boundaries for the Cluster Bounds CB. For each x, y, z direction, a list of numerical values is created with values offset from the previously defined Sample Planes by one-half (½) of the corresponding axis spacing in either direction from the plane, such that the Cluster Bound coordinates fall midway between each successive Sample Plane. For example, the Sample Plane origins coincide with the centroid of the CB. See
(67) The subsampler engine then loads in the point cloud data. If the user selected “Process Entire Cloud” then the x, y, z coordinate data for the entire cloud is read from the input project database and loaded into the subsampler memory for processing. If the user selected “Process Custom Sections” then only the data within the user-selected bounds is loaded. This is the 3D image data to the subsampled. The to-be-sampled input data is loaded as an array of [x y z] values in to the subsampler engine, with each element of the array corresponding to a single point in the cloud. The points within this array are organized into an array of “Clusters”—such that all points within the Cluster lie between pairs of successive Cluster Bounds CBs along each axis. This is better represented by the following formula or pseudo-code.
(68) TABLE-US-00006 Cluster Bound Code Table Points in Cluster = array( [point a = [ x_bound .sub.i < X < < x_bound .sub.i−1 , y_bound .sub.j < Y < < y_bound.sub.j−1 , z_bound.sub.k < Z < < z_bound .sub.k−1 , [point b, point c, . . .]
(69) The CB Array is then an array in which each CB element of the array is a “Cluster” of points. Each CB is itself an array of [x y z] coordinates, with each data point element in the CB Cluster representing a single point within the point cloud. This is graphically represented by
(70) Thereafter, the subsampler engine determines the point distances from CB axes as explained earlier in connection with
(71) Although the subsample regions described above discuss cubic and rectangular regions, other subsample regions could be utilized. The processing time and data storage parameters are effected by other interlocking two-dimensional shapes or closed figures such as circles, squares, rectangles, rhombus, etc. and interlocking three-dimensional shapes cube, cuboid, cone, sphere and cylinder. The degree of interlock between these subsample regions effect the precision of the subsampling method herein. However, locating the centroid of such shapes, imposing a subsampling coordinate system thereon and applying the weighted average concepts herein may achieve the stated goal of pre-processing 3D scan data such that the SSO output can be used by non-CAD computer systems.
(72) The claims appended hereto are meant to cover all modifications and changes within the scope and spirit of the present invention.