0%

  1. Sinthanayothin, C., & Tharanon, W. (2007). Tooth alignment of the dental cast using 3D thin plate spline. Advances in Computer Science and Technology ACST, 2-4.

    • Steps
    1. 模拟单个牙齿和标记,并通过集合变形插入牙模中
    2. 在tooth alignment前后记录牙齿标记
    3. 通过采用3D thin plate spline技术生产新牙模 > 同时使用到牙冠和牙根的数据,对一颗完整的牙齿进行重排,而mesh数据中仅有牙冠,因此不适用。
  2. Kumar, Y., Janardan, R., & Larson, B. (2012). Automatic feature identification in dental meshes. Computer-Aided Design and Applications, 9(6), 747-769.

    本文主要针对虚拟正畸中的关键步骤:特征提取(牙齿表面特征:尖(cusps),grooves(凹槽),边缘(incisal edges),marginal ridges(边缘脊),occlusal surface boundary(咬合面边界)
    虚拟正畸中输入数据是对3D mesh分割后所得到的单颗牙齿的集合。

    • 尖(cusps): Watershed Algorithm
    • 其他特征: 基于曲率和二维截面聚类 > 这篇文章对牙齿表面的各个特征的特征讲的蛮详细的
  3. Lian, C., Wang, L., Wu, T. H., Wang, F., Yap, P. T., Ko, C. C., & Shen, D. (2020). Deep multi-scale mesh feature learning for automated labeling of raw dental surfaces from 3D intraoral scanners. IEEE transactions on medical imaging, 39(7), 2440-2450. > Precisely labeling teeth on digitalized 3D dental surface models is the precondition for tooth position rearrangements in orthodontic treatment planning

    基于深度学习 MeshSegNet, 具有开源代码,是专门针对牙齿的,将牙齿加上labal,是自动排牙所必备的一步

  4. Lian, C., Wang, L., Wu, T. H., Liu, M., Durán, F., Ko, C. C., & Shen, D. (2019, October). MeshSNet: Deep multi-scale mesh feature learning for end-to-end tooth labeling on 3D dental surfaces. In International Conference on Medical Image Computing and Computer-Assisted Intervention (pp. 837-845). Springer, Cham.

    上面那篇差不多

  5. Zhang, Z., Ong, S. H., Zhong, X., & Foong, K. W. (2016). Efficient 3D dental identification via signed feature histogram and learning keypoint detection. Pattern Recognition, 60, 189-204.

    方法:The Signed Feature Histogram
    需要输入训练数据后再检测
    主要是为了识别出牙齿中的特征点,也是自动排牙所必备的一步

  6. Wei, G., Cui, Z., Liu, Y., Chen, N., Chen, R., Li, G., & Wang, W. (2020, August). TANet: Towards Fully Automatic Tooth Arrangement. In European Conference on Computer Vision (pp. 481-497). Springer, Cham.

    采用卷积神经网络
    分割完后加上标签,输入多层感知机,进行位置重排
    使用PointNet提取特征点

许多网站程序例如WordPress都需要用到数据库。记录一下数据库的各种常用命令。

新建数据库 - create database example_database;

删除数据库 - drop database example_database;

新建用户 - CREATE USER 'example_user' IDENTIFIED BY 'enter_a_password_here';

给用户授权某个数据库所有权限 - GRANT ALL ON example_database.* TO 'example_user' IDENTIFIED BY 'enter_a_password_here';

安装完Mysql 或 MariaDB后,为了设置root密码,首先执行 mysql_secure_installation

This method depend on both the direction \(p_k\) and the step length \(a_k\)
\(x_{k+1}=x_k+a_kp_k\)

\(wolfe\; conditions \begin{cases} sufficient\;decrease\;condition \\ curvature\;conditions\end{cases}\)

\(\begin{cases} f(x_k+a_kp_k) \leq f(x_k)+c_1a_k\nabla f_k^Tp_k \\ \nabla f(k_k+a_kp_k)^T\geq c_2\nabla f_k^T p_k\end{cases}\)

lemma 3.1

\(P_K\)is a desent direction at \(x_k\) and assume that f is bounded below along the ray {\(x_k+\alpha p_k|\alpha >0\)},if \(0<c_1<c_2<1\),show that there exist intervals of step lengths satisfying the wolfe conditions and the strong wolfe conditions.

proof:

since \(\phi(\alpha)=f(x_k+\alpha p_k)\) is bounded below,the \(l(\alpha)=f(x_k)+\alpha _k c_1\nabla f_k ^Tp_k\) must intersect with the \(\phi (\alpha)\),thus there exist a \(\alpha '\)

\(f(x_k+\alpha' p_k)=f(x_k)+\alpha ' c_1\nabla f_k ^Tp_k\)

then the \(\alpha <\alpha'\)meet the sufficient decrease condition.

since the mean value theorem,\(f(x_k+\alpha' p_k)-f(x_k)=\alpha'\nabla f(x_k+\alpha ''p_k)^Tp_k\;\;\;\alpha ''\in (0,\alpha')\)

thus \(\nabla f(x_k+\alpha ''p_k)^Tp_k=c_1\nabla f_k ^Tp_k>c_2\nabla f_k ^Tp_k\),which meet the curvature condition,because the left of the inequalities is negetive ,so the strong wolfe conditions hold in the same interval.

The coldstein conditions

unconstained optimization of smooth function

  1. line search method
  2. Newton direction
  3. Quasi-Newton

Rates Of Convergence

  1. \(Q-linear\) \[\frac{||x_{k+1}-x_{k}^{*}||}{||x_{k}-x^*||}\leq r \qquad for\; all\; k\; sufficiently\; large\]
  2. \(Q-superlinear\) \[\lim_{k \to \infty}\frac{||x_{k+1}-x_{k}^{*}||}{||x_{k}-x^*||}=0\]
  3. \(Q-quadratic\) \[\frac{||x_{k+1}-x_{k}^{*}||}{||x_{k}-x^*||^2}\leq M \qquad for\; all\; k\; sufficiently\; large\]
Read more »

派生类向基类转换的可访问性主要有如下三种:
1. 当D共有继承B时,用户代码才能使用派生类向基类的转换。
此处理解关键是用户代码

1
2
3
4
5
class sample : public sample_base{
//member
};
sample s1;
sample_base *s2=&s1;
用户代码即最后2行。

  1. 无论D什么方式继承B,D的成员函数和友元都能使用派生类像基类转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class D : public B{
    void func{
    //member function
    }
    friend void func_frid();
    };
    void D::func_frid(){
    //functions
    }
    此时成员函数为func,而友元为func_frid()

  2. 如果D继承自B的方式是公有有或者受保护,则D的派生类成员和友元可以使用D向B的类型转换。
    此处的主要矛盾转换向了D派生类的(成员和友元),也就是说变成了派生再派生

    1
    2
    3
    4
    5
    6
    class D : protected B{
    //members
    };
    class E : public D{
    //members
    };
    此时的E中可以使用转换

只有在指针或者引用调用虚函数时候才会发生动态绑定,这时候编译器可以通过动态类型的对象来选择。

1
2
3
4
5
6
7
8
9
10
11
12
13
class A {
virtual void func(){
//...
}
};
class B : public A{
void func(){
//...
}
};
B b_obj;
A *a_obj=&b_obj;
a_obj->func();//发生了动态绑定,调用的是B::func()

首先,类模板定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T> class MyTemplateClass{
//在类模板自己的作用域中,可以直接使用模板名字而不提供实参,实参指的是`<typename T>`这种
MyTemplateClass ret_func(const MyTemplateClass &customclass){
return customclass;
}
//当实例化是T会被输入的实参而代替
T cal_fun(T temp){
return T*T;
}
//在类外定义,类内定义的函数时默认内联的
T out_func(T temp);
};
//类外定义成员函数的写法
template<typename T>
T MyTemplateClass<T>::cal_func(T temp){
return T+T;
}
记住,仅仅时类的作用域内可以直接用名字 例如 上述模板类
Read more »

智能指针有3类 1. shared_ptr: 多个指针指向一个对象,此类指针有一个关联的计数器,称为引用计数,表示指向这个对象的指针的数,当没有指针指向这个对象后,就会自动释放自己管理的对象。 2. unique_ptr: 只有这个指针指向这个对象 3. weak_ptr: 指向shared_ptr管理的对象

对于动态指针中pp.get()
根据代码运行

1
2
3
4
int main() {
shared_ptr<string> p1 = make_shared<string>("rua");
cout << p1 << endl << p1.get() << endl;
}
发现两者输出相同,都可以额表示指针?但是p可以用作条件判断。
为什么要用动态对象呢?
1. 可以共享数据,允许多个对象一起用

关联容器与顺序容器相比,主要通过关键词来进行高效地查找 #### 分类 1. map 是关键词-值,通过关键词索引,而值为数据。 2. set 中只包含一个关键词,检查关键词是否在set

可以进行值初始化 Q:可以重复关键词的关联容器中如何检索?insert和emplace区别? #### 关键词 1. multi 表示可以重复关键词 2. unordered 表示元素是无序保存的

map

通过关键词进行值的映射,map<key,value> #### set 关键词的简单集合set<key>

有时候,在常量const的成员函数中,由于const意味着其中的常量指针this指向一个常量对象,由此而导致了在该成员函数中,无法修改类中的数据成员,此时在类的数据成员之前加关键词mutable修饰则可以使得该数据成员在任何时候都可以改变。 例如C++ primer 5th中P245页的代码所示

1
2
3
4
5
6
7
8
9
10
class Screen {
public:
void some_member() const; //指向常量对象的常量指针
private:
mutable size_t access_ctr;// mutable关键词修饰,在任何时候都可以实现可以被改变
//other variables
};
void Screen::some_member() const{
++access+ctr; //虽然是const,但由于mutable的存在,依旧可以被改变
}