3D cephalometric scheme for accurately quantifying craniofacial symmetry and facial growth (Matlab code implementation)

Welcome to this blog

Advantages of bloggers:Blog content should be as thoughtful and logical as possible for the convenience of readers.

Motto:He who travels a hundred miles is half as good as ninety.

The directory of this article is as follows:

Table of Contents

1 Overview

2 Operation results

3 References

4 Matlab code, data, literature


1 Overview

Cephalometric analysis is used to evaluate facial growth and study anatomical relationships within the face. Cephalometric assessment is based on two-dimensional radiographic images in the sagittal or coronal plane and is an inherently inaccurate method. The widespread availability of 2D imaging techniques such as computed tomography and magnetic resonance imaging enables routine 3D analysis of facial morphology. 3D cephalometry not only allows more accurate quantification of craniofacial morphology and longitudinal growth, but also distinguishes subtle changes in occlusion. However, reliable protocols for calculating craniofacial symmetry and quantifying craniofacial morphology remain a subject of extensive research. Here, a 3D cephalometric analysis protocol for identifying natural head position (NHP) and accurately quantifying facial growth and facial asymmetry is presented and evaluated. A phantom study was performed to evaluate the performance of this protocol and to quantify the ability to repeatedly and reliably align the skull with the NHP and to quantify the accuracy with which facial growth and facial asymmetry can be measured.

Cephalometric analysis is used to assess facial growth, study anatomical relationships within the face, and as a routine tool in surgical treatment planning for orthodontics and craniomaxillofacial deformities. Standard cephalometric assessment is based on two-dimensional radiographs taken in the sagittal plane (lateral cephalogram) or coronal plane (posterior cephalogram), in which multiple landmarks, lines, and angles are identified to quantify the vertical and horizontal aspects of the face relation. The analysis depends primarily on the accurate and reproducible definition of standardized head positions and therefore the patient is imaged in a custom-made image acquisition system [2]. Regardless of the screening protocol, cephalometric images may be affected by magnification artifacts, craniofacial asymmetry, and anatomical superimposition, all of which can lead to imprecision and inaccuracy in traditional assessment methods of facial morphology.

Two-dimensional cephalometry is an inherently inaccurate method involving the quantification of small increments of facial growth and the analysis of transverse dimensions, particularly facial asymmetry. The accuracy of contemporary cephalometric analysis is further complicated by variability, inconsistency, and errors in image capture, image quality, and landmark identification, as well as limited intra- and inter-observer reliability and reproducibility [2]. The inability to detect subtle changes in craniofacial morphology limits the clinical application of this technique and hinders its research usefulness in areas such as the quantification of longitudinal growth or the differentiation of subtle changes in occlusion, such as interapical and retracted contact locations. To date, no technology can provide an accurate virtual representation of dental occlusion [2], and study models and facebow recordings are currently the gold standard in dentistry for reproducing inter-occlusal relationships.

The widespread availability of 3D imaging technologies, such as computed tomography (CT), cone beam CT (CBCT), and magnetic resonance imaging (MRI), has enabled routine 3D analysis of facial morphology. Three-dimensional reconstructive cephalometry has several advantages over traditional cephalometry. It avoids the need for standardized fixation of the head and allows a posteriori definition of anatomical head position. It also prevents the structural magnification and distortion inherent in the imaging process while enabling a comprehensive assessment of 3D craniofacial morphology, which is important for preoperative assessment, surgical planning, and postoperative evaluation [3]. 1D imaging technology has the potential to provide significant accuracy improvements, but accurate translation of mature 3D concepts into a 2D framework requires further development. Studies of 3D cephalometry have shown conflicting results, with some studies concluding that it provides a more accurate assessment of craniofacial anatomy [3,4,5], while others conclude that there is no statistically significant difference between the two techniques. learning differences [6,7], or not as accurate as 8D technology [2].

The most critical aspect of 3D cephalometric assessment is the accurate positioning of the skull in space, requiring accurate definition of the cranial symmetry plane and the appropriate anatomical framework of the head. In 2D analysis of lateral cephalograms, the skull is positioned by identifying true horizontal or true vertical orientation, and S is identified as a reference point for image overlay and comparison. The Frankfurt Horizontal (FH) plane is used to orient lateral cephalometric images in some specific analyses, requiring the identification of two bilateral landmarks (porion, Po and orbitale, Or) which are not compatible with the use of 2D imaging due to the natural asymmetry of the human face. The evaluations are not on the same plane. Furthermore, FH-related landmarks are among the most subjective and therefore easily misidentified [3,5]. Another approach is to define a true vertical direction, such as the Nasion-Pogonion line [10]. The advantage of this method is based on the identification of nose (N) and pogonion (Pog), which are also less subjective than Po and Or [11] and can be considered to be located on the symmetry plane of the head. These landmarks provide direct information about facial midline structures and are not affected by anatomical changes due to facial asymmetry. Furthermore, during childhood and adolescence, craniofacial growth is characterized by relatively stable skull base and foramen magnum, compared with significant expansion of the cranial vault and distal and forward growth of the maxilla and mandible. Remain relatively unchanged [5,1,12]. In a 13D environment, the alkaline skull can provide a reliable reference structure for further craniofacial growth assessment [3].

