亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? anisotropictensordistance.h.svn-base

?? fast marching method
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
/*------------------------------------------------------------------------------------------------------    File        : AnisotropicTensorDistance.h     (GCM Library)  Description : This class specifies the virtual methods of the class "GenericPradosSchemesForFastMarching_3D" for the special case of the 3D anisotropic Eikonal equation.  Authors      : Emmanuel Prados (UCLA/INRIA), Christophe Lenglet (INRIA), Jean-Philippe Pons (INRIA)    --------------  License     : This software is governed by the CeCILL-C license under French law and abiding by the   rules of distribution of free software.   Users can use, modify and/ or redistribute the software under the terms of the CeCILL-C. In particular,   the exercising of this right is conditional upon the obligation to make available to the community the   modifications made to the source code of the software so as to contribute to its evolution (e.g. by the   mean of the web; i.e. by publishing a web page!).    In this respect, the risks associated with loading, using, modifying and/or developing or reproducing   the software by the user are brought to the user's attention, given its Free Software status, which may   make it complicated to use, with the result that its use is reserved for developers and experienced   professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the   suitability of the software as regards their requirements in conditions enabling the security of their  systems and/or data to be ensured and, more generally, to use and operate it in the same conditions of   security. This Agreement may be freely reproduced and published, provided it is not altered, and that   no provisions are either added or removed herefrom.     CeCILL-C FREE SOFTWARE LICENSE AGREEMENT is available in the file                           Licence_CeCILL-C_V1-en.txt   or at                            http://www.cecill.info/index.en.html.  This Agreement may apply to any or all software for which the holder of the economic rights decides to   submit the use thereof to its provisions.    --------------  Associated publications  : This C++ code corresponds to the implementation of the algorithm presented   in the following articles:    - E. Prados, C. Lenglet, J.P. Pons, N. Wotawa, R. Deriche, O. Faugeras, S. Soatto;     "Control Theory and Fast Marching Methods for Brain Connectivity Mapping";     INRIA Research Report 5845 -- UCLA Computer Science Department Technical Report 060004, February 2006.  - E. Prados, C. Lenglet, J.P. Pons, N. Wotawa, R. Deriche, O. Faugeras, S. Soatto;     "Control Theory and Fast Marching Methods for Brain Connectivity Mapping";    Proc. IEEE Computer Society Conference on Computer Vision and Pattern Recognition, New York, NY, I: 1076-1083, June 17-22, 2006.    - For more references, we refer to the official web page of the GCM Library and to authors' web pages.  Please, if you use the GCM library in you work, make sure you will include the reference to the work of   the authors in your publications.  --------------    Technical Comments and Detailled description:  - This class specifies the virtual methods of the class "GenericPradosSchemesForFastMarching_3D"   for the special case of the 3D anisotropic Eikonal equation.  The functions we overcharge are:   * virtual bool eqSolverOnPart_with_s1s2s3_nonNul(...)   * virtual bool eqSolverOnPart_withOne_si_Nul(...)   * virtual bool eqSolverOnPart_withTwo_si_Nul(...)  $(s_1,s_2,s_3)$ being fixed,  these methods allow to solve the equations     $$ sup_{a in B} g_s(a,t) = 0 $$  where $g_s(a,t) = - f(x; a).P_{x,s,U}(t)-l(x; a)$   and where, according to the different cases,   * $B$ is the interior set of the $As$   (eqSolverOnPart_with_s1s2s3_nonNu)  * $B$ is the union of the 2D facets of $As$  (eqSolverOnPart_withOne_si_Nul)  * $B$ is the union of the 1D edges of $As$  (eqSolverOnPart_withTwo_si_Nul)  See section 4.3.2 of INRIA RR-5845 (page 11).  Let us note that these methods compute the $t_s$ and the associated dynamics.  - The goal of the class being to specify the virtual methods of the class    "GenericPradosSchemesForFastMarching_3D" for the special case of the 3D anisotropic Eikonal equation,  we then need to describe the data defining the Hamiltonian.  In this class, we then need to declare and construct all the associated structures.  - Note about the optimal dynamics:  The optimal dymamics (so its preservation and its transmission in the paramters) ARE NOT USEFULL IF we  only want to compute the viscosity solution of the considered equation by the Fast Marching Method.   Nevertheless the computation of the optimal dymamics is necessary in order to be able to chose the good   simplex. The Preservation and the transmission of the optimal Dymamics can be usefull in many applications   as for example fibers tracking in DTI (see INRIA RR-5845).  ----------------------------------------------------------------------------------------------------*/#ifndef ANISOTROPICTENSORDISTANCE_H#define ANISOTROPICTENSORDISTANCE_H#include <iostream>#include <cmath>#include <cassert>#include "GenericPradosSchemesForFastMarching_3D.h"/**************************************************/////  This class (AnisotropicTensorDistance) inherits of//  the class: "PradosSchemesForFastMarching_3D"////  Here we have to overcharge the functions//   - virtual bool eqSolverOnPart_with_s1s2s3_nonNul(...)//   - virtual bool eqSolverOnPart_withOne_si_Nul(...)//   - virtual bool eqSolverOnPart_withTwo_si_Nul(...)///**************************************************/namespace FastLevelSet {/**************************************************  The class AnisotropicTensorDistance inherits of  the class: "PradosSchemesForFastMarching_3D"**************************************************/    template <typename T = float>    class AnisotropicTensorDistance : public PradosSchemesForFastMarching_3D<T> {        /***************************************************************           Let us declare all the structures describing the data           charaterizing the 3D Eikonal equation considered.           We also declare some variables required to describe the scheme.        ****************************************************************/    protected:    T dx,dy,dz;                               // voxel sizes        typedef T Vector3[3];        typedef T Matrix3x3[3][3];        typedef T Matrix2x2[2][2];        // we start with the declaration of the class "Hamiltonian".          /***************************************************************            The Hamiltonian that we have implemented here is                           $  |A_x p |^2 - 1  $.            The Hamiltonian is equivalent to the Hamiltonian                     $  H_{AEik}(x,p) = |A_x p | - 1 $            given at page 7 of the  INRIA report RR-5845.            The $ H_i(x,p) $  and $ H_{ij}(x,p) $ described at page 12 (section 4.3.3) of the INRIA report RR-5845            are, in fact, the ones associated to $|A_x p |^2 - 1$.            There are no differences, except that we need to renormalize the optimal dynamics.             We will explain better this point in our forthcomming journal paper...          ****************************************************************/        class Hamiltonian {        public:            Matrix3x3 B, invB;            Matrix2x2 invinvB1, invinvB2, invinvB3;            T invsqinvA1, invsqinvA2, invsqinvA3;            // Initialization from B            bool InitFromB(const Matrix3x3 &_B) {                // Storage of B                CopyMatrix3x3(_B,B);                // Computation of the inverse of B//                 if (!InverseSymmetricMatrix3x3(B,invB)) return false;                if (Matrix3x3IsZero(B)) return false;                else PseudoInverseSymmetricMatrix3x3(B,invB);                // Computation of invinvB_i: the inverse of invB after removing the i^th row and i^th column                for (int i=0;i<2;i++) for (int j=0;j<2;j++) {                    invinvB1[i][j] = invB[i+1][j+1];                    invinvB2[i][j] = invB[2*i][2*j];                    invinvB3[i][j] = invB[i][j];                }                if (Matrix2x2IsZero(invinvB1)) return false;                else PseudoInverseMatrix2x2(invinvB1);                if (Matrix2x2IsZero(invinvB2)) return false;                else PseudoInverseMatrix2x2(invinvB2);                if (Matrix2x2IsZero(invinvB3)) return false;                else PseudoInverseMatrix2x2(invinvB3);//                 if (!InverseMatrix2x2(invinvB1) || !InverseMatrix2x2(invinvB2) || !InverseMatrix2x2(invinvB3)) return false;                // Computation of invinvAi: the inverse of the square norm of the i^th row of invA                invsqinvA1 = 1/invB[0][0];                invsqinvA2 = 1/invB[1][1];                invsqinvA3 = 1/invB[2][2];                return true;            }            // Initialization from A            bool InitFromA(const Matrix3x3 &_A) {                // TODO                return false;            }        private:            // Matrix operations            void DisplayMatrix3x3(const Matrix3x3 &M) {                for (int i=0;i<3;i++)                    std::cout << M[i][0] << " " << M[i][1] << " " << M[i][2] << std::endl;                std::cout << std::endl;            }            void DisplayMatrix2x2(const Matrix2x2 &M) {                for (int i=0;i<2;i++)                    std::cout << M[i][0] << " " << M[i][1]  << std::endl;                std::cout << std::endl;            }            void MultiplyMatrix3x3(const Matrix3x3 &A, const Matrix3x3 &B, Matrix3x3 &R) {                for (int i=0; i<3; ++i) {                    for (int j=0; j<3; ++j) {                        R[i][j] = 0.0;                        for (int k=0; k<3; ++k) R[i][j] += A[i][k] * B[k][j];                    }                }            }            void MultiplyMatrix2x2(const Matrix2x2 &A, const Matrix2x2 &B, Matrix2x2 &R) {                for (int i=0; i<2; ++i) {                    for (int j=0; j<2; ++j) {                        R[i][j] = 0.0;                        for (int k=0; k<2; ++k) R[i][j] += A[i][k] * B[k][j];                    }                }            }            void CopyMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {                for (int i=0;i<3;i++) for (int j=0;j<3;j++) out[i][j] = in[i][j];            }            void CopyMatrix2x2(const Matrix2x2 &in, Matrix2x2 &out) {                for (int i=0;i<2;i++) for (int j=0;j<2;j++) out[i][j] = in[i][j];            }            void TransposeMatrix2x2(const Matrix2x2 &in, Matrix2x2 &out) {                for (int i=0;i<2;i++) for (int j=0;j<2;j++) out[i][j] = in[j][i];            }            void TransposeMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {                for (int i=0;i<3;i++) for (int j=0;j<3;j++) out[i][j] = in[j][i];            }            bool Matrix2x2IsZero(const Matrix2x2 &M) {                return (M[0][0]==0 && M[0][1]==0 && M[1][1]==0);            }            bool Matrix3x3IsZero(const Matrix3x3 &M) {                return (M[0][0]==0 && M[0][1]==0 && M[0][2]==0 && M[1][1]==0 && M[1][2]==0 && M[2][2]==0);            }            bool InverseUpperTriangularMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {                if (in[0][0] == 0 || in[1][1] == 0 || in[2][2] == 0) return false;                out[0][0] = 1/in[0][0];                out[0][1] = -in[0][1]/in[0][0]/in[1][1];                out[0][2] = (in[0][1]*in[1][2] - in[0][2]*in[1][1])/in[0][0]/in[1][1]/in[2][2];                out[1][0] = 0;                out[1][1] = 1/in[1][1];                out[1][2] = -in[1][2]/in[1][1]/in[2][2];                out[2][0] = 0;                out[2][1] = 0;                out[2][2] = 1/in[2][2];                return true;            }            bool InverseSymmetricMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {                // for computing the determinant,                // we develop with respect to the first row:                T firstCrossProduct  = in[1][1]*in[2][2]-in[1][2]*in[1][2];                T secondCrossProduct = in[0][1]*in[2][2]-in[0][2]*in[1][2];                T thirdCrossProduct  = in[0][1]*in[1][2]-in[0][2]*in[1][1];                T determinant =                        in[0][0]*firstCrossProduct                    -   in[0][1]*secondCrossProduct                    +   in[0][2]*thirdCrossProduct;                if (determinant == 0) return false;                out[0][0] =  (  firstCrossProduct   )/determinant;                out[0][1] =  ( - secondCrossProduct )/determinant;                out[0][2] =  (  thirdCrossProduct   )/determinant;                out[1][0] = out[0][1];                out[1][1] =  (-in[0][2]*in[0][2]+in[0][0]*in[2][2])/determinant;                out[1][2] =  (-in[0][0]*in[1][2]+in[0][2]*in[0][1])/determinant;                out[2][0] = out[0][2];                out[2][1] = out[1][2];                out[2][2] =  (-in[0][1]*in[0][1]+in[0][0]*in[1][1])/determinant;                return true;            }            void PseudoInverseSymmetricMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {                Matrix3x3 M,N;                MultiplyMatrix3x3(in,in,M);                InverseSymmetricMatrix3x3(M,N);                MultiplyMatrix3x3(N,in,out);            }            //bool CholeskyMatrix3x3(const Matrix3x3 &in, Matrix3x3 &out) {            //  if (in[0][0]<0) return false;            //  out[0][0] = (T)std::sqrt(in[0][0]);            //  out[0][1] = in[0][1] / out[0][0];            //  out[0][2] = in[0][2] / out[0][0];            //  out[1][0] = 0;            //  const T d2 = in[1][1] - out[0][1]*out[0][1];            //  if (d2<0) return false;            //  out[1][1] = (T)std::sqrt(d2);            //  out[1][2] = ( in[1][2] - out[0][1]*out[0][2] ) / out[1][1];            //  out[2][0] = 0;            //  out[2][1] = 0;            //  const T d3 = in[2][2] - out[0][2]*out[0][2] - out[1][2]*out[1][2];            //  if (d3<0) return false;            //  out[2][2] = (T)std::sqrt(d3);            //  return true;            //}            bool InverseMatrix2x2(Matrix2x2 &M) {                const T det = M[0][0]*M[1][1]-M[0][1]*M[1][0];                if (det==0) return false;                std::swap(M[0][0],M[1][1]);                M[0][0] /= det;                M[1][1] /= det;                M[0][1] /= -det;                M[1][0] /= -det;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区精品网| 日本 国产 欧美色综合| 日韩中文字幕亚洲一区二区va在线| 丝袜美腿亚洲综合| 本田岬高潮一区二区三区| 欧美一二三四区在线| 亚洲欧美一区二区三区极速播放| 日本视频在线一区| 91毛片在线观看| 国产欧美一区二区在线| 免费看欧美美女黄的网站| 日本久久一区二区| 国产精品毛片大码女人| 韩国av一区二区三区在线观看| 欧美色视频在线观看| 亚洲视频小说图片| 国产成人精品亚洲777人妖| 日韩一区二区三区观看| 亚洲成人免费影院| 在线观看不卡视频| 国产精品国产a级| 风间由美一区二区三区在线观看| 91精品一区二区三区久久久久久| 一区二区三区鲁丝不卡| 成人h动漫精品一区二| 欧美经典一区二区三区| 国模套图日韩精品一区二区| 这里只有精品免费| 日韩国产成人精品| 欧美午夜精品久久久久久超碰| 国产精品电影一区二区| av在线免费不卡| 中文字幕佐山爱一区二区免费| 国产福利一区二区三区视频| 久久亚洲精精品中文字幕早川悠里 | 成人黄色网址在线观看| 久久精品欧美一区二区三区不卡 | 欧美96一区二区免费视频| 欧美私人免费视频| 一级女性全黄久久生活片免费| 91亚洲资源网| 一区二区三区在线视频免费| 日本精品一区二区三区高清 | 国产欧美日韩一区二区三区在线观看| 国产在线不卡一区| 欧美激情一区二区三区四区| 波多野结衣亚洲| 一区二区三区鲁丝不卡| 3d动漫精品啪啪1区2区免费| 蜜桃av噜噜一区二区三区小说| 精品免费视频.| 国产suv一区二区三区88区| 国产精品理论片| 91成人免费网站| 丝袜国产日韩另类美女| 欧美精品一区二区在线观看| 高清不卡一区二区在线| 亚洲免费av网站| 制服丝袜亚洲播放| 国产美女主播视频一区| 国产精品福利av | 99久久免费视频.com| 樱桃国产成人精品视频| 欧美精品久久一区| 国产自产高清不卡| 一区二区中文字幕在线| 欧美精品一二三四| 国产麻豆成人精品| 亚洲黄网站在线观看| 精品三级av在线| 91亚洲资源网| 精品一区二区在线免费观看| 久久精品欧美日韩| 欧美人妇做爰xxxⅹ性高电影| 国产精品影视天天线| 亚洲国产精品久久人人爱| 国产日韩欧美制服另类| 色爱区综合激月婷婷| 国产伦精品一区二区三区免费 | 国产亚洲女人久久久久毛片| 91官网在线免费观看| 国模一区二区三区白浆| 亚洲二区视频在线| 国产精品毛片久久久久久| 91黄色免费观看| 美女视频黄免费的久久| 91麻豆免费看片| 久久久蜜桃精品| 亚洲一区在线免费观看| 亚洲国产成人午夜在线一区| 日日摸夜夜添夜夜添亚洲女人| 成人免费看黄yyy456| 日本国产一区二区| 国产精品一级二级三级| 日产国产高清一区二区三区| 精品国偷自产国产一区| 欧美一级视频精品观看| 欧美二区乱c少妇| 日韩主播视频在线| 91精品国产一区二区三区蜜臀| 美女性感视频久久| 国产精品久久看| 欧美精品一二三| 精品一区中文字幕| 久久久久久99精品| 国产精品二三区| **欧美大码日韩| 91福利在线导航| 亚洲香肠在线观看| 色噜噜狠狠成人网p站| 中文一区二区在线观看| 5566中文字幕一区二区电影| 国产**成人网毛片九色| 成人av动漫在线| 国产精品一区二区三区99| 午夜天堂影视香蕉久久| 一区精品在线播放| 免费欧美在线视频| 国产精品久久午夜| 欧美日韩综合在线| 成人美女在线观看| 一区二区三区欧美激情| 日韩av电影免费观看高清完整版在线观看| 免费在线观看一区| 亚洲丝袜美腿综合| 一区二区三区四区不卡在线| 国产欧美一区视频| 91精品国产综合久久福利| 色天使久久综合网天天| 亚洲精品日日夜夜| 亚洲色图色小说| 亚洲精品日产精品乱码不卡| 国产精品久久久久久久蜜臀| 成人av网站在线观看| 亚洲欧美一区二区三区久本道91| 精品理论电影在线观看 | 在线观看亚洲成人| 日韩一级免费观看| 国产iv一区二区三区| 麻豆精品一二三| 欧美人妇做爰xxxⅹ性高电影| 欧美日韩小视频| 成人h版在线观看| 性欧美大战久久久久久久久| 亚洲欧美激情插| 久久亚洲私人国产精品va媚药| 欧美综合久久久| 亚洲福利视频三区| 成人欧美一区二区三区小说| 日韩视频在线永久播放| 欧美综合天天夜夜久久| 欧美一级片在线看| 久久久久久久久久久黄色| 久久久久9999亚洲精品| 久久久无码精品亚洲日韩按摩| 激情小说欧美图片| 丁香婷婷综合色啪| 一区在线观看免费| 一本大道久久a久久精二百| 久久国产精品露脸对白| 久久精品国产成人一区二区三区| 久久精品国产在热久久| 亚洲一区二区五区| 欧美一级一级性生活免费录像| 91在线看国产| 精品剧情v国产在线观看在线| 亚洲国产精品嫩草影院| 日韩免费看的电影| 日韩电影一区二区三区四区| 亚洲国产精品av| 国产精品系列在线播放| 极品尤物av久久免费看| www.欧美日韩国产在线| 日韩一级黄色大片| 国产 日韩 欧美大片| 91成人网在线| 久久综合中文字幕| 亚洲激情自拍偷拍| 99r国产精品| 欧美高清在线一区| 久久久综合网站| 亚洲线精品一区二区三区八戒| 国产精品一区二区三区网站| 欧美丝袜自拍制服另类| 中文字幕日本乱码精品影院| 韩国视频一区二区| 亚洲三级在线观看| 中文字幕国产一区| 久久综合中文字幕| 激情综合色综合久久综合| 欧美大白屁股肥臀xxxxxx| 欧美精品自拍偷拍动漫精品| 色婷婷亚洲精品| 亚洲成人激情自拍| 亚洲精品久久久蜜桃| 欧美一区二区三区视频免费播放 | 久久久亚洲精品一区二区三区| 91日韩精品一区| 另类欧美日韩国产在线| 精品第一国产综合精品aⅴ|