当前位置: 首页 > news >正文

百度怎么自己做网站越南做彩票网站是违法的吗

百度怎么自己做网站,越南做彩票网站是违法的吗,镇江做网站多少钱,长安网站建设制作价格数字图像是一种重要的多媒体数据#xff0c;广泛应用于工业生产、生物医学、地质、气象等重要领域。数字图像处理技术具有重要的应用价值。图像是VTK里非常重要的一种数据结构。本章重点讲解VTK在数字图像处理应用方面的相关技术。 1、VTK图像数据结构 数字图像文件内容由两个…  数字图像是一种重要的多媒体数据广泛应用于工业生产、生物医学、地质、气象等重要领域。数字图像处理技术具有重要的应用价值。图像是VTK里非常重要的一种数据结构。本章重点讲解VTK在数字图像处理应用方面的相关技术。 1、VTK图像数据结构 数字图像文件内容由两个部分组成:图像头信息和数据。图像头信息定义了图像的基本 信息主要包括起点位置(Origin)、像素间隔(Space)和维数(Dimension)。通过这三个参数即可确定图像空间位置和大小。图像可以看作空间中的一个规则的网格网格中的每个最小单元称为像素(二维)或者体素(三维)网格在每个方向上的像素或者体素个数即为图像在该方向的维数。像素索引表示每个像素在图像网格中的位置是图像内部的网格坐标。 在医学图像中每个图像除了内部坐标外还存在一个世界坐标这个世界坐标依赖于成像设备。在医学图像中起点位置、像素间隔和图像维数决定了世界坐标系。这样通过起点位置、像素间隔和像素索引即可计算每个像素的世界坐标。 图5-1表示一个4x2x3体素的图像即图像的维数每一个小球表示一个像素;而图像的原点为(5.1,10.0,6.5)两个像素之间的间隔表示像素间隔每个方向的像素间隔分别为1.5、1.5 和1.8。 图像数据即为图像像素的像素值一般采用一维数组来表示和存储。已知像素索引和图像维数的情况下即可计算每个像素对应的像素值。通常图像的像素值为一个标量例如灰度图像;图像像素值也可以是一个矢量例如梯度图像;另外图像像素值还可以是张量,如弥散张量成像(Diffusion Tensor ImagingDTI)。医学图像处理中经常使用的是灰度图像。 这里需要注意:灰度图像像素或者体素的数据类型在一般的灰度图像处理中不需要考虑因为其范围默认为0~255可以采用一个unsigned char类型来表示。但是在医学图像处理中256灰度级远远不能满足要求因此灰度范围往往大于256级。 常见医学图像的像素数据类型为 unsigned short灰度范围为 0~65536。另外有时为了精度的考虑也会使用 int、float或者 double 类型因此需要格外注意。由前面章节内容可知VTK 中图像数据结构由 vtkImageData 类表示。利用 vtkImageData可以方便地创建、读写和访问图像数据。下面以VTK图像创建为起点一步步走进VTK图像处理的世界。 2、VTK图像创建 2.1 VTK图像源 Source VTK中内置了多个创建图像的 Source 类利用这些 Source 类可以快速创建图像。这里以vtkImageCanvasSource2D为代表进行说明。该Source类的功能是创建一个画布(空白图像)并提供了多种几何图形(点、线段、圆、矩形以及图像等)的绘制填充功能。 #include iostream#include vtkAutoInit.h VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);#include vtkSmartPointer.h #include vtkImageData.h #include vtkImageCanvasSource2D.h #include vtkRenderWindow.h #include vtkRenderWindowInteractor.h #include vtkInteractorStyleImage.h #include vtkRenderer.h #include vtkImageActor.hint main() {vtkSmartPointervtkImageCanvasSource2D canvas vtkSmartPointervtkImageCanvasSource2D::New();canvas-SetScalarTypeToUnsignedChar();canvas-SetNumberOfScalarComponents(3);canvas-SetExtent(0, 400, 0, 400, 0, 0);canvas-SetDrawColor(255, 0, 0.0);canvas-FillBox(0, 100, 0, 100);canvas-Update();canvas-SetDrawColor(0, 255, 0.0);canvas-FillBox(100, 200, 100, 200);canvas-Update();// Create actorsvtkSmartPointervtkImageActor redActor vtkSmartPointervtkImageActor::New();redActor-SetInputData(canvas-GetOutput());// Define viewport ranges// (xmin, ymin, xmax, ymax)double redViewport[4] { 0.0, 0.0, 1.0, 1.0 };// Setup renderersvtkSmartPointervtkRenderer redRenderer vtkSmartPointervtkRenderer::New();redRenderer-SetViewport(redViewport);redRenderer-AddActor(redActor);redRenderer-ResetCamera();redRenderer-SetBackground(0.2, 0.2, 0.2);// Setup render windowvtkSmartPointervtkRenderWindow renderWindow vtkSmartPointervtkRenderWindow::New();renderWindow-AddRenderer(redRenderer);renderWindow-SetSize(480, 480);renderWindow-Render();renderWindow-SetWindowName(ImageCanvasSource2D);// Setup render window interactorvtkSmartPointervtkRenderWindowInteractor renderWindowInteractor vtkSmartPointervtkRenderWindowInteractor::New();vtkSmartPointervtkInteractorStyleImage style vtkSmartPointervtkInteractorStyleImage::New();renderWindowInteractor-SetInteractorStyle(style);// Render and start interactionrenderWindowInteractor-SetRenderWindow(renderWindow);renderWindowInteractor-Initialize();renderWindowInteractor-Start();return EXIT_SUCCESS; }上面的代码片段中先定义了一个vtkImageCanvasSource2D对象然后设置画布的像素数据类型、像素组分数目和画布的大小;然后利用画布的FiIlIBox()方法在画布中绘制两个矩形,并通过画布的 SetDrawColor()方法来设置两个矩形的颜色。 除了vtkImageCanvasSource2D 外VTK还提供了其他类似的Source 类来快速生成特定的图像例如vtkImageEllipsoidSource该类根据指定的中心以及各个轴的半径来生成一个前景为椭圆(球)的二值像;vtkImageGaussianSource 类生成一幅像素值服从高斯分布的图像vtkImageGridSource 用于生成网格线图像;vtkImageNoiseSource 生成一个像素值为随机数的噪声像。vtkImageSinusoidSource 生成的图像像素值由正弦函数决定。 2.2 直接创建图像 利用上述图像Source可以快速地生成特定的图像,但是实际应用中它们用到得较少。VTK中可以手动生成图像然后根据需要进行像素赋值。 #include iostream#include vtkAutoInit.h VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);#include vtkSmartPointer.h #include vtkImageData.h #include vtkRenderWindowInteractor.h #include vtkRenderer.h #include vtkImageActor.h #include vtkInteractorStyleImage.h #include vtkRenderWindow.h #include vtkType.hint main() {vtkSmartPointervtkImageData img vtkSmartPointervtkImageData::New();img-SetDimensions(16, 16, 1);// 分配标量数据并设置数据类型为VTK_UNSIGNED_CHARimg-AllocateScalars(VTK_UNSIGNED_CHAR, 1);unsigned char* ptr (unsigned char*)img-GetScalarPointer();for (int i 0; i 16 * 16 * 1; i){*ptr i % 256;}vtkSmartPointervtkImageActor redActor vtkSmartPointervtkImageActor::New();redActor-SetInputData(img);double redViewport[4] { 0.0, 0.0, 1.0, 1.0 };vtkSmartPointervtkRenderer redRenderer vtkSmartPointervtkRenderer::New();redRenderer-SetViewport(redViewport);redRenderer-AddActor(redActor);redRenderer-ResetCamera();redRenderer-SetBackground(1.0, 1.0, 1.0);vtkSmartPointervtkRenderWindow renderWindow vtkSmartPointervtkRenderWindow::New();renderWindow-AddRenderer(redRenderer);renderWindow-SetSize(640, 480);renderWindow-Render();renderWindow-SetWindowName(CreateVTKImageData);vtkSmartPointervtkRenderWindowInteractor renderWindowInteractor vtkSmartPointervtkRenderWindowInteractor::New();vtkSmartPointervtkInteractorStyleImage style vtkSmartPointervtkInteractorStyleImage::New();renderWindowInteractor-SetInteractorStyle(style);renderWindowInteractor-SetRenderWindow(renderWindow);renderWindowInteractor-Initialize();renderWindowInteractor-Start();return EXIT_SUCCESS; }先定义 vtkImageData 对象然后指定图像的维数而图像的原点和像素间隔则都是采用默认值因此不需要设置。SetScalarTypeToUnsignedChar()指定图像的像素数据类型为 unsigned charSetNumberOfScalarComponents()则指定每个像素值的组分数为 1即每个像素值为1个标量值。参数设置完毕调用 AllocateScalars()分配内存生成图像数据。图像生成后默认所有像素值为 0。可以通过访问图像数据数组来设置每个像素值,vtkImageData:: GetScalarPointer()即返回图像的数据数组(图像数据数组采用一维数组参考本书3.6节的内容)然后根据图像的大小访问每个像素并为其赋值。 3、VTK图像显示 3.1 vtkImageViewer2 VTK早期的版本提供了vtkImageViewer 类来显示图像随着版本的发展目前使用vtkImageViewer2来代替vtkImageViewer 实现图像的显示。vtkImageViewer2 中封装了VTK图像显示的可视化渲染引擎包括vtkActor、vtkRender、vtkRenderWindow、vtkInteractorStypeImage等对象可以方便地完成图像显示和交互。该类提供的主要交互操作有图像放缩、窗宽窗位调节并提供切片选择及切片方向设置接口尤其适合三维图像的切片显示。下述代码说明了使vtkImageViewer2显示图像的方法。 #include iostream#include vtkAutoInit.h VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);#include vtkSmartPointer.h #include vtkImageViewer2.h #include vtkRenderWindow.h #include vtkRenderWindowInteractor.h #include vtkRenderer.h #include vtkMetaImageReader.h//测试图像../data/brain.mhd int main(int argc, char* argv[]) {std::string sFile ../data/brain.mhd;vtkSmartPointervtkMetaImageReader reader vtkSmartPointervtkMetaImageReader::New();reader-SetFileName(sFile.c_str());reader-Update();vtkSmartPointervtkImageViewer2 imageViewer vtkSmartPointervtkImageViewer2::New();imageViewer-SetInputConnection(reader-GetOutputPort());vtkSmartPointervtkRenderWindowInteractor renderWindowInteractor vtkSmartPointervtkRenderWindowInteractor::New();imageViewer-SetupInteractor(renderWindowInteractor);imageViewer-SetColorLevel(500);imageViewer-SetColorWindow(2000);imageViewer-SetSlice(40);imageViewer-SetSliceOrientationToXY();imageViewer-Render();imageViewer-GetRenderer()-SetBackground(1.0, 1.0, 1.0);imageViewer-SetSize(640, 480);imageViewer-GetRenderWindow()-SetWindowName(DisplayImageExample);renderWindowInteractor-Start();return EXIT_SUCCESS; }这里为了更好地演示vtkImageViewer2的功能以一幅三维医学图像为例进行说明。首先使用 vtkMetalmageReader 读入一个*.mhd 格式的图像然后定义vtkImageViewer2 对象显示图像。为了实现鼠标、键盘消息响应定义vtkRenderWindowInteractor 对象并通过vtkImageViewer2::SetInteractor()设置交互对象。最后设置了窗位(ColorLevel)、窗宽(ColorWindow)、切片索引(Slice)和切片方向(Orientation)等参数。 在渲染窗口中按下鼠标左键拖动鼠标可以调节图像的窗宽窗位从而显示不同灰度范围内容;按下鼠标右键拖动鼠标可以缩放图像。当然这些交互操作可以由用户根据需要自己定义vtkInteractorStyle子类并响应相应的操作。 1.窗宽/窗位的概念   窗宽是图像显示的灰度范围。一般显示器的灰度范围为256级而医学图像的灰度范围则远远大于该范围因此通过显示器显示时不能显示所有灰度级需要使用窗宽来定义欲显示的灰度范围。当灰度值高于该范围的最大值时均以白影显示;当低于该范围时均以黑色显示。若增大窗宽则显示具有不同灰度值的组织结构增多但是会降低组织之间的对比度若减小窗宽则可视的不同灰度组织结构会减少同时增大组织结构的对比度。 窗位是窗宽的中心位置(见图5-5)。窗宽只是确定了CT图像灰度范围上的可视部分范围还需要窗位来确定可视灰度范围的具体位置。同样的窗宽会根据窗位的位置变化来显示不同的组织结构。比如窗宽为200当窗位为100时可视灰度范围为0-200:当窗位为500时可视灰度范围为400~600。当窗宽窗位确定以后显示时底层会将可视灰度范围转换到256灰度级进行显示。 2.医学图像二维视图   切片(Slice)或切面是三维图像比较常用的概念尤其在医学图像中不同方向的切面 都有特定的名字(见图5-6)分别是:矢状面(Sagital Plane)沿着身体前后径所做的与地面垂直的切面;冠状面(Coronal Plane)沿着身体左右径所做的与地面垂直的切面:横断面(Transverse/AxialPlane)是指横断身体与地面平行的切面。设置切片的方向即是通过不同的方向来观察人体内部组织结构。   常见的医学图像可视化软件通常会提供四个视图用来显示图像:横断面视图、矢状面视图、冠状面视图和三维视图例如图5-7所示的视图是来自德国癌症研究中心的MITK3M3医学图像处理软件。 类vtkImageViewer2提供了SetSlice()函数来设置切片索引SetSliceOrientationToXY()则将切片的方向设置为垂直XY平面方向。此外还可以设置为垂直YZ或者XZ平面方向其对应函数分别为SetSliceOrientationToYZ(和 SetSliceOrientationToXZ()。默认情况下切片方向为垂直于XY平面即沿着乙轴方向根据设置的切片索引获取乙轴方向的具体切片进行显示。 3.2 vtkImageActor vtkImageActor 是一个三维图像渲染Actor通过纹理映射将图像映射到一个多边形上进行显示。使用vtkImageActor 较vtkImageViewer2 要复杂一些需要建立完整的渲染管线包括 vtkImageActor、vtkRender、vtkRenderWindow 和 vtkRenderWindowInteractor。另外作为二 维图像浏览器不需要在三维空间中进行旋转操作因此还需要为vtkRenderWindowlInteractor 定义一个vtkInteractorStylelmage 对象。下例中使用vtkImageActor 建立图像渲染管线来显示图 像并实现交互功能。 #include iostream#include vtkAutoInit.h VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);#include vtkSmartPointer.h #include vtkRenderWindow.h #include vtkRenderWindowInteractor.h #include vtkInteractorStyleImage.h #include vtkRenderer.h #include vtkBMPReader.h #include vtkImageActor.h//测试图像../data/lena.bmp int main(int argc, char* argv[]) {std::string sFile ../data/lena.bmp;vtkSmartPointervtkBMPReader reader vtkSmartPointervtkBMPReader::New();reader-SetFileName(sFile.c_str());reader-Update();vtkSmartPointervtkImageActor imgActor vtkSmartPointervtkImageActor::New();imgActor-SetInputData(reader-GetOutput());vtkSmartPointervtkRenderer renderer vtkSmartPointervtkRenderer::New();renderer-AddActor(imgActor);renderer-SetBackground(1.0, 1.0, 1.0);vtkSmartPointervtkRenderWindow renderWindow vtkSmartPointervtkRenderWindow::New();renderWindow-AddRenderer(renderer);renderWindow-SetSize(640, 480);renderWindow-Render();renderWindow-SetWindowName(DisplayImageExample2);vtkSmartPointervtkRenderWindowInteractor renderWindowInteractor vtkSmartPointervtkRenderWindowInteractor::New();vtkSmartPointervtkInteractorStyleImage style vtkSmartPointervtkInteractorStyleImage::New();renderWindowInteractor-SetInteractorStyle(style);renderWindowInteractor-SetRenderWindow(renderWindow);renderWindowInteractor-Initialize();renderWindowInteractor-Start();return EXIT_SUCCESS; }4、VTK图像融合 前面介绍的两种显示图像的方法都是在窗口中显示一幅图像。在实际应用中经常需要在窗口中同时显示多幅图像这就会用到图像融合技术。图像融合是利用图像的不透明度来合 成图像。在VTK中用类vtkImageBlend实现图像的融合。vtkImageBlend 可以接收多个图像输入其输出为融合图像。输出图像的像素间隔、原点、范围以及像素组分个数与第一个图像一致。该类提供了两种融合模式。 第一种是标准模式也是默认的融合方式。第二种是混合模式(Compound)。该模式下输出结果利用不透明度的和做归一化。当像素的不透明度 alpha*opacity 小于或等于阈值 threshold 时该像素会被忽略。 #include vtkSmartPointer.h #include vtkImageData.h #include vtkImageCanvasSource2D.h #include vtkImageBlend.h #include vtkRenderWindow.h #include vtkRenderWindowInteractor.h #include vtkInteractorStyleImage.h #include vtkRenderer.h #include vtkJPEGReader.h #include vtkImageActor.h #include vtkImageCast.h#include vtkAutoInit.h VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);//测试图像../data/lena-gray.jpg int main(int argc, char* argv[]) {std::string sFile ../data/lena-gray.jpg;vtkSmartPointervtkJPEGReader reader vtkSmartPointervtkJPEGReader::New();reader-SetFileName (sFile.c_str());reader-Update();vtkSmartPointervtkImageCanvasSource2D imageSource vtkSmartPointervtkImageCanvasSource2D::New();imageSource-SetNumberOfScalarComponents(1);imageSource-SetScalarTypeToUnsignedChar();imageSource-SetExtent(0, 512, 0, 512, 0, 0);imageSource-SetDrawColor(0.0);imageSource-FillBox(0, 512, 0, 512);imageSource-SetDrawColor(255.0);imageSource-FillBox(100,400,100,400);imageSource-Update();vtkSmartPointervtkImageBlend imageBlend vtkSmartPointervtkImageBlend::New();imageBlend-AddInputData(reader-GetOutput());imageBlend-AddInputData(imageSource-GetOutput());imageBlend-SetOpacity(0, 0.4);imageBlend-SetOpacity(1, 0.6);imageBlend-Update();// Create actorsvtkSmartPointervtkImageActor originalActor1 vtkSmartPointervtkImageActor::New();originalActor1-SetInputData(reader-GetOutput());vtkSmartPointervtkImageActor originalActor2 vtkSmartPointervtkImageActor::New();originalActor2-SetInputData(imageSource-GetOutput());vtkSmartPointervtkImageActor blendActor vtkSmartPointervtkImageActor::New();blendActor-SetInputData(imageBlend-GetOutput());// Define viewport ranges// (xmin, ymin, xmax, ymax)double leftViewport[4] {0.0, 0.0, 0.33, 1.0};double midViewport[4] {0.33, 0.0, 0.66, 1.0};double rightViewport[4] {0.66, 0.0, 1.0, 1.0};// Setup renderersvtkSmartPointervtkRenderer originalRenderer1 vtkSmartPointervtkRenderer::New();originalRenderer1-SetViewport(leftViewport);originalRenderer1-AddActor(originalActor1);originalRenderer1-ResetCamera();originalRenderer1-SetBackground(1.0, 1.0, 1.0);vtkSmartPointervtkRenderer originalRenderer2 vtkSmartPointervtkRenderer::New();originalRenderer2-SetViewport(midViewport);originalRenderer2-AddActor(originalActor2);originalRenderer2-ResetCamera();originalRenderer2-SetBackground(1.0, 1.0, 1.0);vtkSmartPointervtkRenderer blendRenderer vtkSmartPointervtkRenderer::New();blendRenderer-SetViewport(rightViewport);blendRenderer-AddActor(blendActor);blendRenderer-ResetCamera();blendRenderer-SetBackground(1.0, 1.0, 1.0);vtkSmartPointervtkRenderWindow renderWindow vtkSmartPointervtkRenderWindow::New();renderWindow-AddRenderer(originalRenderer1);renderWindow-AddRenderer(originalRenderer2);renderWindow-AddRenderer(blendRenderer);renderWindow-SetSize( 640, 320 );renderWindow-Render();renderWindow-SetWindowName(ImageBlendExample);vtkSmartPointervtkRenderWindowInteractor renderWindowInteractor vtkSmartPointervtkRenderWindowInteractor::New();vtkSmartPointervtkInteractorStyleImage style vtkSmartPointervtkInteractorStyleImage::New();renderWindowInteractor-SetInteractorStyle(style);renderWindowInteractor-SetRenderWindow(renderWindow);renderWindowInteractor-Initialize();renderWindowInteractor-Start();return EXIT_SUCCESS; }该示例中先读入一幅灰度图像,另外生成一个二值图像;然后定义了vtkImageBlend 对象SetInput()函数设置两个图像作为输入。这里设置输入图像时由于可以输入多个图像因此需要给定图像的id号来设置输入。SetOpacity()函数用于设置对应id号的图像不透明度的大小当不透明度为1.0时为完全不透明。
http://www.w-s-a.com/news/158143/

