生命科学

三维书面模型提供更清晰的癌症传播图片

作者:澳门葡亰娱乐场手机版    发布时间:2020-02-29 22:52     浏览次数 :162

[返回]

图片 1

巧用PS锐化功能使图片更清晰原图: 图片 2打开原图,进入通道面板,选择绿通道,按Ctrl A,然后按Ctrl C,回到图层面板,新建立一图层,然后按Ctrl V,效果如下:图片 3然后执行特殊模糊:图片 4突出对比度,调整色阶:图片 5查找边缘:图片 6高斯模糊:图片 7调整色阶图片 8Ctrl I反相图片 9回到通道,按Ctrl点击RGB载入选区:图片 10删除图层1,进行USM锐化:图片 11最终效果(花蕊部分):图片 12简单的,我们教你,深奥的,你来分享

利用osg3.0库,在vs中以C++为基础开发的三维阴影生成例子,例子很简单,还需不断的完善。

1.独立级联模型

普渡大学的研究人员Luis Solorio用聚合物帮助创造了一个逼真的癌症环境,以更好地预测药物如何阻止其发展。

#include <osgViewer/Viewer>

#include <osg/Node>
#include <osg/Group>
#include <osg/Geode>

#include <osg/Camera>
#include <osg/ShapeDrawable>
#include <osg/ComputeBoundsVisitor>
#include <osg/BoundingBox>
#include <osg/BoundingSphere>
#include <osg/AnimationPath>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>

#include <osgShadow/ShadowedScene>
#include <osgShadow/ShadowVolume>
#include <osgShadow/ShadowTexture>
#include <osgShadow/ShadowMap>
#include <osgShadow/SoftShadowMap>
#include <osgShadow/ParallelSplitShadowMap>

#include <osgUtil/Optimizer>
#include <osgUtil/SmoothingVisitor>

#include <iostream>

//标识阴影接收对象
const int ReceivesShadowTraversalMask=0x1;
//标识阴影投影对象
const int CastsShadowTraversalMask=0x2;

//创建场景数据、模型
osg::ref_ptr<osg::Node>createModel()
{
    //创建投影对象,读取房子模型
    osg::ref_ptr<osg::Node> shadower=new osg::Node;
    shadower=osgDB::readNodeFile("house.3dm"); 
    shadower->setNodeMask(CastsShadowTraversalMask);

    osg::ref_ptr<osg::Node> node2=osgDB::readNodeFile("ss.3dm"); 
    //node2->setNodeMask(CastsShadowTraversalMask);
    node2->setNodeMask(ReceivesShadowTraversalMask);

    ////设置shadower2的法线
    //osg::ref_ptr<osg::Geometry>geom=new osg::Geometry;

    //osg::ref_ptr<osg::Vec3Array> n=new osg::Vec3Array;
    //n->push_back(osg::Vec3(0.0f,0.0f,1000.0f));
    //geom->setNormalArray(n.get());
    //geom->setNormalBinding(osg::Geometry::BIND_OVERALL);

    //创建接受投影的对象,读取地面模型
    osg::ref_ptr<osg::Node>shadowed=new osg::Node;
    shadowed=osgDB::readNodeFile("pm2.3dm");
    shadowed->setNodeMask(ReceivesShadowTraversalMask);

    //osg::Node::setNodeMask();

    //设置阴影投射对象和接受对象,使房子恰好在地形模型之上
    osg::ref_ptr <osg::MatrixTransform> mat=new osg::MatrixTransform();
    osg::Matrix m;
    m=osg::Matrix::scale(30.0f,30.0f,50.0f)*osg ::Matrix::translate(osg::Vec3(1000.0f,420.0f,0.0f));
    mat->setMatrix(m);
    mat->addChild(shadower.get());

    //设置另外一个建筑物的位置和大小,同上
    osg::ref_ptr <osg::MatrixTransform> mat2=new osg::MatrixTransform();
    osg::Matrix m2;
    m2=osg::Matrix::scale(20.0f,20.0f,20.0f)*osg ::Matrix::translate(osg::Vec3(1000.0f,1000.0f,0.0f));
    mat2->setMatrix(m2);
    mat2->addChild(node2.get());

    //创建一个组节点,将各个子节点添加进来
    osg::ref_ptr<osg::Group>group=new osg::Group;
    group->addChild(shadowed.get());
    //group->addChild(shadower.get());
    //group->addChild(shadower2.get());
    group->addChild(mat.get());
    group->addChild(mat2.get());

    return group.get();
}

