2016年11月17日
1.为什么有窗宽窗位? 医学图像领域的关键技术窗技术,是CT检查中用以观察不同密度的正常组织或病变的一种显示技术,包括窗宽(window width)和窗位(window level)。由于各种组织结构或病变具有不同的CT值,因此想要显示某一组织结构细节时,应该选择适合观察该组织或病变……
阅读全文
2016年10月8日
DICOM通信-PDU数据包(1)中主要分析了DICOM通信协议的连接协商请求和连接协商应答。 在7个PDU数据包中还有5个数据包,从结构上来看,他们比协议的协商过程要简单明了一些。 这篇博客就来分析下剩下的5种数据包。 博客中使用的是WireShark抓包工具获取到的通信传输数据。 1……
阅读全文
2016年10月7日
DICOM上层协议为DIMSE提供透明的网络数据传输服务,即以上层协议规定的协议数据单元传送接收DIMSE的命令流与数据流。上层协议中制定了上层服务以及协议数据单元(Protocol Data Unit,PDU)。 PDU是处在同一层的对等体用来交换的信息格式,DICOM根据上层服务定义了以……
阅读全文
2016年9月15日
//.h文件 #pragma once class dicomRead { public: dicomRead(void); ~dicomRead(void); private: const char* PatientName; const char* PatientSex; long PatientAge; long Width; long Height; long Depth; long WindowsLevel; long WindowsWidth; double space[2]; double spaceZ; double ImagePosition[3]; double ImageOrientation[6]; unsigned short* buffer; public: const char* GetPatientName(); const char* GetPatientSex(); long GetPatientAge(); long GetWidth(); long GetHeight(); long GetDepth(); long GetWindowsLevel(); long GetWindowsWidth(); double* GetSpace(); double GetSpaceZ(double orientation[6],double position1[3],double position2[3]); double* GetImagePosition(); double* GetImageOrientation(); unsigned short* GetBuffer(); void DicomRead(const char* path); void compressionDicom(const char* path,int repType); void decompressionDicom(const char* path); void readDICOMInfo(const char* path); }; #include "dicomRead.h" #include <map> #include <math.h> #include <iostream> #include <string> #include "dcmtk\config\osconfig.h" #include "dcmtk\dcmdata\dctk.h" #include "dcmtk\dcmdata\dcxfer.h" #include "dcmtk\dcmdata\dctag.h" #include "dcmtk\dcmdata\dctagkey.h" #include "dcmtk\dcmdata\dcpxitem.h" #include "dcmtk\oflog\config.h" #include "dcmtk\dcmimgle\dcmimage.h" #include "dcmtk\dcmjpeg\djdecode.h" #include "dcmtk\dcmjpeg\djdijg12.h" #include "dcmtk\dcmjpeg\djdijg8.h" #include "dcmtk\dcmjpeg\djdijg16.h" #include "dcmtk\dcmjpeg\djencode.h" #include "dcmtk\dcmjpeg\djrploss.h" #include "dcmtk\dcmjpeg\djrplol.h" #include "dcmtk\dcmdata\dcrleerg.h" #include "dcmtk\dcmdata\dcrledrg.h" using……
阅读全文
2016年5月11日
11.1 重置密码流程分析 重置密码主要流程如下: 其中,发送重置密码邮件后的流程如下: 11.2 first_or_404和可调用对象 1.first_or_404 视图函数接受用户填写的email账号,如果不存在应该跳转到404界面,这个逻辑flask-sqlalchemy为我们提供了良好的封装,不需要手动去处理,只需要调用Q……
阅读全文
2016年5月10日
10.1 最近的礼物 我们的首页会显示最近的赠送书籍列表。这个列表有三个限制条件: 1.数量不超过30 2.按照时间倒序排列,最新的排在最前面 3.去重,同一本书籍的礼物不重复出现 1.首先编写复杂SQL对应的ORM代码 由于是最近的礼物,所以应该编写在models/gift.py中 @classmethod def recent(cls): # 链式调用……
阅读全文
2016年5月9日
本章是一个综合应用章节。我们将看到如何使用多个Python的知识点综合解决问题。我们将进一步的使用@contextmanager来改善前面所学到的上下文管理器,并结合yield来优化数据库事务。此外,我们还将重写Flask中的一些对象的方法,来实现我们自己的业务逻辑 9.1 鱼豆 我们的鱼……
阅读全文
2016年5月8日
8.1 viewmodel意义的体现与filter函数的巧妙应用 在搜索书籍页面里,需要将每一条结果的作者,出版社,价格在一行展示,并以”/“分割。由于这三个属性还有可能为空,所以在html模板里处理不太方便。我们选择将这些数据处理的工作放在viewmodel中。 简单粗暴一点的方法是写一……
阅读全文
2016年5月7日
本章,我们将通过借助学习flask的模板来间接学习:列表推导式的应用、三元表达式的应用、@Property属性描述符、filter函数的应用、管道过滤器 7.1 静态文件访问原理 1.默认访问方法 Flask访问静态文件非常简单,只需要在项目根目录建立static文件夹。将静态资源文件放入s……
阅读全文
2016年5月6日
本章我们提出一个概念ViewModel,并详细解释ViewModel的意义。此外面向对象虽然是老生常谈,但你真的理解面向对象吗?我们将在本章中通过重构来一步步揭示到底什么才是对象,如何写出面向对象的代码来。思维的训练,永远比业务要重要 6.1 ViewModel的基本概念 大多时候,我们从……
阅读全文