相关文章:

  • 重庆网站建设平台免费猎头公司收费收费标准和方式
  • 形象设计公司网站建设方案书打开一个不良网站提示创建成功
  • 网站手机页面如何做网站关键字 优帮云
  • 免费的黄冈网站有哪些下载软件系统软件主要包括网页制作软件
  • 企业微站系统重庆高端网站建设价格
  • 有没有做衣服的网站吗网站自适应开发
  • 青海省制作网站专业专业定制网吧桌椅
  • 网站开发的项目17岁高清免费观看完整版
  • 手机网站建设多少钱一个门网站源码
  • 重庆 网站开发天津住房和城乡建设厅官方网站
  • 泰安高级网站建设推广厦门高端网站建设定制
  • jsp网站开发引用文献手机seo排名
  • 创建一家网站如何创设计网页的快捷网站
  • 1688代加工官方网站h5开发教程
  • 静态网站源码下载网站怎么显示备案号
  • 网站代码设计网站开发维护任职要求
  • 长寿做网站的电话怎么快速刷排名
  • 上海市中学生典型事例网站邯郸全网推广
  • 厦门网站建设680元好男人的最好的影院
  • 石家庄网站建设设计产品设计专业就业前景
  • 网站移动排名做最好最全的命理网站
  • 网站怎么防黑客杭州市做外贸网站的公司
  • 网站推广公司认准乐云seo易语言做网站登录
  • 配色设计网站推荐网站下拉菜单重叠
  • 内容展示型网站特点在北京注册公司需要多少钱
  • h5网站源代码创意设计理念
  • 岳阳网站开发服务推广运营平台
  • 网站开发得多长时间湖南建设人力资源网证书查询
  • 论坛网站开发网络营销是什么时候产生的
  • 帮人做网站赚钱无忧软文网