//创建一个光照
osg::ref_ptr<osg::Node>createLight(osg::ref_ptr<osg::Node>model)
{
    osg::ComputeBoundsVisitor cbbv;
    model->accept(cbbv);

    osg::BoundingBox bb=cbbv.getBoundingBox();

    osg::ref_ptr<osg::Light>lt=new osg::Light;
    lt->setLightNum(1);
    //lt->setDirection(osg::Vec3(0.0f,0.0f,-1.0f));
    lt->setPosition(osg::Vec4(0,0,1000,1.0f)); 

    //设置环境光的颜色
    lt->setAmbient(osg::Vec4(0.1f,0.5f,0.5f,1.0f));

    osg::ref_ptr<osg::LightSource>ls=new osg::LightSource();

    ls->setLight(lt.get());

    /*一下三行同样是设置灯光的位置和发射光的方向
    osg::Vec4 lightpos;
    lightpos.set(20,20,20,0.0f);
    ls->getLight()->setPosition(lightpos);*/

    return ls.get();
}
int main()
{
    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

    //创建一个组节点
    osg::ref_ptr<osg::Group> root = new osg::Group();

    //创建一个阴影节点,并标识接收对象和投影对象
    osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene = new osgShadow::ShadowedScene();

    shadowedScene->setReceivesShadowTraversalMask(ReceivesShadowTraversalMask);

    shadowedScene->setCastsShadowTraversalMask(CastsShadowTraversalMask);

    //创建阴影纹理,使用的是shadowTexture技法
    osg::ref_ptr<osgShadow::ShadowTexture> st = new osgShadow::ShadowTexture;

    //关联阴影纹理
    shadowedScene->setShadowTechnique(st);

    //创建一个根节点,并将场景数据、模型赋予节点
    osg::ref_ptr<osg::Node> node =new osg::Node;
    node=createModel();

    //添加场景数据并添加光源
    shadowedScene->addChild(createLight(node.get()));
    shadowedScene->addChild(node.get());

    root->addChild(shadowedScene.get());

    //优化场景数据
    osgUtil::Optimizer optimizer ;
    optimizer.optimize(root.get()) ;

    viewer->setSceneData(root.get());

    viewer->realize();

    viewer->run();

    return 0 ;
}
//该片段来自于http://outofmemory.cn

独立级联模型(Independent Cascade Mode,IC模型)是一种概率模型,当一个节点v被激活时,它会以概率p[v,w]对它未激活的出边邻居节点w尝试激活,这种尝试仅仅进行一次,而且这些尝试之间是互相独立的,即v对w的激活不会受到其他节点的影响。独立级联模型的信息传播过程为:

以前的研究表明,大多数癌症死亡的发生是因为它在体内扩散或转移。治疗癌症的一个主要障碍是无法试验转移本身并剔除它需要传播的东西。

(1)给定初始的活跃节点集合S,当在时刻t节点v被激活后,它就获得了一次对它的邻居节点w产生影响的机会,成功的概率为p[v,w],是随机赋予的系统参数,其自身独立不受其他节点的影响,该值越大,节点w越有可能被影响。

过去的研究使用3D打印机来重建受控制的癌症环境,但这些复制品对于药物筛选仍然不够现实。

(2)若w有多个邻居节点都是新近被激活的节点,那么这些节点将以任意顺序尝试激活节点w。如果节点v成功激活节点w,那么在t+1时刻,节点w转为活跃状态。

上一篇:没有了
下一篇:没有了