The development of a consistent and reliable 3D cephalometric workflow will provide clinicians with valuable tools for 3D characterization and quantification of facial growth, assessment of dentofacial relationships and subsequent anatomically accurate orthodontic and surgical planning, and Evaluate treatment outcomes. We present a protocol for accurate estimation of craniofacial symmetry, using random cranial orientations, facial growth vectors, and different types of facial asymmetry to evaluate this. The null hypothesis tested was that 3D methods of analyzing facial growth and asymmetry cannot be reliably quantified. An alternative hypothesis is that the proposed 3D algorithm can accurately quantify craniofacial symmetry planes, facial growth and facial asymmetry.

2 Running results

Part of the code:

function [v, f, n, name] = stlReadAscii(fileName)
%STLREADASCII reads a STL file written in ASCII format
%V are the vertices
%F are the faces
%N are the normals
%NAME is the name of the STL object (NOT the name of the STL file)

%======================
% STL ascii file format
%======================
% ASCII STL files have the following structure. Technically each facet
% could be any 2D shape, but in practice only triangular facets tend to be
% used. The present code ONLY works for meshes composed of triangular
% facets.
%
% solid object_name
% facet normal x y z
% outer loop
% vertex x y z
% vertex x y z
% vertex x y z
%endloop
%endfacet
%
% <Repeat for all facets...>
%
% endsolid object_name

fid = fopen(fileName);
cellcontent = textscan(fid,'%s','delimiter','\
'); % read all the file and put content in cells
content = cellcontent{:}(logical(~strcmp(cellcontent{:},''))); % remove all blank lines
fclose(fid);

% read the STL name
line1 = char(content(1));
if (size(line1,2) >= 7)
    name = line1(7:end);
else
    name = 'Unnamed Object';
end

% read the vector normals
normals = char(content(logical(strncmp(content,'facet normal',12))));
n = str2num(normals(:,13:end));

% read the vertex coordinates (vertices)
vertices = char(content(logical(strncmp(content,'vertex',6))));
v = str2num(vertices(:,7:end));
nvert = size(vertices,1); % number of vertices
nfaces = sum(strcmp(content,'endfacet')); % number of faces
if (nvert == 3*nfaces)
    f = reshape(1:nvert,[3 nfaces])'; % create faces
end

% slim the file (delete duplicated vertices)
[v,f] = stlSlimVerts(v,f);

function [v, f, n, name] = stlReadAscii(fileName)
%STLREADASCII reads a STL file written in ASCII format
%V are the vertices
%F are the faces
%N are the normals
%NAME is the name of the STL object (NOT the name of the STL file)

%======================
% STL ascii file format
%======================
% ASCII STL files have the following structure. Technically each facet
% could be any 2D shape, but in practice only triangular facets tend to be
% used. The present code ONLY works for meshes composed of triangular
% facets.
%
% solid object_name
% facet normal x y z
% outer loop
% vertex x y z
% vertex x y z
% vertex x y z
%endloop
%endfacet
%
%
%
% endsolid object_name

fid = fopen(fileName);
cellcontent = textscan(fid,’%s’,’delimiter’,’\
‘); % read all the file and put content in cells
content = cellcontent{:}(logical(~strcmp(cellcontent{:},”))); % remove all blank lines
fclose(fid);

% read the STL name
line1 = char(content(1));
if (size(line1,2) >= 7)
name = line1(7:end);
else
name = ‘Unnamed Object’;
end

% read the vector normals
normals = char(content(logical(strncmp(content,’facet normal’,12))));
n = str2num(normals(:,13:end));

% read the vertex coordinates (vertices)
vertices = char(content(logical(strncmp(content,’vertex’,6))));
v = str2num(vertices(:,7:end));
nvert = size(vertices,1); % number of vertices
nfaces = sum(strcmp(content,’endfacet’)); % number of faces
if (nvert == 3*nfaces)
f = reshape(1:nvert,[3 nfaces])’; % create faces
end

% slim the file (delete duplicated vertices)
[v,f] = stlSlimVerts(v,f);

3 References

Some of the content in the article is quoted from the Internet. The source will be indicated or cited as a reference. It is inevitable that there will be some unfinished information. If there is anything inappropriate, please feel free to contact us to delete it.

4 Matlab code, data, literature