<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Phys.</journal-id>
<journal-title>Frontiers in Physics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Phys.</abbrev-journal-title>
<issn pub-type="epub">2296-424X</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1477381</article-id>
<article-id pub-id-type="doi">10.3389/fphy.2024.1477381</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Physics</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Rapid 3D reconstruction of constant-diameter straight pipelines via single-view perspective projection</article-title>
<alt-title alt-title-type="left-running-head">Yao et al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fphy.2024.1477381">10.3389/fphy.2024.1477381</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Yao</surname>
<given-names>Jiasui</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/visualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Cheng</surname>
<given-names>Xiaoqi</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="aff" rid="aff3">
<sup>3</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2765434/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/funding-acquisition/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/project-administration/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Tan</surname>
<given-names>Haishu</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="aff" rid="aff3">
<sup>3</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/supervision/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Li</surname>
<given-names>Xiaosong</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2133312/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/supervision/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Zhao</surname>
<given-names>Hengxing</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="aff" rid="aff3">
<sup>3</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>School of Electronic Information Engineering</institution>, <institution>Foshan University</institution>, <addr-line>Foshan</addr-line>, <country>China</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Guangdong Provincial Key Laboratory of Industrial Intelligent Inspection Technology</institution>, <institution>Foshan University</institution>, <addr-line>Foshan</addr-line>, <country>China</country>
</aff>
<aff id="aff3">
<sup>3</sup>
<institution>School of Mechatronic Engineering and Automation</institution>, <institution>Foshan University</institution>, <addr-line>Foshan</addr-line>, <country>China</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2047201/overview">Zhe Guang</ext-link>, Georgia Institute of Technology, United States</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2268497/overview">Shengwei Cui</ext-link>, Hebei University, China</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2836256/overview">Youchang Zhang</ext-link>, California Institute of Technology, United States</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Xiaoqi Cheng, <email>chexqi@163.com</email>; Haishu Tan, <email>tanhs@163.com</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>16</day>
<month>12</month>
<year>2024</year>
</pub-date>
<pub-date pub-type="collection">
<year>2024</year>
</pub-date>
<volume>12</volume>
<elocation-id>1477381</elocation-id>
<history>
<date date-type="received">
<day>07</day>
<month>08</month>
<year>2024</year>
</date>
<date date-type="accepted">
<day>26</day>
<month>11</month>
<year>2024</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2024 Yao, Cheng, Tan, Li and Zhao.</copyright-statement>
<copyright-year>2024</copyright-year>
<copyright-holder>Yao, Cheng, Tan, Li and Zhao</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>Regular inspections of pipelines are of great significance to ensure their long-term safe and stable operation, and the rapid 3D reconstruction of constant-diameter straight pipelines (CDSP) based on monocular images plays a crucial role in tasks such as positioning and navigation for pipeline inspection drones, as well as defect detection on the pipeline surface. Most of the traditional 3D reconstruction methods for pipelines rely on marked poses or circular contours of end faces, which are complex and difficult to apply, while some existing 3D reconstruction methods based on contour features for pipelines have the disadvantage of slow reconstruction speed. To address the above issues, this paper proposes a rapid 3D reconstruction method for CDSP. This method solves for the spatial pose of the pipeline axis based on the geometric constraints between the projected contour lines and the axis, provided that the radius is known. These constraints are derived from the perspective projection imaging model of the single-view CDSP. Compared with traditional methods, the proposed method improves the reconstruction speed by 99.907% while maintaining similar accuracy.</p>
</abstract>
<kwd-group>
<kwd>monocular vision</kwd>
<kwd>3D reconstruction</kwd>
<kwd>constant-diameter straight pipeline</kwd>
<kwd>apparent contour</kwd>
<kwd>geometric constraint</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Optics and Photonics</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Pipelines serve as crucial and ubiquitous transportation infrastructures in industries such as oil, natural gas, and chemicals. Due to increased years of service, issues like corrosion, wear, and cracks often arise [<xref ref-type="bibr" rid="B1">1</xref>, <xref ref-type="bibr" rid="B2">2</xref>]. In order to avoid accidents such as transmission medium leakage caused by pipeline problems, regular pipeline inspections and surface defect detections are mandatory to prevent accidents, reduce economic losses, and extend the service life of pipelines [<xref ref-type="bibr" rid="B3">3</xref>&#x2013;<xref ref-type="bibr" rid="B5">5</xref>]. To enhance the safety and efficiency of pipeline operations, traditional manual inspection methods can no longer fully meet the demands. Therefore, scholars at home and abroad have conducted extensive research on 3D reconstruction methods based on computer vision technology. At the same time, this technology is widely used in tasks such as positioning and navigation of pipeline inspection drones [<xref ref-type="bibr" rid="B6">6</xref>] and surface defect detection of pipelines [<xref ref-type="bibr" rid="B7">7</xref>].</p>
<p>At present, 3D reconstruction methods are divided into contact and non-contact methods according to the data sources [<xref ref-type="bibr" rid="B8">8</xref>]. Contact methods generally use specific instruments to directly measure the scene to obtain 3D information, such as three coordinate measuring machines [<xref ref-type="bibr" rid="B9">9</xref>]. Since such methods require physical contact with the surface to be measured, they are difficult to implement in many scenes [<xref ref-type="bibr" rid="B10">10</xref>]. However, the non-contact 3D reconstruction methods based on visual feature extraction have received widespread attention. The currently common visual 3D reconstruction methods mainly include active vision and passive vision methods [<xref ref-type="bibr" rid="B11">11</xref>]. Laser scanning [<xref ref-type="bibr" rid="B12">12</xref>] and structured light [<xref ref-type="bibr" rid="B13">13</xref>] are commonly used active vision 3D reconstruction methods, but the equipment cost is high and the operation is complex. Monocular vision, as a type of passive vision method, has the advantages of simple structure, low cost, and wide range of applications. In the research of 3D reconstruction methods for constant-diameter straight pipelines (CDSP), it can be divided into two categories according to different sources of feature information: methods based on surface markers and methods based on contour edges.<list list-type="simple">
<list-item>
<p>(1) Methods based on surface markers</p>
</list-item>
</list>
</p>
<p>Methods based on surface markers determine the 3D pose of the object to be measured by estimating the pose of markers. Hwang et al. [<xref ref-type="bibr" rid="B14">14</xref>] proposed a method for estimating the 3D pose of a catheter with markers based on single-plane perspective. This method utilizes the center points of the three marker bands on the catheter surface and their spacing to solve for the catheter&#x2019;s direction and position, thereby achieving catheter pose estimation. Zhang et al. [<xref ref-type="bibr" rid="B15">15</xref>] proposed a method using a hybrid marker to estimate the pose of a cylinder. This method estimates the cylinder&#x2019;s pose by solving the pose of circle points and chessboard corner points using the PnP algorithm. Lee et al. [<xref ref-type="bibr" rid="B16">16</xref>] proposed a method for estimating the pose of a cylinder by constructing rectangular standard marker. This method uses the edge features of the label as input to find two pairs of points to form rectangular standard markers, and then realizes cylinder pose estimation based on the features of the two pairs of points and the geometric characteristics of the label. Since markers are not allowed in many scenes, the above methods cannot be widely used.<list list-type="simple">
<list-item>
<p>(2) Methods based on contour edges</p>
</list-item>
</list>
</p>
<p>Methods based on contour edges estimate the 3D pose by extracting the edge features of the object to be measured. Shiu et al. [<xref ref-type="bibr" rid="B17">17</xref>] proposed a method to determine the pose of a cylinder using elliptical projection and lateral projection. This method determines the pose of the cylinder by solving the center of the end face circle and the intersection points of the end face circle and line features. However, since it is impossible to extract the circular contour of the end face from the long-distance transmission pipeline, the above method is not suitable for the 3D reconstruction task of long-distance transmission pipelines. Zhang et al. [<xref ref-type="bibr" rid="B18">18</xref>] proposed a 3D reconstruction method for pipelines based on multi-view stereo vision. This method divides the extracted projection axis into line segments and arc segments, performs NURBS curve fitting, and then completes the 3D reconstruction of curve control points. This method regards the centerline of the contour in the image plane as the projection axis, and this approximate calculation introduces significant system errors. Doignon et al. [<xref ref-type="bibr" rid="B19">19</xref>] proposed a 3D pose estimation method for cylinders based on degenerate conic fitting. This method first performs degenerate conic fitting on the edge feature points of the cylinder and then calculates the pose of the cylinder axis using algebraic methods. Cheng et al. [<xref ref-type="bibr" rid="B20">20</xref>] proposed a 3D reconstruction method for pipeline perspective projection models based on coupled point pairs. This method completes the 3D reconstruction of the pipeline axis based on the geometric constraints between the coupled point pairs on the cross-sectional circle and the center of the cross-section. Since edge features require iteration, the 3D reconstruction process is relatively slow.</p>
<p>To address the above issues, this paper proposes a method for rapid 3D reconstruction of CDSP under perspective projection. This method does not require adding markers to the outer surface of the pipeline or extracting circular contours of the end faces. It only needs to extract the contour lines of the pipeline, making the operation simpler. While ensuring the accuracy of reconstruction, this method has a faster reconstruction speed, effectively solving the problem of low efficiency in the reconstruction process. This article first analyzes the imaging process of CDSP perspective projection, and then derives a fast solution for axial position under the premise of known radius. Finally, the experimental results show that compared with traditional methods, this method achieves faster reconstruction speed.</p>
<p>The organization of this paper is as follows: <xref ref-type="sec" rid="s2">Section 2</xref> introduces the single-view perspective projection imaging model of CDSP. <xref ref-type="sec" rid="s3">Section 3</xref> details the steps of our proposed rapid 3D reconstruction method of CDSP. In <xref ref-type="sec" rid="s4">Section 4</xref>, we conduct experiments using both simulated and real data to validate the effectiveness of our method and compare with traditional methods. Finally, <xref ref-type="sec" rid="s5">Section 5</xref> presents the conclusion of this paper.</p>
</sec>
<sec id="s2">
<title>2 The single-view perspective projection imaging model of CDSP</title>
<p>To address the 3D reconstruction problem of CDSP, this paper first establishes the perspective projection imaging model of single-view CDSP, as shown in <xref ref-type="fig" rid="F1">Figure 1</xref>. <xref ref-type="fig" rid="F1">Figure 1A</xref> illustrates the perspective projection imaging process of single-view CDSP. A world coordinate system <inline-formula id="inf1">
<mml:math id="m1">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is established with the camera&#x2019;s optical center <inline-formula id="inf2">
<mml:math id="m2">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> as the origin <inline-formula id="inf3">
<mml:math id="m3">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, where the <inline-formula id="inf4">
<mml:math id="m4">
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> axis points to the right of the camera, the <inline-formula id="inf5">
<mml:math id="m5">
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> axis points downwards, and the <inline-formula id="inf6">
<mml:math id="m6">
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> axis points forwards.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>The perspective projection imaging model of single-view CDSP. <bold>(A)</bold> The perspective projection imaging process of CDSP, <bold>(B)</bold> The support plane of cross section circle <inline-formula id="inf7">
<mml:math id="m7">
<mml:mrow>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g001.tif"/>
</fig>
<p>For any CDSP in space, it can be considered as being composed of a stack of constant-diameter cross section circles that are perpendicular to the axis <inline-formula id="inf8">
<mml:math id="m8">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, with the center of each cross section circle lying on a line <inline-formula id="inf9">
<mml:math id="m9">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Let the center of the cross section circle <inline-formula id="inf10">
<mml:math id="m10">
<mml:mrow>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, which the support plane passing through point <inline-formula id="inf11">
<mml:math id="m11">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, is denoted as <inline-formula id="inf12">
<mml:math id="m12">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and the radius is <inline-formula id="inf13">
<mml:math id="m13">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf14">
<mml:math id="m14">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> represents the contour edges (i.e., apparent contours) formed in the image of the CDSP, <inline-formula id="inf15">
<mml:math id="m15">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the back-projection planes formed by the camera&#x2019;s optical center <inline-formula id="inf16">
<mml:math id="m16">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and the contour lines <inline-formula id="inf17">
<mml:math id="m17">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf18">
<mml:math id="m18">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> represents the contour generators corresponding to <inline-formula id="inf19">
<mml:math id="m19">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf20">
<mml:math id="m20">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>. In addition, let <inline-formula id="inf21">
<mml:math id="m21">
<mml:mrow>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> denotes the intersection line of <inline-formula id="inf22">
<mml:math id="m22">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf23">
<mml:math id="m23">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf24">
<mml:math id="m24">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the normal vectors of planes <inline-formula id="inf25">
<mml:math id="m25">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Considering that both <inline-formula id="inf26">
<mml:math id="m26">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf27">
<mml:math id="m27">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are cylindrical generatrix, there exist <inline-formula id="inf28">
<mml:math id="m28">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
<bold>//</bold>
<inline-formula id="inf29">
<mml:math id="m29">
<mml:mrow>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf30">
<mml:math id="m30">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>//<inline-formula id="inf31">
<mml:math id="m31">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf32">
<mml:math id="m32">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, from which <inline-formula id="inf33">
<mml:math id="m33">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> can be obtained, and the direction vector <inline-formula id="inf34">
<mml:math id="m34">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of <inline-formula id="inf35">
<mml:math id="m35">
<mml:mrow>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> can be expressed as,<disp-formula id="e1">
<mml:math id="m36">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(1)</label>
</disp-formula>where <inline-formula id="inf36">
<mml:math id="m37">
<mml:mrow>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> denotes the cross product. Let <inline-formula id="inf37">
<mml:math id="m38">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the bisector plane of <inline-formula id="inf38">
<mml:math id="m39">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf39">
<mml:math id="m40">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, then the normal vector <inline-formula id="inf40">
<mml:math id="m41">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of the bisector plane <inline-formula id="inf41">
<mml:math id="m42">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is,<disp-formula id="e2">
<mml:math id="m43">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(2)</label>
</disp-formula>
</p>
<p>Let <inline-formula id="inf42">
<mml:math id="m44">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>S</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the support plane of the cross section circle <bold>C</bold>, then there exist <inline-formula id="inf43">
<mml:math id="m45">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#x22a5;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">L</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf44">
<mml:math id="m46">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, and the support plane <inline-formula id="inf45">
<mml:math id="m47">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>S</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is shown in <xref ref-type="fig" rid="F1">Figure 1B</xref>. <inline-formula id="inf46">
<mml:math id="m48">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> lies on the bisector plane <inline-formula id="inf47">
<mml:math id="m49">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, therefore there exists <inline-formula id="inf48">
<mml:math id="m50">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. Since <inline-formula id="inf49">
<mml:math id="m51">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the normal vector of <inline-formula id="inf50">
<mml:math id="m52">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, we can derive <inline-formula id="inf51">
<mml:math id="m53">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, and the direction vector <inline-formula id="inf52">
<mml:math id="m54">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of <inline-formula id="inf53">
<mml:math id="m55">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is,<disp-formula id="e3">
<mml:math id="m56">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(3)</label>
</disp-formula>
</p>
<p>Let <inline-formula id="inf54">
<mml:math id="m57">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> denotes the angle formed between <inline-formula id="inf55">
<mml:math id="m58">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf56">
<mml:math id="m59">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, which is also the angle between the normal vectors <inline-formula id="inf57">
<mml:math id="m60">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf58">
<mml:math id="m61">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Then, the angle <inline-formula id="inf59">
<mml:math id="m62">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> can be expressed as,<disp-formula id="e4">
<mml:math id="m63">
<mml:mrow>
<mml:mi>cos</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(4)</label>
</disp-formula>
</p>
<p>Considering that radius <inline-formula id="inf60">
<mml:math id="m64">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is known and <inline-formula id="inf61">
<mml:math id="m65">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the tangent plane of CDSP. Combining <inline-formula id="inf62">
<mml:math id="m66">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the distance <inline-formula id="inf63">
<mml:math id="m67">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> between point <inline-formula id="inf64">
<mml:math id="m68">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and point <inline-formula id="inf65">
<mml:math id="m69">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> can be expressed as,<disp-formula id="e5">
<mml:math id="m70">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>We assume that the camera coordinate system coincides with the world coordinate system. At this point, the rotation matrix is a <inline-formula id="inf66">
<mml:math id="m71">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> identity matrix, and the translation vector is a <inline-formula id="inf67">
<mml:math id="m72">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> zero vector. Combining the direction vector <inline-formula id="inf68">
<mml:math id="m73">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e3">Equation 3</xref> with the distance <inline-formula id="inf69">
<mml:math id="m74">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e5">Equation 5</xref>, the three-dimensional coordinate of point <inline-formula id="inf70">
<mml:math id="m75">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the world coordinate system is,<disp-formula id="e6">
<mml:math id="m76">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(6)</label>
</disp-formula>
</p>
<p>Based on the geometric constraints derived from any CDSP perspective projection imaging model in the above, and with a known radius of r, the 3D pose of the CDSP axis can be determined by point <inline-formula id="inf71">
<mml:math id="m77">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and direction vector <inline-formula id="inf72">
<mml:math id="m78">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="s3">
<title>3 The rapid 3D reconstruction method of CDSP</title>
<p>Based on the above single-view perspective projection imaging model of CDSP, the rapid 3D reconstruction method process of CDSP designed in this paper is shown in <xref ref-type="fig" rid="F2">Figure 2</xref>.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>The rapid 3D reconstruction method process of CDSP.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g002.tif"/>
</fig>
<p>The above process includes camera calibration module, contours extraction module, and pipeline 3D reconstruction module. In the camera calibration module, we use <inline-formula id="inf73">
<mml:math id="m79">
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> checkerboard targets for calibration, and use the Zhang&#x2019;s calibration method [<xref ref-type="bibr" rid="B21">21</xref>] to obtain the initial estimates of the camera intrinsic matrix <inline-formula id="inf74">
<mml:math id="m80">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the distortion coefficients <inline-formula id="inf75">
<mml:math id="m81">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>, and the extrinsic parameters <inline-formula id="inf76">
<mml:math id="m82">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf77">
<mml:math id="m83">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> represents the first-order and second-order radial distortion coefficients, and <inline-formula id="inf78">
<mml:math id="m84">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> represents the rotation and translation between the camera coordinate system and the target coordinate system in the <inline-formula id="inf79">
<mml:math id="m85">
<mml:mrow>
<mml:msup>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> calibration image. Since the radial distortion usually displayed by the camera is more obvious, and the influence of tangential distortion is relatively small. Therefore, this paper only considers the first two terms of radial distortion coefficients <inline-formula id="inf80">
<mml:math id="m86">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>. Then, the Levenberg Marquardt (LM) algorithm [<xref ref-type="bibr" rid="B22">22</xref>] is used to optimize the initial estimates to obtain more accurate <inline-formula id="inf81">
<mml:math id="m87">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf82">
<mml:math id="m88">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf83">
<mml:math id="m89">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>. In the contours extraction module, we first detect the contour edges of the image and extract contour features, then correct the distortion of contour feature points using the <inline-formula id="inf84">
<mml:math id="m90">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf85">
<mml:math id="m91">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> obtained from the camera calibration module, and finally fit the contour feature points with straight lines based on the least square method to obtain the contour lines <inline-formula id="inf86">
<mml:math id="m92">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the CDSP image. The pipeline 3D reconstruction module calculates the pose of the CDSP axis. Firstly, we use the <inline-formula id="inf87">
<mml:math id="m93">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from the contours extraction module as input, and combine the <inline-formula id="inf88">
<mml:math id="m94">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> obtained from the camera calibration module to calculate the back-projection planes <inline-formula id="inf89">
<mml:math id="m95">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. By the normal vectors <inline-formula id="inf90">
<mml:math id="m96">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of <inline-formula id="inf91">
<mml:math id="m97">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, we obtain the direction vector <inline-formula id="inf92">
<mml:math id="m98">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of the intersection line <inline-formula id="inf93">
<mml:math id="m99">
<mml:mrow>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> between <inline-formula id="inf94">
<mml:math id="m100">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf95">
<mml:math id="m101">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Then, after calculating the offset direction <inline-formula id="inf96">
<mml:math id="m102">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and offset distance <inline-formula id="inf97">
<mml:math id="m103">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, we can obtain the three-dimensional coordinate of point <inline-formula id="inf98">
<mml:math id="m104">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the world coordinate system. Finally, the 3D pose of the CDSP axis can be determined by point <inline-formula id="inf99">
<mml:math id="m105">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and direction vector <inline-formula id="inf100">
<mml:math id="m106">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<sec id="s3-1">
<title>3.1 Camera calibration module</title>
<p>Camera calibration is a fundamental issue in visual technology, a key step in linking 2D image information with 3D spatial information, and a necessary condition for 3D reconstruction. The checkerboard target is not only easy to make, but also provides rich and easily detectable feature points in the image. Therefore, this article uses a checkerboard target with clear corner features for calibration. The parameters that need to be calibrated include the camera intrinsic matrix <inline-formula id="inf101">
<mml:math id="m107">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the distortion coefficients <inline-formula id="inf102">
<mml:math id="m108">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>, and the extrinsic parameters <inline-formula id="inf103">
<mml:math id="m109">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>. Firstly, randomly place a flat checkerboard target in the public field of view, and ensure that the size and position of the target can cover most of the camera&#x2019;s field of view, in order to collect sufficient calibration data. Capture calibration images at different positions from the same perspective by moving the target. Afterwards, we use the camera calibration method proposed by Zhang [<xref ref-type="bibr" rid="B21">21</xref>] to obtain the initial estimates of <inline-formula id="inf104">
<mml:math id="m110">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf105">
<mml:math id="m111">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf106">
<mml:math id="m112">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>. The LM algorithm [<xref ref-type="bibr" rid="B22">22</xref>] was used to perform nonlinear optimization on <inline-formula id="inf107">
<mml:math id="m113">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf108">
<mml:math id="m114">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf109">
<mml:math id="m115">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> through <xref ref-type="disp-formula" rid="e7">Equation 7</xref>, minimizing the reprojection error of all feature points.<disp-formula id="e7">
<mml:math id="m116">
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mo>&#x2211;</mml:mo>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>H</mml:mi>
</mml:munderover>
</mml:mstyle>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mo>&#x2211;</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>J</mml:mi>
</mml:munderover>
</mml:mstyle>
<mml:msup>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
<label>(7)</label>
</disp-formula>where <inline-formula id="inf110">
<mml:math id="m117">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the three-dimensional coordinate of the <inline-formula id="inf111">
<mml:math id="m118">
<mml:mrow>
<mml:msup>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> feature point in the calibration image, <inline-formula id="inf112">
<mml:math id="m119">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> denotes the projection of <inline-formula id="inf113">
<mml:math id="m120">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the <inline-formula id="inf114">
<mml:math id="m121">
<mml:mrow>
<mml:msup>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> calibration image, and <inline-formula id="inf115">
<mml:math id="m122">
<mml:mrow>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the pixel coordinate of the <inline-formula id="inf116">
<mml:math id="m123">
<mml:mrow>
<mml:msup>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> feature point in the <inline-formula id="inf117">
<mml:math id="m124">
<mml:mrow>
<mml:msup>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> calibration image.</p>
</sec>
<sec id="s3-2">
<title>3.2 Contours extraction module</title>
<p>The edge contour of CDSP comprises circular contours of end faces and straight contours. The method presented in this paper completes 3D reconstruction based on the constraint relationship between the contour lines and the axis of CDSP. Therefore, this method does not require detecting the circular contours of end faces of CDSP and can achieve 3D reconstruction for CDSP of any length. In this paper, we use the subpixel edge detection method proposed by Trujillo-Pino [<xref ref-type="bibr" rid="B23">23</xref>] to obtain the pixel coordinates <inline-formula id="inf118">
<mml:math id="m125">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>u</mml:mi>
<mml:mo>&#x2d8;</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo>&#x2d8;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> of contour feature points in CDSP image. This method estimates the subpixel position of the edge by considering the partial area effects around the edge. Due to the distortion of the camera lens, the distortion coefficients <inline-formula id="inf119">
<mml:math id="m126">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> obtained from the camera calibration module, and the coordinate <inline-formula id="inf120">
<mml:math id="m127">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> of the principal point in the intrinsic matrix <inline-formula id="inf121">
<mml:math id="m128">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, are used to correct the distortion of the obtained contour feature points by <xref ref-type="disp-formula" rid="e8">Equation 8</xref>.<disp-formula id="e8">
<mml:math id="m129">
<mml:mrow>
<mml:mfenced open="{" close="" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>u</mml:mi>
<mml:mo>&#x2d8;</mml:mo>
</mml:mover>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>u</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo>&#x2d8;</mml:mo>
</mml:mover>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(8)</label>
</disp-formula>where <inline-formula id="inf122">
<mml:math id="m130">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> denotes the undistorted normalized image coordinates, and <inline-formula id="inf123">
<mml:math id="m131">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> denotes the undistorted pixel coordinates.</p>
<p>Due to the apparent contours of CDSP in the image are two straight lines, we use the RANSAC algorithm [<xref ref-type="bibr" rid="B24">24</xref>] to estimate one of the straight line models by randomly selecting sample points from the contour feature points. Then, the distance from other points to this model is calculated to determine whether they belong to the model&#x2019;s feature points. After selecting the points that comply, we obtain the feature points set <inline-formula id="inf124">
<mml:math id="m132">
<mml:mrow>
<mml:mfenced open="{" close="}" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="|" close="" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> of the straight line model, where <inline-formula id="inf125">
<mml:math id="m133">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> denotes the pixel coordinates of the feature points in this model. Among the remaining feature points, the RANSAC algorithm [<xref ref-type="bibr" rid="B24">24</xref>] is used again to sift the feature points of another straight line model and obtain a feature points set <inline-formula id="inf126">
<mml:math id="m134">
<mml:mrow>
<mml:mfenced open="{" close="}" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="|" close="" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf127">
<mml:math id="m135">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula> denotes the pixel coordinates of the feature points in the other straight line model. For CDSP images with complex backgrounds, we can also obtain the contour feature point sets of CDSP through manual filtering methods. Finally, based on the least squares method, the feature point sets in the two straight line models are fitted separately. The equations for fitting lines <inline-formula id="inf128">
<mml:math id="m136">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf129">
<mml:math id="m137">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are expressed in <xref ref-type="disp-formula" rid="e9">Equation 9</xref>.<disp-formula id="e9">
<mml:math id="m138">
<mml:mrow>
<mml:mfenced open="{" close="" separators="|">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>g</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(9)</label>
</disp-formula>where <inline-formula id="inf130">
<mml:math id="m139">
<mml:mrow>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> denote the coefficients of the equation of the fitting straight line <inline-formula id="inf131">
<mml:math id="m140">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf132">
<mml:math id="m141">
<mml:mrow>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> denote the coefficients of the equation of the fitting straight line <inline-formula id="inf133">
<mml:math id="m142">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. The system of equations, which is constructed using the homogeneous coordinates of the feature points of the <inline-formula id="inf134">
<mml:math id="m143">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> model as the coefficient matrix, is expressed as,<disp-formula id="e10">
<mml:math id="m144">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>G</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>G</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2032;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
<label>(10)</label>
</disp-formula>
</p>
<p>Similarly, the system of equations, which is constructed using the homogeneous coordinates of the feature points of the <inline-formula id="inf135">
<mml:math id="m145">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> model as the coefficient matrix, is expressed as,<disp-formula id="e11">
<mml:math id="m146">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x22ee;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mi>u</mml:mi>
<mml:mi>M</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>M</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msubsup>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>a</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>b</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mi>c</mml:mi>
<mml:mo>&#x2033;</mml:mo>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
<label>(11)</label>
</disp-formula>
</p>
<p>For the above two systems of equations, the eigenvector corresponding to the smallest eigenvalue of the coefficient matrix represents the least squares solution of the equations. Alternatively, we can perform SVD decomposition on the coefficient matrix and then take the vector in the right singular matrix that corresponds to the smallest singular value as the optimal solution. After solving from <xref ref-type="disp-formula" rid="e10">Equation 10</xref> and <xref ref-type="disp-formula" rid="e11">Equation 11</xref>, we can obtain two contour lines <inline-formula id="inf136">
<mml:math id="m147">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the CDSP image.</p>
</sec>
<sec id="s3-3">
<title>3.3 Pipeline 3D reconstruction module</title>
<p>In this section, based on the geometric constraints provided by the perspective projection imaging model of CDSP, the process of solving the axis 3D pose using the contour lines of CDSP in the image as input is derived. According to the contour lines <inline-formula id="inf137">
<mml:math id="m148">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from the contours extraction module, the back-projection planes <inline-formula id="inf138">
<mml:math id="m149">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> can be expressed in <xref ref-type="disp-formula" rid="e12">Equation 12</xref>.<disp-formula id="e12">
<mml:math id="m150">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(12)</label>
</disp-formula>where <inline-formula id="inf139">
<mml:math id="m151">
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> denotes vector transpose. Due to <inline-formula id="inf140">
<mml:math id="m152">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the direction vector <inline-formula id="inf141">
<mml:math id="m153">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of <inline-formula id="inf142">
<mml:math id="m154">
<mml:mrow>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> can be obtained through <xref ref-type="disp-formula" rid="e1">Equation 1</xref>. In addition, since <inline-formula id="inf143">
<mml:math id="m155">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf144">
<mml:math id="m156">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf145">
<mml:math id="m157">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#x22a5;</mml:mo>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the direction vector <inline-formula id="inf146">
<mml:math id="m158">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of <inline-formula id="inf147">
<mml:math id="m159">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> can be obtained by <xref ref-type="disp-formula" rid="e3">Equation 3</xref>. Based on the <inline-formula id="inf148">
<mml:math id="m160">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e1">Equation 1</xref> and the <inline-formula id="inf149">
<mml:math id="m161">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e2">Equation 2</xref>, <inline-formula id="inf150">
<mml:math id="m162">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e3">Equation 3</xref> can be expressed as,<disp-formula id="e13">
<mml:math id="m163">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
<label>(13)</label>
</disp-formula>
</p>
<p>Since <inline-formula id="inf151">
<mml:math id="m164">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the angle between the planes <inline-formula id="inf152">
<mml:math id="m165">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf153">
<mml:math id="m166">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">&#x3c0;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and also the angle between the normal vectors <inline-formula id="inf154">
<mml:math id="m167">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf155">
<mml:math id="m168">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, the angle <inline-formula id="inf156">
<mml:math id="m169">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> obtained by <xref ref-type="disp-formula" rid="e4">Equation 4</xref> is,<disp-formula id="e14">
<mml:math id="m170">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi>cos</mml:mi>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
<label>(14)</label>
</disp-formula>
</p>
<p>Besides, since the radius <inline-formula id="inf157">
<mml:math id="m171">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> of the cross section circle <inline-formula id="inf158">
<mml:math id="m172">
<mml:mrow>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is known and the angle <inline-formula id="inf159">
<mml:math id="m173">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is obtained from <xref ref-type="disp-formula" rid="e14">Equation 14</xref>, the distance <inline-formula id="inf160">
<mml:math id="m174">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> between point <inline-formula id="inf161">
<mml:math id="m175">
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and point <inline-formula id="inf162">
<mml:math id="m176">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> can be obtained through <xref ref-type="disp-formula" rid="e5">Equation 5</xref>. can be expressed as,<disp-formula id="e15">
<mml:math id="m177">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>cos</mml:mi>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(15)</label>
</disp-formula>
</p>
<p>According to the distance <inline-formula id="inf163">
<mml:math id="m178">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e15">Equation 15</xref> and the <inline-formula id="inf164">
<mml:math id="m179">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">O</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e13">Equation 13</xref>, the three-dimensional coordinate of point <inline-formula id="inf165">
<mml:math id="m180">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the world coordinate system obtained from <xref ref-type="disp-formula" rid="e6">Equation 6</xref> can be expressed as,<disp-formula id="e16">
<mml:math id="m181">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi>cos</mml:mi>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#xb7;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(16)</label>
</disp-formula>where <inline-formula id="inf166">
<mml:math id="m182">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf167">
<mml:math id="m183">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msub>
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>Based on the above derivation, under the premise that the radius <inline-formula id="inf168">
<mml:math id="m184">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is known, taking the contour lines in the CDSP image as input, the 3D pose of the CDSP axis can be determined by the direction vector <inline-formula id="inf169">
<mml:math id="m185">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">v</mml:mi>
<mml:mi mathvariant="bold-italic">L</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e1">Equation 1</xref> and the 3D coordinate of point <inline-formula id="inf170">
<mml:math id="m186">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> obtained from <xref ref-type="disp-formula" rid="e16">Equation 16</xref>.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Experiments</title>
<p>To verify the effectiveness of the rapid 3D reconstruction method of CDSP, this section will conduct simulation experiment and real experiment. Specifically, the simulation experiment is designed to validate the correctness of the method, while the real experiment is aimed at verifying the feasibility of the method. This article uses a computer equipped with Intel Core i5-8250U CPU and 8 GB RAM for experiments, and uses time-consuming for 3D reconstruction as the speed evaluation metric. In the simulation experiment, we reconstruct a pipe and calculate the root mean square error (RMSE) between the distance from each point in the reconstructed pipe axis to the ideal axis and the true distance <inline-formula id="inf171">
<mml:math id="m187">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>. In the real experiment, we reconstruct two parallel pipes with a known true distance <inline-formula id="inf172">
<mml:math id="m188">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, and calculate the RMSE between the distance from each point in the axis of one reconstructed pipe to the axis of the other reconstructed pipe and the true distance <inline-formula id="inf173">
<mml:math id="m189">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. Using RMSE as the evaluation metric of accuracy, the calculation formula is expressed as,<disp-formula id="e17">
<mml:math id="m190">
<mml:mrow>
<mml:mtext>RMSE</mml:mtext>
<mml:mo>&#x3d;</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mo>&#x2211;</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
</mml:mstyle>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
</mml:math>
<label>(17)</label>
</disp-formula>where <inline-formula id="inf174">
<mml:math id="m191">
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> denotes the number of points in the reconstructed pipe axis. In the simulation experiment, <inline-formula id="inf175">
<mml:math id="m192">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the distance from a point in the reconstructed pipe axis to the ideal axis. In the real experiment <inline-formula id="inf176">
<mml:math id="m193">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the distance from a point in the reconstructed pipe axis to another reconstructed pipe axis.</p>
<p>Assuming <inline-formula id="inf177">
<mml:math id="m194">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is a point in the reconstructed pipe axis. In the simulation experiment, <inline-formula id="inf178">
<mml:math id="m195">
<mml:mrow>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is any point in the ideal axis, and <inline-formula id="inf179">
<mml:math id="m196">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the direction vector of the ideal axis. In the real experiment, <inline-formula id="inf180">
<mml:math id="m197">
<mml:mrow>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is any point in the axis of another reconstructed pipe, and <inline-formula id="inf181">
<mml:math id="m198">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the direction vector of the axis of another reconstructed pipe. The direction vector expression from point <inline-formula id="inf182">
<mml:math id="m199">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> to point <inline-formula id="inf183">
<mml:math id="m200">
<mml:mrow>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is,<disp-formula id="e18">
<mml:math id="m201">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
</mml:math>
<label>(18)</label>
</disp-formula>
</p>
<p>A parallelogram is formed with <inline-formula id="inf184">
<mml:math id="m202">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> and the direction vector <inline-formula id="inf185">
<mml:math id="m203">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> as adjacent sides, and the area <inline-formula id="inf186">
<mml:math id="m204">
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> of the parallelogram can be expressed as,<disp-formula id="e19">
<mml:math id="m205">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
<label>(19)</label>
</disp-formula>
</p>
<p>Meanwhile, according to the parallelogram area formula, the area <inline-formula id="inf187">
<mml:math id="m206">
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> can also be expressed as,<disp-formula id="e20">
<mml:math id="m207">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#xb7;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(20)</label>
</disp-formula>
</p>
<p>Combining <xref ref-type="disp-formula" rid="e18">Equation 18</xref>, <xref ref-type="disp-formula" rid="e19">Equation 19</xref> and <xref ref-type="disp-formula" rid="e20">Equation 20</xref>, the distance <inline-formula id="inf188">
<mml:math id="m208">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> can be expressed in <xref ref-type="disp-formula" rid="e21">Equation 21</xref>.<disp-formula id="e21">
<mml:math id="m209">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="bold-italic">Q</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;" separators="|">
<mml:mrow>
<mml:mi mathvariant="bold-italic">v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
<label>(21)</label>
</disp-formula>
</p>
<sec id="s4-1">
<title>4.1 Simulation experiment</title>
<p>In this part, the proposed method is tested on simulated data. The cell size is set as <inline-formula id="inf189">
<mml:math id="m210">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mo>&#x2206;</mml:mo>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mo>&#x2206;</mml:mo>
<mml:mi>v</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mn>0.00345</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>0.00345</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, the focal length is set as <inline-formula id="inf190">
<mml:math id="m211">
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>12</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, the image size is set as <inline-formula id="inf191">
<mml:math id="m212">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mn>2448</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2048</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> pixel, and the coordinate of principal point is set as <inline-formula id="inf192">
<mml:math id="m213">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, then the camera intrinsic matrix can be expressed in <xref ref-type="disp-formula" rid="e22">Equation 22</xref>.<disp-formula id="e22">
<mml:math id="m214">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo>/</mml:mo>
<mml:msub>
<mml:mo>&#x2206;</mml:mo>
<mml:mi>u</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo>/</mml:mo>
<mml:msub>
<mml:mo>&#x2206;</mml:mo>
<mml:mi>v</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mrow>
</mml:math>
<label>(22)</label>
</disp-formula>
</p>
<p>In addition, the radius and length of CDSP are set as <inline-formula id="inf193">
<mml:math id="m215">
<mml:mrow>
<mml:mn>8</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf194">
<mml:math id="m216">
<mml:mrow>
<mml:mn>500</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> respectively. The experimental scene is shown in <xref ref-type="fig" rid="F3">Figure 3</xref>. We establish the world coordinate system <inline-formula id="inf195">
<mml:math id="m217">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the scene, and place a CDSP in the plane <inline-formula id="inf196">
<mml:math id="m218">
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>. We denote the CDSP with its center located at the origin <inline-formula id="inf197">
<mml:math id="m219">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and its axis parallel to the <inline-formula id="inf198">
<mml:math id="m220">
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> axis as <inline-formula id="inf199">
<mml:math id="m221">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and the CDSP obtained by translating <inline-formula id="inf200">
<mml:math id="m222">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> along the positive direction of <inline-formula id="inf201">
<mml:math id="m223">
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> as <inline-formula id="inf202">
<mml:math id="m224">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, as shown in <xref ref-type="fig" rid="F3">Figure 3A</xref>. Similarly, we denote the CDSP with its center located at the origin <inline-formula id="inf203">
<mml:math id="m225">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and its axis parallel to the <inline-formula id="inf204">
<mml:math id="m226">
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> axis as <inline-formula id="inf205">
<mml:math id="m227">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and the CDSP obtained by translating <inline-formula id="inf206">
<mml:math id="m228">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> along the positive direction of <inline-formula id="inf207">
<mml:math id="m229">
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> as <inline-formula id="inf208">
<mml:math id="m230">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, as illustrated in <xref ref-type="fig" rid="F3">Figure 3B</xref>. The optical center <inline-formula id="inf209">
<mml:math id="m231">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is located at the world coordinate system <inline-formula id="inf210">
<mml:math id="m232">
<mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>150</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>200</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>300</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> and points to <inline-formula id="inf211">
<mml:math id="m233">
<mml:mrow>
<mml:msub>
<mml:mi>O</mml:mi>
<mml:mi>W</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>The scene of simulation experiment. <bold>(A)</bold> The experimental scene of <inline-formula id="inf212">
<mml:math id="m234">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf213">
<mml:math id="m235">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <bold>(B)</bold> The experimental scene of <inline-formula id="inf214">
<mml:math id="m236">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf215">
<mml:math id="m237">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g003.tif"/>
</fig>
<p>Based on the scene of the above simulation experiment, The images of <inline-formula id="inf216">
<mml:math id="m238">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf217">
<mml:math id="m239">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf218">
<mml:math id="m240">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf219">
<mml:math id="m241">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> generated from simulated data are shown in <xref ref-type="fig" rid="F4">Figure 4</xref>.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>The images generated from simulation data.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g004.tif"/>
</fig>
<p>In order to verify the correctness of the proposed method, the projected contour lines of CDSP are obtained from the simulated data through the cylindrical target perspective projection model [<xref ref-type="bibr" rid="B25">25</xref>]. Then, we use the proposed method to achieve 3D reconstruction of four pipes <inline-formula id="inf220">
<mml:math id="m242">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf221">
<mml:math id="m243">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf222">
<mml:math id="m244">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf223">
<mml:math id="m245">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. The final experimental results are shown in <xref ref-type="fig" rid="F5">Figure 5</xref>. <xref ref-type="fig" rid="F5">Figure 5</xref> displays the 3D pipes reconstructed using the proposed method, as well as the true 3D pipes generated using simulated data. It can be seen that the reconstructed 3D pipes completely overlap with the true 3D pipes.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>3D reconstruction effects of simulation experiment.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g005.tif"/>
</fig>
<p>In order to consider the impact of radius measurement errors on reconstruction, we set the radius measurement errors to <inline-formula id="inf224">
<mml:math id="m246">
<mml:mrow>
<mml:mo>&#xb1;</mml:mo>
<mml:mtext>&#x2009;</mml:mtext>
<mml:mn>0.02</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf225">
<mml:math id="m247">
<mml:mrow>
<mml:mo>&#xb1;</mml:mo>
<mml:mtext>&#x2009;</mml:mtext>
<mml:mn>0.05</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf226">
<mml:math id="m248">
<mml:mrow>
<mml:mo>&#xb1;</mml:mo>
<mml:mtext>&#x2009;</mml:mtext>
<mml:mn>0.10</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> respectively, and then conducted experiments with radius measurement values containing errors. After completing the reconstruction, we calculated the RMSE using <xref ref-type="disp-formula" rid="e17">Equation 17</xref>, and the calculation results are shown in <xref ref-type="table" rid="T1">Table 1</xref>. It can be seen from the table that when the radius measurement errors are &#xb1;0.02mm, &#xb1;0.05mm, and &#xb1;0.10mm, the average RMSEs are 0.944mm, 2.361mm, and 4.721mm, respectively. As the radius measurement error increases, the accuracy of reconstruction gradually decreases.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Comparison of the impact of radius measurement errors.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th rowspan="2" align="center">Pipes</th>
<th colspan="6" align="center">Radius measurement error</th>
</tr>
<tr>
<th align="center">
<inline-formula id="inf227">
<mml:math id="m249">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.10</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">
<inline-formula id="inf228">
<mml:math id="m250">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.05</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">
<inline-formula id="inf229">
<mml:math id="m251">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.02</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">
<inline-formula id="inf230">
<mml:math id="m252">
<mml:mrow>
<mml:mn>0.02</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">
<inline-formula id="inf231">
<mml:math id="m253">
<mml:mrow>
<mml:mn>0.05</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">
<inline-formula id="inf232">
<mml:math id="m254">
<mml:mrow>
<mml:mn>0.10</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf233">
<mml:math id="m255">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf234">
<mml:math id="m256">
<mml:mrow>
<mml:mn>4.507</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf235">
<mml:math id="m257">
<mml:mrow>
<mml:mn>2.253</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf236">
<mml:math id="m258">
<mml:mrow>
<mml:mn>0.901</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf237">
<mml:math id="m259">
<mml:mrow>
<mml:mn>0.901</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf238">
<mml:math id="m260">
<mml:mrow>
<mml:mn>2.253</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf239">
<mml:math id="m261">
<mml:mrow>
<mml:mn>4.507</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf240">
<mml:math id="m262">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf241">
<mml:math id="m263">
<mml:mrow>
<mml:mn>5.303</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf242">
<mml:math id="m264">
<mml:mrow>
<mml:mn>2.652</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf243">
<mml:math id="m265">
<mml:mrow>
<mml:mn>1.061</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf244">
<mml:math id="m266">
<mml:mrow>
<mml:mn>1.061</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf245">
<mml:math id="m267">
<mml:mrow>
<mml:mn>2.652</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf246">
<mml:math id="m268">
<mml:mrow>
<mml:mn>5.303</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf247">
<mml:math id="m269">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf248">
<mml:math id="m270">
<mml:mrow>
<mml:mn>4.193</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf249">
<mml:math id="m271">
<mml:mrow>
<mml:mn>2.096</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf250">
<mml:math id="m272">
<mml:mrow>
<mml:mn>0.839</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf251">
<mml:math id="m273">
<mml:mrow>
<mml:mn>0.839</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf252">
<mml:math id="m274">
<mml:mrow>
<mml:mn>2.096</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf253">
<mml:math id="m275">
<mml:mrow>
<mml:mn>4.193</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf254">
<mml:math id="m276">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf255">
<mml:math id="m277">
<mml:mrow>
<mml:mn>4.881</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf256">
<mml:math id="m278">
<mml:mrow>
<mml:mn>2.441</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf257">
<mml:math id="m279">
<mml:mrow>
<mml:mn>0.976</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf258">
<mml:math id="m280">
<mml:mrow>
<mml:mn>0.976</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf259">
<mml:math id="m281">
<mml:mrow>
<mml:mn>2.441</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf260">
<mml:math id="m282">
<mml:mrow>
<mml:mn>4.881</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">Mean <inline-formula id="inf261">
<mml:math id="m283">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf262">
<mml:math id="m284">
<mml:mrow>
<mml:mn>4.721</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf263">
<mml:math id="m285">
<mml:mrow>
<mml:mn>2.361</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf264">
<mml:math id="m286">
<mml:mrow>
<mml:mn>0.944</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf265">
<mml:math id="m287">
<mml:mrow>
<mml:mn>0.944</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf266">
<mml:math id="m288">
<mml:mrow>
<mml:mn>2.361</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf267">
<mml:math id="m289">
<mml:mrow>
<mml:mn>4.721</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>In addition, in order to approach the actual experimental conditions more closely, we add gaussian random noise with a mean of 0 and a noise level of 0.1 to the contour feature points, and then conduct a comparison experiment in terms of accuracy and speed using the Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method, the Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method, and the proposed method respectively. In the accuracy comparison experiment, each method was tested 10 times and the RMSE was calculated using <xref ref-type="disp-formula" rid="e17">Equation 17</xref>. The calculation results are shown in <xref ref-type="fig" rid="F6">Figure 6</xref>. <xref ref-type="fig" rid="F6">Figure 6</xref> displays the RMSE for 10 reconstructions of each pipe using three different methods, as well as the average RMSE over the 10 times. The average RMSE for reconstructing the four pipes using the proposed method is 0.013mm, while the average RMSE for the Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method is 0.057mm, and the average RMSE for the Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method is 0.033 mm. Compared with the other two methods, the RMSE of the proposed method is the lowest, which also indicates that the proposed method is less sensitive to noise. This is because the proposed method adopts simple straight line fitting model, which has low sensitivity to noise. The Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method affects the matching accuracy of the coupled point pairs due to noise, which in turn affects the accuracy of the reconstruction results. The Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method uses curve model for fitting, and its parameter estimation is easily affected by noise, which in turn affects the accuracy of pose parameters. Compared with the other two methods, the proposed method is faster and less sensitive to noise. In terms of applicability, Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method can achieve 3D reconstruction of constant-diameter pipelines, while the proposed method and Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method are only applicable to 3D reconstruction of constant-diameter straight pipelines. This is a potential drawback of the method proposed in this article and also an area for improvement in our future work.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Comparison of experimental reconstruction accuracy.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g006.tif"/>
</fig>
<p>Afterwards, we calculate the time taken by the three methods to complete the reconstruction of pipes <inline-formula id="inf268">
<mml:math id="m290">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf269">
<mml:math id="m291">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf270">
<mml:math id="m292">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf271">
<mml:math id="m293">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> respectively, and the results are shown in <xref ref-type="table" rid="T2">Table 2</xref>. <xref ref-type="table" rid="T2">Table 2</xref> displays the time taken to complete the reconstruction of each pipe with three methods separately, and take the average of the time taken to reconstruct four pipes as the time-consuming of each method. The time-consuming of the proposed method is <inline-formula id="inf272">
<mml:math id="m294">
<mml:mrow>
<mml:mn>9.984</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, while the Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method and Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method are <inline-formula id="inf273">
<mml:math id="m295">
<mml:mrow>
<mml:mn>2.451</mml:mn>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf274">
<mml:math id="m296">
<mml:mrow>
<mml:mn>2.367</mml:mn>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> respectively. The time-consuming for reconstructing each pipe by the proposed method is less than that of the other two methods, and there is a significant increase in reconstruction speed. This is because the straight line fitting used in the proposed method is mainly based on solving linear equations, and the computational complexity is relatively small. The Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method uses curve fitting with equations containing multiple coefficients, and the solving process involves nonlinear operations. The Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method requires finding the coupled point pairs for each cross section circle, making the reconstruction process cumbersome. Through the comparison of accuracy and speed experiments, we have verified the correctness of the proposed method and can achieve rapid 3D reconstruction of CDSP.</p>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Comparison of experimental reconstruction time-consuming.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th rowspan="2" align="center">Pipes</th>
<th align="center">Proposed method</th>
<th align="center">Cheng method</th>
<th align="center">Doignon method</th>
</tr>
<tr>
<th align="center">Time <inline-formula id="inf275">
<mml:math id="m297">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Time <inline-formula id="inf276">
<mml:math id="m298">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Time <inline-formula id="inf277">
<mml:math id="m299">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf278">
<mml:math id="m300">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf279">
<mml:math id="m301">
<mml:mrow>
<mml:mn>9.997</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf280">
<mml:math id="m302">
<mml:mrow>
<mml:mn>2.566</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf281">
<mml:math id="m303">
<mml:mrow>
<mml:mn>2.547</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf282">
<mml:math id="m304">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf283">
<mml:math id="m305">
<mml:mrow>
<mml:mn>9.973</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf284">
<mml:math id="m306">
<mml:mrow>
<mml:mn>2.644</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf285">
<mml:math id="m307">
<mml:mrow>
<mml:mn>2.664</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf286">
<mml:math id="m308">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf287">
<mml:math id="m309">
<mml:mrow>
<mml:mn>9.992</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf288">
<mml:math id="m310">
<mml:mrow>
<mml:mn>2.115</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf289">
<mml:math id="m311">
<mml:mrow>
<mml:mn>2.275</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf290">
<mml:math id="m312">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf291">
<mml:math id="m313">
<mml:mrow>
<mml:mn>9.975</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf292">
<mml:math id="m314">
<mml:mrow>
<mml:mn>2.142</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf293">
<mml:math id="m315">
<mml:mrow>
<mml:mn>2.319</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">Time-consuming <inline-formula id="inf294">
<mml:math id="m316">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf295">
<mml:math id="m317">
<mml:mrow>
<mml:mn>9.984</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf296">
<mml:math id="m318">
<mml:mrow>
<mml:mn>2.367</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf297">
<mml:math id="m319">
<mml:mrow>
<mml:mn>2.451</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>To test the noise resistance of the proposed method in this article, we added Gaussian noise with an average value of 0 and a standard deviation range of 0 to 3 pixel (step size of 0.2 pixel) to the feature point coordinates of the synthesized image, and conducted 10 independent experiments for each noise level. Calculate the RMSE for different noise levels after completing the reconstruction. The RMSE for each noise level is shown in <xref ref-type="fig" rid="F7">Figure 7</xref>. As can be seen from <xref ref-type="fig" rid="F7">Figure 7</xref>, the accuracy gradually decreases with the increase of noise level, and it has a linear relationship with the noise level. When the accuracy requirement reaches 0.2mm, 1.5 pixel of noise can be tolerated. When the accuracy requirement reaches 0.4mm, 3 pixel of noise can be tolerated.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>The influence of different noise levels on reconstruction accuracy.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g007.tif"/>
</fig>
</sec>
<sec id="s4-2">
<title>4.2 Real experiment</title>
<p>The above simulation experiment has verified the correctness of the proposed method. In order to further verify the feasibility of the proposed method, this section will conduct real experiment based on real data. The camera used in the experiment is Daheng MER-503-23 GM-P camera with resolution of <inline-formula id="inf298">
<mml:math id="m320">
<mml:mrow>
<mml:mn>2448</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2048</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> pixels, equipped with HN-P-1628-6M-C2/3 lens with focal length of <inline-formula id="inf299">
<mml:math id="m321">
<mml:mrow>
<mml:mn>16</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>. We set up a real experimental scene that is consistent with the scene of simulation experiment as shown in <xref ref-type="fig" rid="F8">Figure 8A</xref>. When the CDSP is placed at two different positions in the scene, they are denoted as <inline-formula id="inf300">
<mml:math id="m322">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf301">
<mml:math id="m323">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> respectively. By translating <inline-formula id="inf302">
<mml:math id="m324">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf303">
<mml:math id="m325">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> separately, we obtain <inline-formula id="inf304">
<mml:math id="m326">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf305">
<mml:math id="m327">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Since there is no true value in the real experiment, we use the distance of pipe translation as the true distance <inline-formula id="inf306">
<mml:math id="m328">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e17">Equation 17</xref>. Measured by a vernier caliper with an accuracy of <inline-formula id="inf307">
<mml:math id="m329">
<mml:mrow>
<mml:mn>0.02</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, the diameter and length of CDSP are <inline-formula id="inf308">
<mml:math id="m330">
<mml:mrow>
<mml:mn>16</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf309">
<mml:math id="m331">
<mml:mrow>
<mml:mn>300</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> respectively, the distance between the two support columns of <inline-formula id="inf310">
<mml:math id="m332">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf311">
<mml:math id="m333">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is <inline-formula id="inf312">
<mml:math id="m334">
<mml:mrow>
<mml:mn>112.67</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, the distance between the two support columns of <inline-formula id="inf313">
<mml:math id="m335">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf314">
<mml:math id="m336">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is <inline-formula id="inf315">
<mml:math id="m337">
<mml:mrow>
<mml:mn>112.68</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, and the diameter of the support column is <inline-formula id="inf316">
<mml:math id="m338">
<mml:mrow>
<mml:mn>12.68</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>. Based on this, we can calculate that the translation distances for pipes <inline-formula id="inf317">
<mml:math id="m339">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf318">
<mml:math id="m340">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are <inline-formula id="inf319">
<mml:math id="m341">
<mml:mrow>
<mml:mn>99.99</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf320">
<mml:math id="m342">
<mml:mrow>
<mml:mn>100.00</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> respectively.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>
<bold>(A)</bold> The scene of real experiment, <bold>(B)</bold> The images collected in the experiment, <bold>(C)</bold> The images with contour lines and projected axis.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g008.tif"/>
</fig>
<p>Based on the scene of the above real experiment, we first calibrate the camera used in the experiment. The calibration parameters obtained using the method in the camera calibration module are shown in <xref ref-type="table" rid="T3">Table 3</xref>.</p>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>Camera calibration results.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">Intrinsic matrix <inline-formula id="inf321">
<mml:math id="m343">
<mml:mrow>
<mml:mi mathvariant="bold-italic">K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Distortion coefficients <inline-formula id="inf322">
<mml:math id="m344">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Extrinsic parameters <inline-formula id="inf323">
<mml:math id="m345">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x7c;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf324">
<mml:math id="m346">
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mn>4623.90566</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>1207.06155</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>4635.67335</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>978.70215</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf325">
<mml:math id="m347">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.03140</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0.42401</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf326">
<mml:math id="m348">
<mml:mrow>
<mml:mfenced open="[" close="]" separators="|">
<mml:mrow>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
<mml:mtd>
<mml:mtable columnalign="center">
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Then, we collect images of <inline-formula id="inf327">
<mml:math id="m349">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf328">
<mml:math id="m350">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf329">
<mml:math id="m351">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf330">
<mml:math id="m352">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> respectively, and the collected images are shown in <xref ref-type="fig" rid="F8">Figure 8B</xref>. After feature extraction from the collected images using the method in the contours extraction module, the contour lines of <inline-formula id="inf331">
<mml:math id="m353">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf332">
<mml:math id="m354">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf333">
<mml:math id="m355">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf334">
<mml:math id="m356">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the image are obtained. Subsequently, taking the obtained contour lines as input, the pose of each pipe axis is calculated using the method in the pipeline 3D reconstruction module. The contour lines and projected axes are shown in <xref ref-type="fig" rid="F8">Figure 8C</xref>. Finally, the reconstructed 3D effects of <inline-formula id="inf335">
<mml:math id="m357">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf336">
<mml:math id="m358">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf337">
<mml:math id="m359">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf338">
<mml:math id="m360">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> based on the collected images are shown in <xref ref-type="fig" rid="F9">Figure 9</xref>. <xref ref-type="fig" rid="F9">Figure 9</xref> displays the reconstructed 3D pipes and their axes from the above images.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>3D reconstruction effects of real experiment.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g009.tif"/>
</fig>
<p>In addition, based on the scene of the above real experiment, we collect five groups of images for <inline-formula id="inf339">
<mml:math id="m361">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf340">
<mml:math id="m362">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and another five groups of images for <inline-formula id="inf341">
<mml:math id="m363">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf342">
<mml:math id="m364">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Afterwards, we use the proposed method, the Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method, and Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method to perform 3D reconstruction on these 10 groups of images. The reconstruction error results of one group of <inline-formula id="inf343">
<mml:math id="m365">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf344">
<mml:math id="m366">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and one group of <inline-formula id="inf345">
<mml:math id="m367">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf346">
<mml:math id="m368">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are shown in <xref ref-type="fig" rid="F10">Figure 10</xref>. In <xref ref-type="fig" rid="F10">Figure 10</xref>, the <italic>x</italic>-axis represents the point number, and the <italic>y</italic>-axis represents the error of each point. <xref ref-type="fig" rid="F10">Figure 10A</xref> displays the distance deviation of each point on the reconstructed axis of <inline-formula id="inf347">
<mml:math id="m369">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> to the reconstructed axis of <inline-formula id="inf348">
<mml:math id="m370">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <xref ref-type="fig" rid="F10">Figure 10B</xref> displays the distance deviation of each point on the reconstructed axis of <inline-formula id="inf349">
<mml:math id="m371">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> to the reconstructed axis of <inline-formula id="inf350">
<mml:math id="m372">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. Meanwhile, the reconstruction time-consuming for the set of <inline-formula id="inf351">
<mml:math id="m373">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf352">
<mml:math id="m374">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and the set of <inline-formula id="inf353">
<mml:math id="m375">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf354">
<mml:math id="m376">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are shown in <xref ref-type="table" rid="T4">Table 4</xref>.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Comparison of reconstruction error results for one group of experiments. <bold>(A)</bold> The reconstruction error results for <inline-formula id="inf355">
<mml:math id="m377">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf356">
<mml:math id="m378">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <bold>(B)</bold> The reconstruction error results for <inline-formula id="inf357">
<mml:math id="m379">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf358">
<mml:math id="m380">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g010.tif"/>
</fig>
<table-wrap id="T4" position="float">
<label>TABLE 4</label>
<caption>
<p>Comparison of reconstruction time-consuming for one group of experiments.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th rowspan="2" align="center">Pipes</th>
<th align="center">Proposed method</th>
<th align="center">Cheng method</th>
<th align="center">Doignon method</th>
</tr>
<tr>
<th align="center">Time <inline-formula id="inf359">
<mml:math id="m381">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Time <inline-formula id="inf360">
<mml:math id="m382">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center">Time <inline-formula id="inf361">
<mml:math id="m383">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf362">
<mml:math id="m384">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf363">
<mml:math id="m385">
<mml:mrow>
<mml:mn>1.001</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf364">
<mml:math id="m386">
<mml:mrow>
<mml:mn>1.936</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf365">
<mml:math id="m387">
<mml:mrow>
<mml:mn>1.900</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf366">
<mml:math id="m388">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf367">
<mml:math id="m389">
<mml:mrow>
<mml:mn>9.978</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf368">
<mml:math id="m390">
<mml:mrow>
<mml:mn>2.241</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf369">
<mml:math id="m391">
<mml:mrow>
<mml:mn>2.011</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf370">
<mml:math id="m392">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf371">
<mml:math id="m393">
<mml:mrow>
<mml:mn>1.989</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf372">
<mml:math id="m394">
<mml:mrow>
<mml:mn>1.986</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf373">
<mml:math id="m395">
<mml:mrow>
<mml:mn>2.094</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf374">
<mml:math id="m396">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x223c;</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf375">
<mml:math id="m397">
<mml:mrow>
<mml:mn>1.070</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf376">
<mml:math id="m398">
<mml:mrow>
<mml:mn>1.996</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf377">
<mml:math id="m399">
<mml:mrow>
<mml:mn>2.878</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center">Time-consuming <inline-formula id="inf378">
<mml:math id="m400">
<mml:mrow>
<mml:mfenced open="(" close=")" separators="|">
<mml:mrow>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf379">
<mml:math id="m401">
<mml:mrow>
<mml:mn>1.264</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf380">
<mml:math id="m402">
<mml:mrow>
<mml:mn>2.040</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf381">
<mml:math id="m403">
<mml:mrow>
<mml:mn>2.221</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>After completing the 3D reconstruction of 10 groups of images using three different methods, we calculate the RMSE of each group using <xref ref-type="disp-formula" rid="e17">Equation 17</xref>. Meanwhile, we calculate the time taken to complete the reconstruction for each pipe and used the average of the time taken to complete the reconstruction for the two pipes as the time-consuming for each group of experiments. In the experimental results shown in <xref ref-type="fig" rid="F11">Figure 11</xref>, the <italic>x</italic>-axis represents the group number, and the <italic>y</italic>-axis shows the RMSE of the reconstructed pipe for each group and the average time-consuming to complete the pipe reconstruction for each group. The average RMSE for the 10 groups using the proposed method is <inline-formula id="inf382">
<mml:math id="m404">
<mml:mrow>
<mml:mn>0.165</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, and the average time-consuming is <inline-formula id="inf383">
<mml:math id="m405">
<mml:mrow>
<mml:mn>1.917</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. The average RMSE of the Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method is <inline-formula id="inf384">
<mml:math id="m406">
<mml:mrow>
<mml:mn>0.314</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, with the average time-consuming of <inline-formula id="inf385">
<mml:math id="m407">
<mml:mrow>
<mml:mn>2.034</mml:mn>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. The average RMSE of the Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method is <inline-formula id="inf386">
<mml:math id="m408">
<mml:mrow>
<mml:mn>0.180</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, with the average time-consuming of <inline-formula id="inf387">
<mml:math id="m409">
<mml:mrow>
<mml:mn>2.071</mml:mn>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. The accuracy of the proposed method is similar to Cheng [<xref ref-type="bibr" rid="B20">20</xref>] method and slightly higher than Doignon [<xref ref-type="bibr" rid="B19">19</xref>] method, and the time-consuming of the proposed method is the least. In the real experiment, the three-dimensional reconstruction accuracy of the pipe axis is affected by many factors such as camera calibration accuracy, lens distortion, edge contour extraction accuracy, image noise, etc., resulting in the improvement of accuracy is not as obvious as that of the simulation experiment. The obvious advantage of the proposed method compared to the three methods is the improvement in speed. The comparison results of accuracy and speed are consistent with the simulation experiment, proving that proposed method can effectively achieve rapid 3D reconstruction of CDSP.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Comparison of experimental results among all groups.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g011.tif"/>
</fig>
<p>To discuss the robustness of the proposed method under different lighting conditions and backgrounds, we collected CDSP images under different lighting conditions and backgrounds for experiments. For more complex scenes, we use manual filtering to extract contour features, and then use the proposed method for reconstruction. The collected images and their reconstructed effects are shown in <xref ref-type="fig" rid="F12">Figure 12</xref>. <xref ref-type="fig" rid="F12">Figure 12A</xref> shows the collected CDSP images, and <xref ref-type="fig" rid="F12">Figure 12B</xref> shows the 3D reconstruction effect of CDSP. From the experimental results, it can be seen that the method proposed in this paper can effectively achieve 3D reconstruction of CDSP under different lighting conditions and backgrounds, provided that the contour features can be accurately extracted.</p>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Collected CDSP images and their reconstruction effects. <bold>(A)</bold> the collected CDSP images, <bold>(B)</bold> the 3D reconstruction effect of CDSP.</p>
</caption>
<graphic xlink:href="fphy-12-1477381-g012.tif"/>
</fig>
</sec>
</sec>
<sec id="s5">
<title>5 Conclusion</title>
<p>This paper proposes a rapid 3D reconstruction method of CDSP based on the single-view perspective projection imaging model to address the inefficiency of 3D pipeline reconstruction in tasks such as positioning and navigation for pipeline inspection drones and pipeline surface defect detection. This method first establishes a single-view perspective projection imaging model of CDSP, and under the premise of known radius, the geometric constraints of this model provide a direct method to solve the 3D pose of the CDSP axis. Subsequently, the results of the simulation experiment indicate that the reconstructed pipeline overlaps with the simulated pipeline, and under low noise conditions in the simulated images, the proposed method achieves an average reconstruction accuracy of <inline-formula id="inf388">
<mml:math id="m410">
<mml:mrow>
<mml:mn>0.013</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, with an average time-consuming of <inline-formula id="inf389">
<mml:math id="m411">
<mml:mrow>
<mml:mn>9.984</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. The results of the real experiment show that the average reconstruction accuracy of the proposed method is <inline-formula id="inf390">
<mml:math id="m412">
<mml:mrow>
<mml:mn>0.165</mml:mn>
<mml:mtext>mm</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, with an average time-consuming of <inline-formula id="inf391">
<mml:math id="m413">
<mml:mrow>
<mml:mn>1.917</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. While the accuracy is similar to traditional methods, the speed is improved by <inline-formula id="inf392">
<mml:math id="m414">
<mml:mrow>
<mml:mn>99.907</mml:mn>
<mml:mo>%</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, demonstrating that this method can effectively achieve rapid 3D reconstruction of CDSP, and has application value in tasks such as positioning and navigation for pipeline inspection drones and pipeline surface defect detection.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s6">
<title>Data availability statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec sec-type="author-contributions" id="s7">
<title>Author contributions</title>
<p>JY: Conceptualization, Formal Analysis, Methodology, Visualization, Writing&#x2013;original draft. XC: Conceptualization, Funding acquisition, Methodology, Project administration, Writing&#x2013;review and editing. HT: Methodology, Supervision, Writing&#x2013;review and editing. XL: Supervision, Writing&#x2013;review and editing. HZ: Methodology, Writing&#x2013;review and editing.</p>
</sec>
<sec sec-type="funding-information" id="s8">
<title>Funding</title>
<p>The author(s) declare that financial support was received for the research, authorship, and/or publication of this article. This research was supported by the National Natural Science Foundation of China (62201151, 62271148).</p>
</sec>
<sec sec-type="COI-statement" id="s9">
<title>Conflict of interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s10">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<label>1.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wu</surname>
<given-names>Y</given-names>
</name>
<name>
<surname>Gao</surname>
<given-names>L</given-names>
</name>
<name>
<surname>Chai</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>C</given-names>
</name>
<name>
<surname>Qiu</surname>
<given-names>F</given-names>
</name>
<etal/>
</person-group> <article-title>Overview of health-monitoring technology for long-distance transportation pipeline and progress in DAS technology application</article-title>. <source>Sensors</source> (<year>2024</year>) <volume>24</volume>(<issue>2</issue>):<fpage>413</fpage>. <pub-id pub-id-type="doi">10.3390/s24020413</pub-id>
</citation>
</ref>
<ref id="B2">
<label>2.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Nguyen</surname>
<given-names>HH</given-names>
</name>
<name>
<surname>Park</surname>
<given-names>JH</given-names>
</name>
<name>
<surname>Jeong</surname>
<given-names>HY</given-names>
</name>
</person-group>. <article-title>A simultaneous pipe-attribute and PIG-Pose estimation (SPPE) using 3-D point cloud in compressible gas pipelines</article-title>. <source>Sensors</source> (<year>2023</year>) <volume>23</volume>(<issue>3</issue>):<fpage>1196</fpage>. <pub-id pub-id-type="doi">10.3390/s23031196</pub-id>
</citation>
</ref>
<ref id="B3">
<label>3.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lyu</surname>
<given-names>F</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Ding</surname>
<given-names>Z</given-names>
</name>
<name>
<surname>Qiao</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Song</surname>
<given-names>D</given-names>
</name>
</person-group>. <article-title>Application research of ultrasonic-guided wave technology in pipeline corrosion defect detection: a review</article-title>. <source>Coatings</source> (<year>2024</year>) <volume>14</volume>(<issue>3</issue>):<fpage>358</fpage>. <pub-id pub-id-type="doi">10.3390/coatings14030358</pub-id>
</citation>
</ref>
<ref id="B4">
<label>4.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cirtautas</surname>
<given-names>D</given-names>
</name>
<name>
<surname>Samaitis</surname>
<given-names>V</given-names>
</name>
<name>
<surname>Ma&#x17e;eika</surname>
<given-names>L</given-names>
</name>
<name>
<surname>Rai&#x161;utis</surname>
<given-names>R</given-names>
</name>
<name>
<surname>&#x17d;ukauskas</surname>
<given-names>E</given-names>
</name>
</person-group>. <article-title>Selection of higher order lamb wave mode for assessment of pipeline corrosion</article-title>. <source>Metals</source> (<year>2022</year>) <volume>12</volume>(<issue>3</issue>):<fpage>503</fpage>. <pub-id pub-id-type="doi">10.3390/met12030503</pub-id>
</citation>
</ref>
<ref id="B5">
<label>5.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hussain</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Chaudhry</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Jamil</surname>
<given-names>I</given-names>
</name>
<name>
<surname>Kausar</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Hussain</surname>
<given-names>I</given-names>
</name>
</person-group>. <article-title>Review of prediction of stress corrosion cracking in gas pipelines using machine learning</article-title>. <source>Machines</source> (<year>2024</year>) <volume>12</volume>(<issue>1</issue>):<fpage>42</fpage>. <pub-id pub-id-type="doi">10.3390/machines12010042</pub-id>
</citation>
</ref>
<ref id="B6">
<label>6.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Zhu</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>C</given-names>
</name>
</person-group>. <article-title>Real-time 3D reconstruction of UAV acquisition system for the urban pipe based on RTAB-Map</article-title>. <source>Appl Sci</source> (<year>2023</year>) <volume>13</volume>(<issue>24</issue>):<fpage>13182</fpage>. <pub-id pub-id-type="doi">10.3390/app132413182</pub-id>
</citation>
</ref>
<ref id="B7">
<label>7.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cheng</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Zhong</surname>
<given-names>B</given-names>
</name>
<name>
<surname>Tan</surname>
<given-names>H</given-names>
</name>
<name>
<surname>Qiao</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>X</given-names>
</name>
</person-group>. <article-title>Correction for geometric distortion in the flattened representation of pipeline external surface</article-title>. <source>Eng Res Express</source> (<year>2024</year>) <volume>6</volume>(<issue>2</issue>):<fpage>025218</fpage>. <pub-id pub-id-type="doi">10.1088/2631-8695/ad4cb1</pub-id>
</citation>
</ref>
<ref id="B8">
<label>8.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Varady</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Martin</surname>
<given-names>RR</given-names>
</name>
<name>
<surname>Cox</surname>
<given-names>J</given-names>
</name>
</person-group>. <article-title>Reverse engineering of geometric models&#x2014;an introduction</article-title>. <source>Computer-aided Des</source> (<year>1997</year>) <volume>29</volume>(<issue>4</issue>):<fpage>255</fpage>&#x2013;<lpage>68</lpage>. <pub-id pub-id-type="doi">10.1016/s0010-4485(96)00054-1</pub-id>
</citation>
</ref>
<ref id="B9">
<label>9.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>He</surname>
<given-names>WM</given-names>
</name>
<name>
<surname>Sato</surname>
<given-names>H</given-names>
</name>
<name>
<surname>Umeda</surname>
<given-names>K</given-names>
</name>
<name>
<surname>Sone</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Tani</surname>
<given-names>Y</given-names>
</name>
<name>
<surname>Sagara</surname>
<given-names>M</given-names>
</name>
<etal/>
</person-group> <article-title>A new methodology to evaluate error space in CMM by sequential two points method</article-title>. In: <source>Mechatronics for safety, security and dependability in a new era</source>. <publisher-name>Elsevier</publisher-name> (<year>2007</year>). p. <fpage>371</fpage>&#x2013;<lpage>6</lpage>. <pub-id pub-id-type="doi">10.1016/B978-008044963-0/50075-8</pub-id>
</citation>
</ref>
<ref id="B10">
<label>10.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>L</given-names>
</name>
<name>
<surname>Wu</surname>
<given-names>G</given-names>
</name>
<name>
<surname>Zuo</surname>
<given-names>Y</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Hu</surname>
<given-names>H</given-names>
</name>
</person-group>. <article-title>A comprehensive review of vision-based 3D reconstruction methods</article-title>. <source>Sensors</source> (<year>2024</year>) <volume>24</volume>(<issue>7</issue>):<fpage>2314</fpage>. <pub-id pub-id-type="doi">10.3390/s24072314</pub-id>
</citation>
</ref>
<ref id="B11">
<label>11.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Isgro</surname>
<given-names>F</given-names>
</name>
<name>
<surname>Odone</surname>
<given-names>F</given-names>
</name>
<name>
<surname>Verri</surname>
<given-names>A</given-names>
</name>
</person-group>. <article-title>An open system for 3D data acquisition from multiple sensor</article-title>. In: <source>Seventh international workshop on computer architecture for machine perception (CAMP&#x27;05)</source>. <publisher-name>IEEE</publisher-name> (<year>2005</year>) p. <fpage>52</fpage>&#x2013;<lpage>7</lpage>. <pub-id pub-id-type="doi">10.1109/camp.2005.13</pub-id>
</citation>
</ref>
<ref id="B12">
<label>12.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Huang</surname>
<given-names>Z</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>D</given-names>
</name>
</person-group>. <article-title>A 3D reconstruction method based on one-dimensional galvanometer laser scanning system</article-title>. <source>Opt Lasers Eng</source> (<year>2023</year>) <volume>170</volume>:<fpage>107787</fpage>. <pub-id pub-id-type="doi">10.1016/j.optlaseng.2023.107787</pub-id>
</citation>
</ref>
<ref id="B13">
<label>13.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Al-Temeemy</surname>
<given-names>AA</given-names>
</name>
<name>
<surname>Al-Saqal</surname>
<given-names>SA</given-names>
</name>
</person-group>. <article-title>Laser-based structured light technique for 3D reconstruction using extreme laser stripes extraction method with global information extraction</article-title>. <source>Opt And Laser Technology</source> (<year>2021</year>) <volume>138</volume>:<fpage>106897</fpage>. <pub-id pub-id-type="doi">10.1016/j.optlastec.2020.106897</pub-id>
</citation>
</ref>
<ref id="B14">
<label>14.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hwang</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>D</given-names>
</name>
</person-group>. <article-title>3d pose estimation of catheter band markers based on single-plane fluoroscopy</article-title>. In: <source>2018 15th international conference on ubiquitous robots (UR)</source>. <publisher-name>IEEE</publisher-name> (<year>2018</year>) p. <fpage>723</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1109/urai.2018.8441789</pub-id>
</citation>
</ref>
<ref id="B15">
<label>15.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>L</given-names>
</name>
<name>
<surname>Ye</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Chan</surname>
<given-names>PL</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>GZ</given-names>
</name>
</person-group>. <article-title>Real-time surgical tool tracking and pose estimation using a hybrid cylindrical marker</article-title>. <source>Int J Comput Assist Radiol Surg</source> (<year>2017</year>) <volume>12</volume>:<fpage>921</fpage>&#x2013;<lpage>30</lpage>. <pub-id pub-id-type="doi">10.1007/s11548-017-1558-9</pub-id>
</citation>
</ref>
<ref id="B16">
<label>16.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lee</surname>
<given-names>JD</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>JY</given-names>
</name>
<name>
<surname>You</surname>
<given-names>YC</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>CH</given-names>
</name>
</person-group>. <article-title>Determining location and orientation of a labelled cylinder using point-pair estimation algorithm</article-title>. <source>Int J Pattern Recognition Artif Intelligence</source> (<year>1994</year>) <volume>8</volume>(<issue>01</issue>):<fpage>351</fpage>&#x2013;<lpage>71</lpage>. <pub-id pub-id-type="doi">10.1142/s0218001494000176</pub-id>
</citation>
</ref>
<ref id="B17">
<label>17.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Shiu</surname>
<given-names>H</given-names>
</name>
</person-group>. <article-title>Pose determination of circular cylinders using elliptical and side projections</article-title>. In: <source>IEEE 1991 international conference on systems engineering</source>. <publisher-name>IEEE</publisher-name> (<year>1991</year>) p. <fpage>265</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1109/icsyse.1991.161129</pub-id>
</citation>
</ref>
<ref id="B18">
<label>18.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Tang</surname>
<given-names>C</given-names>
</name>
<name>
<surname>Jin</surname>
<given-names>P</given-names>
</name>
</person-group>. <article-title>A 3D reconstruction method for pipeline inspection based on multi-vision</article-title>. <source>Measurement</source> (<year>2017</year>) <volume>98</volume>:<fpage>35</fpage>&#x2013;<lpage>48</lpage>. <pub-id pub-id-type="doi">10.1016/j.measurement.2016.11.004</pub-id>
</citation>
</ref>
<ref id="B19">
<label>19.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Doignon</surname>
<given-names>C</given-names>
</name>
<name>
<surname>Mathelin</surname>
<given-names>MD</given-names>
</name>
</person-group>. <article-title>A degenerate conic-based method for a direct fitting and 3-d pose of cylinders with a single perspective view</article-title>. In: <source>Proceedings 2007 IEEE international conference on robotics and automation</source>. <publisher-name>IEEE</publisher-name> (<year>2007</year>) p. <fpage>4220</fpage>&#x2013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.1109/robot.2007.364128</pub-id>
</citation>
</ref>
<ref id="B20">
<label>20.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cheng</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Sun</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>F</given-names>
</name>
<name>
<surname>Xie</surname>
<given-names>Y</given-names>
</name>
</person-group>. <article-title>Shape from apparent contours for bent pipes with constant diameter under perspective projection</article-title>. <source>Measurement</source> (<year>2021</year>) <volume>182</volume>:<fpage>109787</fpage>. <pub-id pub-id-type="doi">10.1016/j.measurement.2021.109787</pub-id>
</citation>
</ref>
<ref id="B21">
<label>21.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>Z</given-names>
</name>
</person-group>. <article-title>A flexible new technique for camera calibration</article-title>. <source>IEEE Trans pattern Anal machine intelligence</source> (<year>2000</year>) <volume>22</volume>(<issue>11</issue>):<fpage>1330</fpage>&#x2013;<lpage>4</lpage>. <pub-id pub-id-type="doi">10.1109/34.888718</pub-id>
</citation>
</ref>
<ref id="B22">
<label>22.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Levenberg</surname>
<given-names>K</given-names>
</name>
</person-group>. <article-title>A method for the solution of certain non-linear problems in least squares</article-title>. <source>Q Appl Mathematics</source> (<year>1944</year>) <volume>2</volume>(<issue>2</issue>):<fpage>164</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1090/qam/10666</pub-id>
</citation>
</ref>
<ref id="B23">
<label>23.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Trujillo-Pino</surname>
<given-names>A</given-names>
</name>
<name>
<surname>Krissian</surname>
<given-names>K</given-names>
</name>
<name>
<surname>Alem&#xe1;n-Flores</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Santana-Cedr&#xe9;s</surname>
<given-names>D</given-names>
</name>
</person-group>. <article-title>Accurate subpixel edge location based on partial area effect</article-title>. <source>Image Vis Comput</source> (<year>2013</year>) <volume>31</volume>(<issue>1</issue>):<fpage>72</fpage>&#x2013;<lpage>90</lpage>. <pub-id pub-id-type="doi">10.1016/j.imavis.2012.10.005</pub-id>
</citation>
</ref>
<ref id="B24">
<label>24.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Fischler</surname>
<given-names>MA</given-names>
</name>
<name>
<surname>Bolles</surname>
<given-names>RC</given-names>
</name>
</person-group>. <article-title>Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography</article-title>. <source>Commun ACM</source> (<year>1981</year>) <volume>24</volume>(<issue>6</issue>):<fpage>381</fpage>&#x2013;<lpage>95</lpage>. <pub-id pub-id-type="doi">10.1145/358669.358692</pub-id>
</citation>
</ref>
<ref id="B25">
<label>25.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sun</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Cheng</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Fan</surname>
<given-names>Q</given-names>
</name>
</person-group>. <article-title>Camera calibration based on two-cylinder target</article-title>. <source>Opt Express</source> (<year>2019</year>) <volume>27</volume>(<issue>20</issue>):<fpage>29319</fpage>&#x2013;<lpage>31</lpage>. <pub-id pub-id-type="doi">10.1364/OE.27.029319</pub-id>
</citation>
</ref>
</ref-list>
</back>
</article>