<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM/DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
    <!--<?xml-stylesheet type="text/xsl" href="article.xsl">-->
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:ns1="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.2" xml:lang="en">
	<front>
		<journal-meta>
			<journal-id journal-id-type="eissn">3034-1558</journal-id>
			<journal-title-group>
				<journal-title>Cifra. Information technology and telecommunications</journal-title>
			</journal-title-group>
			<publisher>
				<publisher-name>Cifra LLC</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.60797/itech.2026.12.3</article-id>
			<article-categories>
				<subj-group>
					<subject>Brief communication</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>A shell-based approach for modeling projections of the three-dimensional image and its reconstruction</article-title>
			</title-group>
			<contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<name>
						<surname>Zolotarev</surname>
						<given-names>Sergei Alekseevich</given-names>
					</name>
					<email>zolotarev@iaph.bas-net.by</email>
					<xref ref-type="aff" rid="aff-2">2</xref>
				</contrib>
				<contrib contrib-type="author">
					<name>
						<surname>Taruat</surname>
						<given-names>Akhmed Talat</given-names>
					</name>
					<email>ahmedtharwat6773@gmail.com</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
				</contrib>
			</contrib-group>
			<aff id="aff-1">
				<label>1</label>
				<institution>Belarusian National Technical University</institution>
			</aff>
			<aff id="aff-2">
				<label>2</label>
				<institution>Institute of Applied Physics of NAS of Belarus</institution>
			</aff>
			<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2026-10-14">
				<day>14</day>
				<month>10</month>
				<year>2026</year>
			</pub-date>
			<pub-date pub-type="collection">
				<year>2026</year>
			</pub-date>
			<volume>11</volume>
			<issue>12</issue>
			<fpage>1</fpage>
			<lpage>11</lpage>
			<history>
				<date date-type="received" iso-8601-date="2026-06-11">
					<day>11</day>
					<month>06</month>
					<year>2026</year>
				</date>
				<date date-type="accepted" iso-8601-date="2026-09-01">
					<day>01</day>
					<month>09</month>
					<year>2026</year>
				</date>
			</history>
			<permissions>
				<copyright-statement>Copyright: &amp;#x00A9; 2022 The Author(s)</copyright-statement>
				<copyright-year>2022</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
					<license-p>
						This is an open-access article distributed under the terms of the Creative Commons Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See 
						<uri xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</uri>
					</license-p>
					.
				</license>
			</permissions>
			<self-uri xlink:href="https://itech.cifra.science/archive/4-12-2026-october/10.60797/itech.2026.12.3"/>
			<abstract>
				<p>The approach based on the explicit definition of boundaries is considered in the 3D object description for piecewise homogeneous structures. This way provides an adequate description of the separating surfaces between different components of the studied objects. The approach is realized and investigated in general form for multilevel objects which have a finite number of different homogeneous parts and separating boundaries defined by arbitrary closed envelopes, namely lines for 2D problems and surfaces for the 3D space. The results of the algorithm test are represented using a number of multiconnected 3D objects. Application of the algorithm for calculation of the non-linear direct operator, which connects the shape of the studied object and its projections on the detector plane is illustrated by some examples for multicomponent 3D structures.</p>
			</abstract>
			<kwd-group>
				<kwd>iterative shell methods</kwd>
				<kwd> image reconstruction</kwd>
				<kwd> modeling of projections</kwd>
				<kwd> tomography of objects with a piecewise homogeneous structure</kwd>
				<kwd> algorithms for modeling and reconstruction</kwd>
			</kwd-group>
		</article-meta>
	</front>
	<body>
		<sec>
			<title>HTML-content</title>
			<p>1. Introduction</p>
			<p>There is a broad class of non-destructive testing problems whose solutions are piecewise constant functions. These objects typically include so-called piecewise homogeneous structures, objects or systems that have various homogeneous parts with constant linear attenuation coefficients, separated from each other by non-intersecting boundaries that represent closed two-dimensional continuous lines or three-dimensional shells. This class includes industrial pipelines, castings, and various mechanical engineering assemblies. For example, one important task is the reconstruction of the internal and external profiles of industrial pipes, which can be defined as continuous shells. From here on, the term &quot;shell&quot; will also be used for the two-dimensional case.</p>
			<p> Below, we will examine the key features of the shell reconstruction method and the principles of boundary description, allowing us to take into account important a priori information about the structure of a piecewise homogeneous object. The proposed approach was first described in </p>
			<p>[1][2][3]</p>
			<p> As mentioned previously, X-ray computed tomography has long been widely used to study the internal structure of various objects. Non- destructive fluoroscopic techniques allow for the reconstruction of internal properties of the studied material, such as the linear attenuation coefficient, by solving an inverse problem. The input data are ray integrals measured using linear detector matrices for 2D tomography and flat detector matrices used in 3D tomography. The result of the reconstruction process (inversion of the input data) is a function describing the internal structure of the object.</p>
			<p>In computer calculations, discrete models of objects are used to describe the parameters of the medium being studied. Typically, such discrete models are implemented as a system of basic functions defined on a two-dimensional or three-dimensional voxel grid. In general, discretizing the reconstruction space as a finite set of elementary volume elements (voxels) is a natural and proven method for creating discrete models of media. At the same time, there is a wide class of non-destructive testing problems whose solutions have the following characteristic features: the internal structure of objects consists of various homogeneous parts with constant environmental parameters, separated from each other by seamless boundary surfaces.</p>
			<p>In this case, using a standard discretization technique based on a voxel-based representation of the object has the following drawbacks: the enormous amount of information required for description in the case of three-dimensional objects, high computational costs, and the blurring of clear boundaries between different materials. This blurring effect can significantly degrade the quality of the reconstructed image of the structure being studied.</p>
			<p> It should be noted that a heterogeneous medium can be adequately described by precisely defining the dividing surfaces between homogeneous parts. A surface-oriented description allows for the definition of corresponding structures using closed shells. It should be emphasized that the use of the shell approach for mathematical modeling of the direct problem and for solving the reconstruction problem provides the following advantages:</p>
			<p>– this approach allows us to take into account important a priori information about the reconstruction object and more accurately localize the set that contains the exact solution to the reconstruction problem;</p>
			<p>– it allows one to describe dividing surfaces in the form of strict and clear boundaries, eliminating the blurring effect and significantly increasing the accuracy of the approximate solution;</p>
			<p>– it significantly (by several orders of magnitude) reduces the amount of information required to describe the reconstruction object and the time required to solve the direct and inverse problem (in practice, the reduction in calculation time can reach tens and hundreds of times).</p>
			<p>2. Materials and methods</p>
			<p>An adequate description of the structures under consideration can be achieved by using the tuple </p>
			<p> </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>A</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mrow>
						<mml:mi mathvariant="bold-italic">μ</mml:mi>
					</mml:mrow>
					<mml:mo>,</mml:mo>
					<mml:mrow>
						<mml:mi mathvariant="bold-italic">U</mml:mi>
					</mml:mrow>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:msup>
						<mml:mi>F</mml:mi>
						<mml:mrow>
							<mml:mi>m</mml:mi>
							<mml:mi>s</mml:mi>
							<mml:mi>r</mml:mi>
						</mml:mrow>
					</mml:msup>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>For X-ray diagnostics, operator </p>
			<p> It should be noted that the connection between the object's surface and its projected images is achieved through a nonlinear operator. This property poses a significant challenge when conceptualizing the shell approach. Addressing this challenge requires the development and analysis of specialized adaptive algorithms for solving the reconstruction problem. For example, it is possible to use variational methods for minimizing the residual functional on a given compact set. This entails typical requirements, such as defining the functional class of feasible solutions, selecting the initial approximation, constructing an optimal iterative procedure, and others. As a rule, all these issues are addressed in a specific formulation of the nondestructive testing problem, depending on the nature of the internal structure of the test object. At the same time, it is certainly appropriate and important to fundamentally consider the problems of non-destructive testing for piecewise homogeneous structures in the most general formulation as applied to multi-level objects that have a finite number of different homogeneous parts separated by boundaries defined by closed shells, namely: lines for 2-dimensional problems and surfaces for the 3-dimensional case.</p>
			<p> The development of an efficient numerical algorithm for solving the direct problem for this class of test objects simultaneously provides a convenient means for calculating the direct operator </p>
			<p> It is useful to point out two main ways of describing the surfaces of dividing boundaries between different parts of the material being studied:</p>
			<p> 1) The first approach is a discrete model of the surface as an irregular grid in a Cartesian coordinate system, represented by a set of flat polygons (a 3D CAD representation) or a set of segments for a 2D case. This is a widely known method for describing object boundaries and can be applied for various purposes, such as computer modeling. This approach to surface-based object representation has significant advantages due to the use of complex, non-uniform grids. It can be effectively applied to mathematical modeling of the direct problem and to the analysis of the operator that links the object to its projections.</p>
			<p>2) The second approach is a model based on a functional description of the object's boundaries on a regular grid. In this case, discrete surface points are defined using functions that describe the dependence of one spatial coordinate on others on a uniform grid. This model can be implemented in three-dimensional space using functions of two independent variables defined in a Cartesian, spherical, or cylindrical coordinate system. It is advisable, if possible, to use various combinations of coordinate systems to describe various shells defining the boundaries of the reconstructed object or to use vector functions for non-convex parts of the object. Obviously, the use of such a boundary representation depends on the specific test object and the available a priori information. This approach provides a convenient description of surfaces using regular grids of spatial points and can be applied to solving inverse reconstruction problems.</p>
			<p> It is possible to propose to use both of the above mentioned types of representation of object boundaries to solve the reconstruction problem, namely: one should use the representation of boundaries on irregular grids for arbitrary complex objects at the stage of calculating the direct operator and apply the functional description at the current step of the iterative procedure for minimizing the residual functional using the available a priori information for the given object.</p>
			<p>For the numerical implementation of the shell approach, it is important to develop an efficient algorithm for calculating the direct operator </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mo>∫</mml:mo>
						<mml:mrow>
							<mml:msub>
								<mml:mi>L</mml:mi>
								<mml:mrow>
									<mml:mi>i</mml:mi>
									<mml:mi>j</mml:mi>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
					</mml:msub>
					<mml:mi>μ</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>l</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mi>d</mml:mi>
					<mml:mi>l</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:msub>
						<mml:mi>F</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
							<mml:mi>j</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≡</mml:mo>
					<mml:mi>F</mml:mi>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msub>
							<mml:mi>x</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo>,</mml:mo>
						<mml:msub>
							<mml:mi>y</mml:mi>
							<mml:mrow>
								<mml:mi>j</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
				</mml:mrow>
			</mml:math>
			<p>Let S = (xs, ys, zs) be the coordinates of the source point. The straight line Lij = L (xi, yj) connects the source point S with the pixel (i, j). It should be noted that the integral (2) defines the operator A in equation (1) for a monoenergetic point source S and these integrals are only a component of the operator A for a polychromatic or volumetric radiation source. Thus, equation (2) characterizes the attenuation of an X-ray radiation source for a monoenergetic source and can be used for the same analysis of the attenuation of X-ray radiation from a polychromatic source by additionally considering the energy spectrum of the source and the energy dependence of the linear attenuation coefficient.</p>
			<p>We believe (, U) is a tuple of two characteristics that describe the internal structure of a piecewise homogeneous medium, where the components of the vector = {p} are constant parameters (linear coefficients weakening) of homogeneous parts of the control object (p =1, … , P) and U = {uq}.</p>
			<p>A closed shell is a set of shells between adjacent parts. In the three-dimensional case, we will use a triangulation model on an irregular mesh to describe the surfaces of individual closed shells. In the two-dimensional case, any shell will be a broken line formed by a set of segments of varying lengths.</p>
			<p>Equality A (, U) = F (x, y) for a multi-level structure that contains P different materials that do not intersect with each other can be represented as follows:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>F</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>x</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>y</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>p</mml:mi>
							<mml:mo>=</mml:mo>
							<mml:mn>1</mml:mn>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>P</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:msub>
						<mml:mi>μ</mml:mi>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>V</mml:mi>
						<mml:mrow>
							<mml:mi>p</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>x</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>y</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>where Vp (x, y) is the optical length of the component material with index p along the line connecting the source S with the point (x, y) on the projection plane. We impose the following restrictions on the class of objects under consideration: any straight line can intersect an arbitrary shell of an object only a finite number of times. For this class of objects, the optical length Vp (x, y) is equal to the finite sum of the lengths of the corresponding segments lying on the line L (x, y), which belong to the material with index p. Therefore, the calculation of the direct operator A in the equation (1) and the radial sum (2) can be reduced to the calculation of the optical length for each individual homogeneous component of the object being studied.</p>
			<p>Let a material with a linear attenuation coefficient m be located between the outer and inner shells of a multi-connected object. Then the calculation of the direct operator A can be realized by using the following expression containing the optical length,</p>
			<p>F = V. For multi-level structures that contain different materials, described by the vector {p} the computational scheme is given by equation (3).</p>
			<p>Let us point out that formula (3) was first given by V.P. Zagonov and S.V. Podolyako. They also proposed the initial concept of surface-oriented description of multicomponent objects of complex shape. Later, they used it in other works (see, for example, [4]), mainly for modeling the process of X-ray radiation passage through complex three-dimensional objects with a piecewise homogeneous structure. During the research, the author of the present work also joined in the development of this approach. Subsequently, the work on further development of this direction was carried out in parallel by two research groups: one from the M.V. Keldysh Institute of Applied Mathematics of the Russian Academy of Sciences, Russia (V.P. Zagonov and S.V. Podolyako) and the second from the Institute of Applied Physics of the National Academy of Sciences of Belarus (V.L. Vengrinovich and the author of this work). It should be said that all research work on the development of this scientific direction was carried out completely independently. The original high-speed mathematical algorithms for calculating the intersection of rays with two-dimensional and three-dimensional shells, as well as the software implementing these algorithms, were created by the author of this work independently and completely independent of similar developments by researchers at the Keldysh Institute of Applied Mathematics. It should be noted that, , where they outline their concept of this approach, have not published anywhere a detailed step-by-step algorithm for calculating the direct operator for both the two-dimensional and three-dimensional cases, and even more so, nowhere have the source texts of the software procedures implementing these algorithms been provided.</p>
			<p>For the first time, detailed mathematical algorithms and software procedures for calculating the operator linking the geometric shape of the shell of the object under study and its projection image on the detector plane are presented in the present paper. We immediately began to develop tomographic methods of shell reconstruction for real objects. The first publication on the three-dimensional reconstruction of the inner surface of a pipe was made in 2001 in issue No. 2 of the journal &quot;Technical Diagnostics and Non-Destructive Testing&quot; (Kiev) [3]. M.E. Zhukovsky, S.V. Podolyako, G.-R.  and concentrated their efforts on the numerical modeling of X-ray scattering processes in radiographic testing of materials [5], [6].</p>
			<p>2.1. Modeling projections of three-dimensional objects</p>
			<p>Without loss of generality, we can consider the algorithm's features for a single-level (binary) structure. Furthermore, we will even simplify the operator equation somewhat, assuming a single three-dimensional shell. If we have multiple shells, the direct operator calculation can be performed for each one in turn, accumulating the intersection points of rays with shells in a common array, which is then used to obtain ray integrals that take into account the intersections of rays with all three-dimensional boundary surfaces of a piecewise homogeneous object. Thus, the description of the mathematical algorithm for a single three-dimensional shell is sufficient for further consideration.</p>
			<p>Let us consider a nonlinear operator equation:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>A</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>F</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>where </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>F</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>F</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo>=</mml:mo>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">{</mml:mo>
						<mml:msubsup>
							<mml:mi>f</mml:mi>
							<mml:mrow>
								<mml:mi>n</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mi>m</mml:mi>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="true" fence="true" form="postfix">}</mml:mo>
					</mml:mrow>
					<mml:mi>;</mml:mi>
					<mml:mi>n</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>N</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>where</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>m</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">{</mml:mo>
						<mml:msubsup>
							<mml:mi>p</mml:mi>
							<mml:mrow>
								<mml:mi>j</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mi>n</mml:mi>
							</mml:mrow>
						</mml:msubsup>
						<mml:mi>:</mml:mi>
						<mml:mi>j</mml:mi>
						<mml:mo>=</mml:mo>
						<mml:mover>
							<mml:mrow>
								<mml:mn>1</mml:mn>
								<mml:mo>,</mml:mo>
								<mml:msub>
									<mml:mi>J</mml:mi>
									<mml:mrow>
										<mml:mi>n</mml:mi>
									</mml:mrow>
								</mml:msub>
							</mml:mrow>
							<mml:mo accent="true">―</mml:mo>
						</mml:mover>
						<mml:mo stretchy="true" fence="true" form="postfix">}</mml:mo>
					</mml:mrow>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>ϑ</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>J</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:msub>
						<mml:mi>J</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
				</mml:mrow>
			</mml:math>
			<p>Vector </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>x</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>y</mml:mi>
					<mml:mo>,</mml:mo>
					<mml:mi>z</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">{</mml:mo>
						<mml:msub>
							<mml:mi>M</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mi>:</mml:mi>
						<mml:mi>i</mml:mi>
						<mml:mo>=</mml:mo>
						<mml:mover>
							<mml:mrow>
								<mml:mn>1</mml:mn>
								<mml:mo>,</mml:mo>
								<mml:mi>I</mml:mi>
							</mml:mrow>
							<mml:mo accent="true">―</mml:mo>
						</mml:mover>
						<mml:mo stretchy="true" fence="true" form="postfix">}</mml:mo>
					</mml:mrow>
				</mml:mrow>
			</mml:math>
			<p>Operator </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>A</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">{</mml:mo>
						<mml:mrow>
							<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
							<mml:mi>A</mml:mi>
							<mml:mo stretchy="false">(</mml:mo>
							<mml:mover>
								<mml:mrow>
									<mml:mi>R</mml:mi>
								</mml:mrow>
								<mml:mo>→</mml:mo>
							</mml:mover>
							<mml:mo stretchy="false">(</mml:mo>
							<mml:mi>M</mml:mi>
							<mml:mo stretchy="false">)</mml:mo>
							<mml:msub>
								<mml:mo stretchy="false">)</mml:mo>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msub>
							<mml:mo stretchy="true" fence="true" form="postfix">}</mml:mo>
						</mml:mrow>
						<mml:mo>,</mml:mo>
						<mml:mi>n</mml:mi>
						<mml:mo>=</mml:mo>
						<mml:mover>
							<mml:mrow>
								<mml:mn>1</mml:mn>
								<mml:mo>,</mml:mo>
								<mml:mi>N</mml:mi>
							</mml:mrow>
							<mml:mo accent="true">―</mml:mo>
						</mml:mover>
						<mml:mo>.</mml:mo>
						<mml:mo stretchy="true" fence="true" form="postfix"/>
					</mml:mrow>
				</mml:mrow>
			</mml:math>
			<p>Here </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>A</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo>→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:msub>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>c</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>To solve the direct problem, we will consider the boundary surface as a set of elementary surface elements:</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>S</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mi>:</mml:mi>
					<mml:mi>u</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>U</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
					<mml:mo>,</mml:mo>
					<mml:mi>U</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mn>2</mml:mn>
					<mml:mi>·</mml:mi>
					<mml:mi>K</mml:mi>
					<mml:mi>·</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>L</mml:mi>
					<mml:mo>−</mml:mo>
					<mml:mn>1</mml:mn>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Each such element is a triangle whose vertices are the nodal points of the discrete lattice. Then</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>S</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mo>⋃</mml:mo>
					<mml:msub>
						<mml:mi>S</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
					<mml:msub>
						<mml:mi>S</mml:mi>
						<mml:mrow>
							<mml:msub>
								<mml:mi>u</mml:mi>
								<mml:mrow>
									<mml:mn>1</mml:mn>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
					</mml:msub>
					<mml:mo>⋂</mml:mo>
					<mml:msub>
						<mml:mi>S</mml:mi>
						<mml:mrow>
							<mml:msub>
								<mml:mi>u</mml:mi>
								<mml:mrow>
									<mml:mn>2</mml:mn>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
					</mml:msub>
					<mml:mo>=</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:msub>
						<mml:mi>u</mml:mi>
						<mml:mrow>
							<mml:mn>1</mml:mn>
						</mml:mrow>
					</mml:msub>
					<mml:mo>≠</mml:mo>
					<mml:msub>
						<mml:mi>u</mml:mi>
						<mml:mrow>
							<mml:mn>2</mml:mn>
						</mml:mrow>
					</mml:msub>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>Note that the boundaries of a triangle (i.e., its sides and vertices) do not necessarily belong to this surface element. The projection of a surface element </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
				</mml:mrow>
			</mml:math>
			<fig id="F1">
				<label>Figure 1</label>
				<caption>
					<p>Topological orientation of shadow triangles on the detector plane</p>
				</caption>
				<alt-text>Topological orientation of shadow triangles on the detector plane</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/73a56224-a420-471a-9049-5b01c6a0f893.png"/>
			</fig>
			<p>a) the projection of the triangle </p>
			<p>b) the boundaries of the triangle are established </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mi>;</mml:mi>
				</mml:mrow>
			</mml:math>
			<p>c) all pixels </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>p</mml:mi>
						<mml:mrow>
							<mml:mi>j</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mi>:</mml:mi>
					<mml:mi>j</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:msub>
								<mml:mi>J</mml:mi>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
				</mml:mrow>
			</mml:math>
			<p>d) the intersection points of the rays passing through the centers of the internal and boundary pixels of the triangle are calculated </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>σ</mml:mi>
						<mml:mrow>
							<mml:mi>u</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
				</mml:mrow>
			</mml:math>
			<p>Calculating intersection points with a surface is reduced to intersecting the corresponding rays with the plane defined by the element </p>
			<p>By calculating the distances between corresponding pairs of points and summing them, we determine the ray sum </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>c</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>p</mml:mi>
						<mml:mrow>
							<mml:mi>j</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mi>:</mml:mi>
					<mml:mi>j</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:msub>
								<mml:mi>J</mml:mi>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>A</mml:mi>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo>→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:msub>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>c</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>,</mml:mo>
					<mml:mi>n</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>N</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>δ</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:msubsup>
								<mml:mi>p</mml:mi>
								<mml:mrow>
									<mml:mn>1</mml:mn>
								</mml:mrow>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msubsup>
						</mml:mrow>
						<mml:mrow>
							<mml:msubsup>
								<mml:mi>p</mml:mi>
								<mml:mrow>
									<mml:msub>
										<mml:mi>J</mml:mi>
										<mml:mrow>
											<mml:mi>n</mml:mi>
										</mml:mrow>
									</mml:msub>
								</mml:mrow>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msubsup>
						</mml:mrow>
					</mml:msubsup>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">|</mml:mo>
						<mml:msubsup>
							<mml:mi>f</mml:mi>
							<mml:mrow>
								<mml:mi>n</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mi>c</mml:mi>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="false">(</mml:mo>
						<mml:mi>p</mml:mi>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mo>−</mml:mo>
						<mml:msubsup>
							<mml:mi>f</mml:mi>
							<mml:mrow>
								<mml:mi>n</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mi>m</mml:mi>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="false">(</mml:mo>
						<mml:mi>p</mml:mi>
						<mml:mo stretchy="false">)</mml:mo>
						<mml:mo stretchy="true" fence="true" form="postfix">|</mml:mo>
					</mml:mrow>
					<mml:mo>/</mml:mo>
					<mml:msubsup>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:msubsup>
								<mml:mi>p</mml:mi>
								<mml:mrow>
									<mml:mn>1</mml:mn>
								</mml:mrow>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msubsup>
						</mml:mrow>
						<mml:mrow>
							<mml:msubsup>
								<mml:mi>p</mml:mi>
								<mml:mrow>
									<mml:msub>
										<mml:mi>J</mml:mi>
										<mml:mrow>
											<mml:mi>n</mml:mi>
										</mml:mrow>
									</mml:msub>
								</mml:mrow>
								<mml:mrow>
									<mml:mi>n</mml:mi>
								</mml:mrow>
							</mml:msubsup>
						</mml:mrow>
					</mml:msubsup>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>m</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>A sequential search through all the nodal points of the boundary surface is performed. </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>M</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>p</mml:mi>
						<mml:mrow>
							<mml:msub>
								<mml:mi>j</mml:mi>
								<mml:mrow>
									<mml:mo>*</mml:mo>
								</mml:mrow>
							</mml:msub>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo>,</mml:mo>
					<mml:mi>n</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>N</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>Δ</mml:mi>
					<mml:msub>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>=</mml:mo>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>c</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>−</mml:mo>
					<mml:msubsup>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>m</mml:mi>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>Σ</mml:mi>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msub>
							<mml:mi>M</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>=</mml:mo>
					<mml:msub>
						<mml:mo>∑</mml:mo>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mi>Δ</mml:mi>
					<mml:msub>
						<mml:mi>f</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>p</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mi>·</mml:mi>
					<mml:mi>cos</mml:mi>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msubsup>
							<mml:mi>ψ</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mi>n</mml:mi>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>/</mml:mo>
					<mml:mi>N</mml:mi>
					<mml:mo>,</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>where </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>ψ</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msubsup>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>ϑ</mml:mi>
						<mml:mrow>
							<mml:mi>n</mml:mi>
						</mml:mrow>
					</mml:msub>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msub>
							<mml:mi>M</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
						</mml:msub>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<p>The magnitude of the node displacement will be equal to</p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mtable>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:mi>h</mml:mi>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msub>
										<mml:mi>M</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
									</mml:msub>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>=</mml:mo>
								<mml:msup>
									<mml:mi>λ</mml:mi>
									<mml:mrow>
										<mml:mo stretchy="false">(</mml:mo>
										<mml:mn>0</mml:mn>
										<mml:mo stretchy="false">)</mml:mo>
									</mml:mrow>
								</mml:msup>
								<mml:mi>·</mml:mi>
								<mml:mi>Σ</mml:mi>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msub>
										<mml:mi>M</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
									</mml:msub>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>,</mml:mo>
							</mml:mtd>
						</mml:mtr>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:mn>0</mml:mn>
							</mml:mtd>
							<mml:mtd columnalign="left">
								<mml:mi>l</mml:mi>
								<mml:mi>t</mml:mi>
								<mml:mi>;</mml:mi>
								<mml:msup>
									<mml:mi>λ</mml:mi>
									<mml:mrow>
										<mml:mo stretchy="false">(</mml:mo>
										<mml:mn>0</mml:mn>
										<mml:mo stretchy="false">)</mml:mo>
									</mml:mrow>
								</mml:msup>
							</mml:mtd>
							<mml:mtd columnalign="left">
								<mml:mi>l</mml:mi>
								<mml:mi>t</mml:mi>
								<mml:mi>;</mml:mi>
								<mml:mn>1</mml:mn>
								<mml:mo>,</mml:mo>
							</mml:mtd>
						</mml:mtr>
					</mml:mtable>
				</mml:mrow>
			</mml:math>
			<p>where </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msup>
						<mml:mi>λ</mml:mi>
						<mml:mrow>
							<mml:mo stretchy="false">(</mml:mo>
							<mml:mn>0</mml:mn>
							<mml:mo stretchy="false">)</mml:mo>
						</mml:mrow>
					</mml:msup>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>M</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<code>[LATEX_FORMULA]\delta_{m i d}(\vec{R}(M))&amp;gt;0,2,[/LATEX_FORMULA]</code>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>δ</mml:mi>
						<mml:mrow>
							<mml:mi>m</mml:mi>
							<mml:mi>i</mml:mi>
							<mml:mi>d</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mo stretchy="false">(</mml:mo>
					<mml:mi>M</mml:mi>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo stretchy="false">)</mml:mo>
					<mml:mo>≤</mml:mo>
					<mml:mn>0</mml:mn>
					<mml:mo>,</mml:mo>
					<mml:mn>2</mml:mn>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msub>
						<mml:mi>M</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
					</mml:msub>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<p>After shifting all the nodal points, </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:msubsup>
						<mml:mi>M</mml:mi>
						<mml:mrow>
							<mml:mi>i</mml:mi>
						</mml:mrow>
						<mml:mrow>
							<mml:mo stretchy="false">(</mml:mo>
							<mml:mn>1</mml:mn>
							<mml:mo stretchy="false">)</mml:mo>
						</mml:mrow>
					</mml:msubsup>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mtable>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:mi>Σ</mml:mi>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msubsup>
										<mml:mi>M</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
										<mml:mrow>
											<mml:mo stretchy="false">(</mml:mo>
											<mml:mi>q</mml:mi>
											<mml:mo stretchy="false">)</mml:mo>
										</mml:mrow>
									</mml:msubsup>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>=</mml:mo>
								<mml:msub>
									<mml:mo>∑</mml:mo>
									<mml:mrow>
										<mml:mi>n</mml:mi>
									</mml:mrow>
								</mml:msub>
								<mml:mi>Δ</mml:mi>
								<mml:msubsup>
									<mml:mi>f</mml:mi>
									<mml:mrow>
										<mml:mi>n</mml:mi>
									</mml:mrow>
									<mml:mrow>
										<mml:mo stretchy="false">(</mml:mo>
										<mml:mi>q</mml:mi>
										<mml:mo stretchy="false">)</mml:mo>
									</mml:mrow>
								</mml:msubsup>
								<mml:mo stretchy="false">(</mml:mo>
								<mml:mi>p</mml:mi>
								<mml:mo stretchy="false">)</mml:mo>
								<mml:mi>·</mml:mi>
								<mml:mi>cos</mml:mi>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msubsup>
										<mml:mi>ψ</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
										<mml:mrow>
											<mml:mi>n</mml:mi>
										</mml:mrow>
									</mml:msubsup>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>/</mml:mo>
								<mml:mi>N</mml:mi>
								<mml:mo>,</mml:mo>
							</mml:mtd>
						</mml:mtr>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:mi>h</mml:mi>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msubsup>
										<mml:mi>M</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
										<mml:mrow>
											<mml:mo stretchy="false">(</mml:mo>
											<mml:mi>q</mml:mi>
											<mml:mo stretchy="false">)</mml:mo>
										</mml:mrow>
									</mml:msubsup>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>=</mml:mo>
								<mml:msup>
									<mml:mi>λ</mml:mi>
									<mml:mrow>
										<mml:mo stretchy="false">(</mml:mo>
										<mml:mi>q</mml:mi>
										<mml:mo stretchy="false">)</mml:mo>
									</mml:mrow>
								</mml:msup>
								<mml:mi>·</mml:mi>
								<mml:mo>∑</mml:mo>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:msubsup>
										<mml:mi>M</mml:mi>
										<mml:mrow>
											<mml:mi>i</mml:mi>
										</mml:mrow>
										<mml:mrow>
											<mml:mo stretchy="false">(</mml:mo>
											<mml:mi>q</mml:mi>
											<mml:mo stretchy="false">)</mml:mo>
										</mml:mrow>
									</mml:msubsup>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>,</mml:mo>
							</mml:mtd>
						</mml:mtr>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:mn>0</mml:mn>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">⟨</mml:mo>
									<mml:msup>
										<mml:mi>λ</mml:mi>
										<mml:mrow>
											<mml:mo stretchy="false">(</mml:mo>
											<mml:mi>q</mml:mi>
											<mml:mo stretchy="false">)</mml:mo>
										</mml:mrow>
									</mml:msup>
									<mml:mi>⟨</mml:mi>
									<mml:mn>1</mml:mn>
									<mml:mo>.</mml:mo>
									<mml:mo stretchy="true" fence="true" form="postfix"/>
								</mml:mrow>
							</mml:mtd>
						</mml:mtr>
					</mml:mtable>
				</mml:mrow>
			</mml:math>
			<p>After introducing the next set of corrections, </p>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mi>h</mml:mi>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msubsup>
							<mml:mi>M</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mo stretchy="false">(</mml:mo>
								<mml:mi>q</mml:mi>
								<mml:mo stretchy="false">)</mml:mo>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mover>
						<mml:mrow>
							<mml:mi>R</mml:mi>
						</mml:mrow>
						<mml:mo stretchy="true">→</mml:mo>
					</mml:mover>
					<mml:mrow>
						<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
						<mml:msubsup>
							<mml:mi>M</mml:mi>
							<mml:mrow>
								<mml:mi>i</mml:mi>
							</mml:mrow>
							<mml:mrow>
								<mml:mo stretchy="false">(</mml:mo>
								<mml:mi>q</mml:mi>
								<mml:mo>+</mml:mo>
								<mml:mn>1</mml:mn>
								<mml:mo stretchy="false">)</mml:mo>
							</mml:mrow>
						</mml:msubsup>
						<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
					</mml:mrow>
					<mml:mo>,</mml:mo>
					<mml:mi>i</mml:mi>
					<mml:mo>=</mml:mo>
					<mml:mover>
						<mml:mrow>
							<mml:mn>1</mml:mn>
							<mml:mo>,</mml:mo>
							<mml:mi>I</mml:mi>
						</mml:mrow>
						<mml:mo accent="true">―</mml:mo>
					</mml:mover>
					<mml:mo>.</mml:mo>
				</mml:mrow>
			</mml:math>
			<mml:math display="inline">
				<mml:mrow>
					<mml:mtable>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>≥</mml:mo>
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo>−</mml:mo>
												<mml:mn>1</mml:mn>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
							</mml:mtd>
						</mml:mtr>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>≥</mml:mo>
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo>−</mml:mo>
												<mml:mn>2</mml:mn>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
							</mml:mtd>
						</mml:mtr>
						<mml:mtr>
							<mml:mtd columnalign="left">
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>≥</mml:mo>
								<mml:msub>
									<mml:mi>δ</mml:mi>
									<mml:mrow>
										<mml:mtext>mid </mml:mtext>
									</mml:mrow>
								</mml:msub>
								<mml:mrow>
									<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
									<mml:mover>
										<mml:mrow>
											<mml:mi>R</mml:mi>
										</mml:mrow>
										<mml:mo stretchy="true">→</mml:mo>
									</mml:mover>
									<mml:mrow>
										<mml:mo stretchy="true" fence="true" form="prefix">(</mml:mo>
										<mml:msup>
											<mml:mi>M</mml:mi>
											<mml:mrow>
												<mml:mo stretchy="false">(</mml:mo>
												<mml:mi>q</mml:mi>
												<mml:mo>−</mml:mo>
												<mml:mn>3</mml:mn>
												<mml:mo stretchy="false">)</mml:mo>
											</mml:mrow>
										</mml:msup>
										<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
									</mml:mrow>
									<mml:mo stretchy="true" fence="true" form="postfix">)</mml:mo>
								</mml:mrow>
								<mml:mo>.</mml:mo>
							</mml:mtd>
						</mml:mtr>
					</mml:mtable>
				</mml:mrow>
			</mml:math>
			<p> </p>
			<p>3. Results and discussion</p>
			<p>Below are images of orthogonal sections of a three-dimensional Shepp–Logan phantom and a perspective view of this phantom. The Shepp–Logan phantom projections were calculated using the ray integral algorithm described above in C++. A verification reconstruction of this phantom was also performed, confirming the high efficiency of modeling X-ray projections and, accordingly, reconstructing the phantom image from the model projections.</p>
			<fig id="F2">
				<label>Figure 2</label>
				<caption>
					<p>Three model projections of the phantom for planar survey geometry</p>
				</caption>
				<alt-text>Three model projections of the phantom for planar survey geometry</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/2946b5ee-a099-4266-9884-4e4163b5f73f.png"/>
			</fig>
			<fig id="F3">
				<label>Figure 3</label>
				<caption>
					<p>Orthogonal sections of the phantom by planes XOY, XOZ, YOZ</p>
				</caption>
				<alt-text>Orthogonal sections of the phantom by planes XOY, XOZ, YOZ</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/616a54da-316e-4ceb-be3d-c8dc612bb310.png"/>
			</fig>
			<fig id="F4">
				<label>Figure 4</label>
				<caption>
					<p>Perspective view of the phantom in VGStudio MAX</p>
				</caption>
				<alt-text>Perspective view of the phantom in VGStudio MAX</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/f3313948-885c-4834-9bf0-2ebfd64b4081.png"/>
			</fig>
			<p>As an example, to illustrate how the shell-based tomographic reconstruction method works, we present a image of the central section of a three-dimensional Shepp–Logan phantom. This image demonstrates how, from an initial approximation of the internal homogeneous parts of this object (ellipsoids), which are cylindrical surfaces of arbitrary radius located along the longitudinal axes of symmetry of the ellipsoids, the spatial shape of the reconstructed internal homogeneous parts of this object (ellipsoids) is quickly and accurately reconstructed. Note that each of the reconstructed ellipsoids has a density (linear attenuation coefficient) that may differ from the density of other ellipsoids.</p>
			<fig id="F5">
				<label>Figure 5</label>
				<caption>
					<p>Image Cross-section XOY of the Shepp–Logan phantom illustrating result of the reconstruction process</p>
				</caption>
				<alt-text>Image Cross-section XOY of the Shepp–Logan phantom illustrating result of the reconstruction process</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/48203416-9dc8-4823-9089-9e250b1a0ce7.png"/>
			</fig>
			<p>The proposed method was tested on a sample from the Institute of Materials Science and Diagnostics in Germany, which consisted of a stainless steel pipe. The outer diameter of the pipe was 112 mm. The wall thickness was 3,6 mm. The inner surface of the pipe had depressions and protrusions of various sizes. To test the resolution of the algorithm, four wires with diameters of 1,8 mm,1,4 mm, 1,25 mm and 0,8 mm were attached to the inner surface of the pipe. The tube was illuminated with an iridium source. The exposure time was 6 minutes. Five images were obtained at tube rotation angles of +45, +25, 0, -25, and -45 degrees. The pixel size of the original images was 50 microns. The source-detector distance was 1604 mm, the distance from the lower edge of the tube to the detector plane was 12 mm, which resulted in relatively strong scattering. For this geometry, the radiation source can be considered a point source, i.e., illumination was performed by a conical beam. The linear attenuation coefficient of the pipe material </p>
			<p>The residual functional was minimized to a value of 0,0785. Direct comparison with the actual object revealed that the reconstruction error was approximately 2%, and the artifact magnitude was 1%. The average deviation of the reconstructed internal radius of the pipe from the true value in areas where there were no protrusions or depressions was 0,1 mm.</p>
			<p>Figures 6–8 show the experimental projections with</p>
			<fig id="F6">
				<label>Figure 6</label>
				<caption>
					<p>Projections with intensities of unabsorbed radiation for angles of 0 degrees and 25 degrees</p>
				</caption>
				<alt-text>Projections with intensities of unabsorbed radiation for angles of 0 degrees and 25 degrees</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/45b19a9f-9d77-44ce-be44-788624db3f7c.png"/>
			</fig>
			<fig id="F7">
				<label>Figure 7</label>
				<caption>
					<p>Projections with intensities of unabsorbed radiation for angles of 45 degrees and -25 degrees</p>
				</caption>
				<alt-text>Projections with intensities of unabsorbed radiation for angles of 45 degrees and -25 degrees</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/0b5037ed-687d-4e85-9c1a-f0468c74a9aa.png"/>
			</fig>
			<fig id="F8">
				<label>Figure 8</label>
				<caption>
					<p>Projection with intensities of unabsorbed radiation for an angle of -45 degrees</p>
				</caption>
				<alt-text>Projection with intensities of unabsorbed radiation for an angle of -45 degrees</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/d1e598a4-5293-48fc-884c-3c4158e1cae8.png"/>
			</fig>
			<fig id="F9">
				<label>Figure 9</label>
				<caption>
					<p>Reconstructed inner surface of the pipe, rotated by the polar angle</p>
				</caption>
				<alt-text>Reconstructed inner surface of the pipe, rotated by the polar angle</alt-text>
				<graphic ns1:href="/media/images/2026-10-13/0dfa04de-4cb0-4f66-a275-1c0c33833867.png"/>
			</fig>
			<p>4. Conclusion</p>
			<p>The boundary description approach based on the explicit definition of boundaries has been proposed and investigated for piecewise homogeneous structures. This way provides the adequate description of the separating surfaces between different components of the studied objects and gives evident computational advantages. The main features of this surface representation approach, difficulties of its realisation and principles for taking into account the essential a priory information have been analysed. The algorithm for solving the 3D direct problem was proposed and realised for widespread model of cone-beam X-ray NDT. It allows considering the multi-component objects, which have a finite number of different homogeneous parts and the separating boundaries defined by arbitrary closed surfaces. The algorithm can be used for analysis of the connection between the internal structure of various objects and its projection images. It was applied to a number of the reconstruction problems of piecewise homogeneous structures with unknown medium parameters and separating boundaries. This article discusses a method for modeling X-ray projections from piecewise homogeneous objects that can be described by closed, non-intersecting three-dimensional shells filled with materials with constant linear attenuation coefficients, which may vary for different shells. The shells are described by spatial meshes of triangular elements. An algorithm for calculating ray intersections with three-dimensional shells is described, enabling the calculation of intersection lengths for modeling ray sums (integrals) on the plane of two-dimensional detectors. A topological diagram of possible locations of triangular element projections on detector planes is presented, enabling the determination of the affiliation of boundaries with a triangular surface element based on its projections onto the detector plane.</p>
			<p>The possibility of reconstructing piecewise homogeneous objects by deforming the boundaries of shells containing material with a constant linear attenuation coefficient for each individual shell is demonstrated. Examples of reconstruction for a three-dimensional Shepp–Logan phantom and a test tube from the Institute of Materials Science and Diagnostics in Germany are given.</p>
		</sec>
		<sec sec-type="supplementary-material">
			<title>Additional File</title>
			<p>The additional file for this article can be found as follows:</p>
			<supplementary-material xmlns:xlink="http://www.w3.org/1999/xlink" id="S1" xlink:href="https://doi.org/10.5334/cpsy.78.s1">
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://itech.cifra.science/media/articles/26112.docx">26112.docx</inline-supplementary-material>]-->
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://itech.cifra.science/media/articles/26112.pdf">26112.pdf</inline-supplementary-material>]-->
				<label>Online Supplementary Material</label>
				<caption>
					<p>
						Further description of analytic pipeline and patient demographic information. DOI:
						<italic>
							<uri>https://doi.org/10.60797/itech.2026.12.3</uri>
						</italic>
					</p>
				</caption>
			</supplementary-material>
		</sec>
	</body>
	<back>
		<ack>
			<title>Acknowledgements</title>
			<p/>
		</ack>
		<sec>
			<title>Competing Interests</title>
			<p/>
		</sec>
		<ref-list>
			<ref id="B1">
				<label>1</label>
				<mixed-citation publication-type="confproc">Vengrinovich V.L. Iteratsionnye metody tomografii [Iterative Methods in Tomography] / V.L. Vengrinovich, S.A. Zolotarev. — Minsk : Belaruskaya navuka, 2009. — 227 p. [in Russian]</mixed-citation>
			</ref>
			<ref id="B2">
				<label>2</label>
				<mixed-citation publication-type="confproc">Zolotarev S.A. Rekonstruktivnye obolochechnye metody tomograficheskogo kontrolya i novye vychislitel'nye algoritmy promyshlennoj tomografii [Reconstructive shell methods of tomographic control and new computational algorithms for industrial tomography] : dis. … of Grand PhD in Engineering : 05.11.13, 05.13.01 / S.A. Zolotarev. — Minsk, 2010. — 241 p. [in Russian]</mixed-citation>
			</ref>
			<ref id="B3">
				<label>3</label>
				<mixed-citation publication-type="confproc">Zolotarev S.A. 3-hmernaya rekonstrukciya vnutrennej poverhnosti dvuhsvyaznogo binarnogo ob'ekta po malomu chislu proekcij [Three-dimensional reconstruction of the internal surface of a doubly connected binary object based on a small number of projections] / S.A. Zolotarev, V.L. Vengrinovich, G.-R. Tillak // Tekhnicheskaya diagnostika i nerazrushayushchij kontrol' [Technical Diagnostics and Non-Destructive Testing]. — 2001. — № 2. — P. 8–11. [in Russian]</mixed-citation>
			</ref>
			<ref id="B4">
				<label>4</label>
				<mixed-citation publication-type="confproc">Zagonov V.P. Primenenie poverkhnostno orientirovannogo opisaniya ob&quot;ektov dlya modelirovaniya transformatsii rentgenovskogo izlucheniya v zadachakh vychislitel'noj diagnostiki [Application of surface-oriented description of objects for modeling the transformation of X-ray radiation in problems of computational diagnostics] / V.P. Zagonov, M.E. Zhukovsky, S.V. Podolyako [et al.] // Matematicheskoe modelirovanie [Mathematical Modeling]. — 2004. — Vol. 16. — № 5. — P. 103–116. [in Russian]</mixed-citation>
			</ref>
			<ref id="B5">
				<label>5</label>
				<mixed-citation publication-type="confproc">Zhukovsky M.E. Metodika chislennogo issledovaniya vliyaniya rasseyannogo izlucheniya v radiograficheskikh zadachakh [Numerical technique for analysis of influencing the scattering radiation in radiographic tasks] / M.E. Zhukovsky, S.V. Podolyako, E.G. Lukyanova // Preprinty Instituta prikladnoj matematiki im. M.V. Keldysha RAN [Preprints of the Keldysh Institute of Applied Mathematics of the Russian Academy of Sciences]. — 2005. — № 102. — 22 p. [in Russian]</mixed-citation>
			</ref>
			<ref id="B6">
				<label>6</label>
				<mixed-citation publication-type="confproc">Zhukovsky M.E. Chislennoe modelirovanie protsessov rasseyaniya rentgenovskogo izlucheniya pri radiograficheskom kontrole materialov [Numerical simulation of X-ray scattering processes during radiographic inspection of materials] / M.E. Zhukovsky, S.V. Podolyako, G.-R. Jaenisch [et al.] // Defektoskopiya [Russian Journal of Nondestructive Testing]. — 2006. — № 6. — P. 43–57. [in Russian]</mixed-citation>
			</ref>
			<ref id="B7">
				<label>7</label>
				<mixed-citation publication-type="confproc">Research and Development of Advanced 3D X-Ray Tomography (theory, algorithms, software, concept of application) using Maximum-Entropy Method and Statistical Approach to a Priori Knowledge Consideration : Final Report INTAS-96-2240. — Berlin : Federal Institute for Materials Research and Testing, 2000. — URL: https://cordis.europa.eu/project/id/INTAS-96-2240 (accessed: 13.08.2026).</mixed-citation>
			</ref>
			<ref id="B8">
				<label>8</label>
				<mixed-citation publication-type="confproc"> Vengrinovich V.L. Tomographic imaging and monitoring of pipe wall thickness based on limited X-ray data / V.L. Vengrinovich, S.A. Zolotarev, U. Evert [et al.] // Technical Diagnostics and Non-Destructive Testing. — 2004. — № 3. — P. 41–45. [in Russian]</mixed-citation>
			</ref>
			<ref id="B9">
				<label>9</label>
				<mixed-citation publication-type="confproc">Vengrinovich V.L. O vozmozhnosti rekonstruktsii vnutrennego profilya truby po malomu chislu proektsij [On the possibility of reconstructing the internal profile of a pipe from a small number of] / V.L. Vengrinovich, S.A. Zolotarev, A.P. Kuntsevich // Problemy bezopasnosti i nadyozhnosti truboprovodnogo transporta [Problems of Safety and Reliability of Pipeline Transport] : II Scientific and Technical Conference. — Novopolotsk, 1999. — P. 128–132. [in Russian]</mixed-citation>
			</ref>
			<ref id="B10">
				<label>10</label>
				<mixed-citation publication-type="confproc">Vengrinovich V.L. Tryokhmernaya tomograficheskaya vizualizatsiya trub v protsesse ehkspluatatsii [Three-dimensional tomographic imaging of pipes during operation] / V.L. Vengrinovich, S.A. Zolotarev, Yu.B. Denkevich [et al.] // Sbornik trudov 4-j Natsional'noj nauchno-tekhnicheskoj konferentsii, NKTD-2003 [Collection of Works of the 4th National Scientific and Technical Conference, NKTD-2003]. — Kyiv, 2003. — P. 46–50. [in Russian]</mixed-citation>
			</ref>
		</ref-list>
	</back>
	<fundings/>
</article>