Home

Medv4D - Computer Graphics Group

image

Contents

1. Image lt ElementType 3 gt xim Image lt ElementType 3 gt x m_dataSet uint32 width uint32 height uint32 depth int32 xStride int32 yStride int32 zStride ElementType pointer im gt GetPointer width height depth xStride yStride zStride put slices as dataPieces Suppose whole DS is serialized Not only window part DataBuff buff size_t sliceSize width x height for uint32 k 0 k lt depth k buff data void pointer buff len sliceSize x sizeof ElementType job gt PutDataPiece buff pointer sliceSize move on next slice template lt typename ElementType gt void ImageSerializer lt typename ElementType 3 gt 39 Chapter 6 Remote computing CellBE library OnDataPieceReadRequest DataPieceHeader xheader DataBuffs amp bufs Image ElementType 3 xim Image lt ElementType 3 x m_dataSet uint32 width uint32 height uint32 depth int32 xStride int32 yStride int32 zStride ElementType spointer im gt GetPointer width height depth xStride yStride zStride size t sliceSize width x height DataBuff buf buf data pointer sliceSize m_currSlice buf len sliceSize x sizeof ElementType bufs push back buf m_currSlicet important Here is example of new dataSet registration in GeneralDataSetSerializer Actual registration is performed
2. 26 5 T Compilation ioter e Ee FERRI E a 26 2d T Dependencies cete De een 26 5 2 ATCDIeCLUETe ciet ec reto rei e toner crie eot cT REC EET va stoje 26 Ds DOSAGE C EO 27 6 Remote computing library nnennnnnene 28 6 1 svetijo busi 28 UM NNBIDDWUEA 28 0 2 cae D ER 28 De Ms O RE 28 0 22 SerlaliZerS E EEE 30 6 2 3 CellChent Class niti rr erp 31 6 24 Remote Falters TER 31 DP MEI IAM 32 6 3 USAD ves HH 34 6 3 1 FilterS eral zen P Ee pe Prec ba eer epp gia 35 6 3 2 E Eas 37 UEM MIHI 41 7 Graphical User Interface 44 14 4 4 400000 00 44 E 44 EMO 44 P 44 7 2 Vieni m 44 FZM urne telnet 44 7 252 46 132 3 M4
3. public typedef to Properties of filter this serializer is for 35 Chapter 6 Remote computing CellBE library Just for simplier usage typedef typename M4D Imaging ThresholdingFilter lt InputImageType gt Properties Properties ctor subject of customization must call typed ancestor ctor FilterSerializer Properties x props uint1l6 id AbstractFilterSerializer FID_Thresholding id _properties props member performing CIS void SerializeClassInfo M4D CellBE NetStream 65 s lt lt uint8 ImageTraits lt InputImageType gt Dimension s lt lt uint8 GetNumericTypeID lt ImageTraits lt InputImageType gt ElementType gt member performing CIS deserialization void DeSerializeClassInfo M4D Imaging AbstractPipeFilter xxresultingFilter AbstractFilterSerializer serializer const uintl6 id M4D CellBE NetStream 65 91068 dim read from netStream uint8 typeID s gt gt dim s gt gt typeID build apropriate classes based read info with assistance of CreateThresholdingFilter templated function defined above NUMERIC TYPE TEMPLATE SWITCH MACRO typelD DIMENSION TEMPLATE SWITCH MACRO dim CreateThresholdingFilter lt TTYPE resultingFilter serializer id s pair of members performing ACS void SerializeProperties M4D CellBE NetStream 65 s lt lt properties gt bottom lt
4. Study date from given interval There are another mode of this tool When info param is given it only scans the files and builds the tree At the end is the tree written and you can see what data is within given directory 5 1 Compilation 5 1 1 Dependencies Common library DCMTK library 5 2 Architecture Everything is in namespace M4D DataModifier Whole design of class hierarchies is Figure 5 1 26 Chapter 5 Data modifier Figure 5 1 Module scheme Dictionary EntryContainer m_femaleForeNames NameVector m_maleForeNames NameVector m_patients PatientInfoMap m_femaleSurNames NameVector m_studies StudyInfoMap 2 maleSurNames NameVector tm dict Dictionar DictionaryFileLoad GenerateName sex bool FlushMaps out stream 0 5 3 Usage You can edit the dictionary files foreNames cfg sureNames cfg which should be placed in working directory of the dataModifier executable Informations about parameters run the tool without params 27 Chapter 6 Remote computing library Library used to send some parts of pipeline to remote mashines to be executed and result sent back The name is from Cell Broadband Engine architecture name comming from IBM This architecture contains also supercomputers like Blade servers as well as not so huge system like the one in PlayStation3 console CellBE should originally be the one that have b
5. Most common is PACS server Since there is no universal language SQL like system actual quering is performed through dicom files Filled tags means SQL WHERE clause tags provided with no value defines wanted columns Although DICOM provides variety filetypes we have focused on filetypes that provides images Most used are CT Computer Tomography MR Magnetic Resonator RT rentgen DICOM server implements searching C FIND query file is send and resulting files are recieved moving C MOVE query file is send like in searching but with already known ID params that identify specific image or set of image Then particular image files are recieved storing C STORE new image with unique generated IDs is send not yet implemeted functionalities Library also provides local filesystem searching funcionality This is used when actual data are stored on filesystem The library uses 3rd party toolkit DCMTK by DICOM Office dicom offis de for manipulation with DICOM files reading saving server quiering 4 1 DCMTK DICOM ToolKit is public domain library for handling DICOM files It is written in That is the main reason we chosed it to use Another reason was that it implement some example programs that you can compose working DICOM server We use them to have a DICOM server and be able to test with it Library also contains some programs that serves as DICOM client From that programs our DICOM client code was
6. lt properties gt top lt lt properties outValue void DeSerializeProperties M4D CellBE NetStream 65 s gt gt properties gt bottom gt gt properties gt top gt gt properties gt outValue 36 Chapter 6 Remote computing CellBE library protected Properties x properties pointer to properties actual content Here is snippet from FilterSerializerArray cpp constructor where actual registration of a new FilterSerializers should be performed FilterSerializerArray is based on array of filterSerializers Each serializer on position defined by it ID in FilterID enum within FilterSerializerArray constructor creation of buddy instance of our new serializer class on place within the array defined by our new enum member step 1 m_serializerArray uint32 FID_Thresholding new FilterSerializer lt typename ThresholdingFilter lt Image lt uint8 3 gt gt gt NULL 0 6 3 2 DataSetSerializer Next is the list of neccessary steps for adding new DataSetSerializer Add enum DataSetType item in Imaging dataSetClassEnum h header Write actual DataSetSerializer derived from AbstractDataSetSerializer and implementing its interface Right place where the code to place is cell BE DataSetSerializers folder Register new dataSetSerializer by adding new switch case of new enum member step 1 into GeneralDataSetSerializer GetDataSetSerializer method and writing the content
7. Right place where the code to place is cellBE FilterSerializers folder Register new Serializer by adding instance into array in FilterSerializerArray class constructor and appropriate edit size of the array Example of creation of a new FilterSerializer taken from code For details see ThresholdingSerializer h amp tcc It uses supporting function that is called righght after CIS supportig templated function that creates actual instances template typename ElementType unsigned Dim void CreateThresholdingFilter M4D Imaging AbstractPipeFilter xxresultingFilter AbstractFilterSerializer x serializer const uintl6 id M4D CellBE NetStream amp s typedef typename M4D Imaging Image lt ElementType Dim gt ImageType typedef typename M4D Imaging ThresholdingFilter lt ImageType gt Filter typedef typename FilterSerializer lt Filter gt FilterSerializer Filter Properties prop new Filter Properties xresultingFilter new Filter prop filter creation serializer new FilterSerializer prop id appropr serializer actual FilterSerializer class template lt typename InputImageType gt class FilterSerializer lt M4D Imaging ThresholdingFilter lt InputImageType gt gt public AbstractFilterSerializer inheritance from AbstractFilterSerializer
8. SendDestroy DESTROY request connection closed DataPiece Destroys amp cleenup the job terminate connection When accepts connection reads PrimaryHeader and based on PrimaryHeader action it decides what to do For action definitions see BasicJob Primary action performed by Server is job creation It creates new ServerJob instance adds it to the JobManager and then all work is delegate to this job Then the job recieve other commends the socket that is created in accept is given to job and performs appropriate actions 33 Chapter 6 Remote computing CellBE library Server can also understand other actions This is done for case when connection to clint is broken After reconnect server has to react to all types of action and assotiate recieved request to existing job give new socket to it and delegate reaction to the existing job Figure 6 3 Job states FAIL CREATION_FAILED OK FILTERS properties reading OK DATASET data recieving DATASET_OK ABORTED ABORT ii EL FAILED OK states EXECUTED 1 1 1 a 1 Result back oblaki 34 Chapter 6 Remote computing CellBE library 6 3 Usage 6 3 1 FilterSerializer Next is the list of neccessary steps for adding new FilterSerializer Add enum FilterID item in cell BE filterIDEnums h header Write actual FilterSerializer derived from AbstractFilterSerializer and implementing its interface
9. So it can be easily included to pipeline This class takes instance of our implmentation of raster images and create VTK version of that 20 Chapter 4 DICOM Client library This class is gate to DICOM world DICOM is a standard describing creating storing manipulating and many more actions taken on medical data For full description informations see http www dclunie com dicom status status html Actual standard is little bigger because it decribes all possible scenarios of all possible types So when you want to get inside the mather you can read only some parts of it There are those parts reffered in the code of particular parts Data are stored in files dcm The files are divided into pairs of key and value There is dictionary of keys The keys changes with every new specification of the stadard yearly There are set of commonly used types of files like Images Waves of sound CardioGrams Each type has its own set of mandatory or optionaly tags to be filled when created on a device Most important tag is the one that contains actual data of the image Although every DICOM file has set of common tags Theese are used to identify the file There are 4 levels of entities that identifies the files These are patien study serie image So to fully identify one image 4 IDs must be provided On these tags DICOM server quering is performed where data are normally stored There are many implementations of that server
10. by adding another switch case of dataSet type which serializer is being registered The same way should be switch case added to DeSerializeDataSetProperties AbstractDataSetSerializer x GeneralDataSetSerializer GetDataSetSerializer AbstractDataSet xdataSet switch dataSet gt GetDatasetType case DATASET IMAGE NUMERIC TYPE TEMPLATE SWITCH MACRO AbstractImage x dataSet gt GetElementTypeID DIMENSION TEMPLATE SWITCH MACRO Abstract Image dataSet gt GetDimension return new ImageSerializer lt TTYPE DIM gt dataSet break case DATASET TRIANGLE MESH 40 Chapter 6 Remote computing CellBE library return NULL TOBEDONE WHEN triagleMesh created break 6 3 3 Remote filter Next is the list of neccessary steps for writing new remote filter Write new class that inherits from RemoteFilter templated class and implements all neccesary methodes PrepareOutputDatasets constructor In that new class should be all Filter options classes that compose the remote pipeline added as member variables hardcoded Here is BoneSegmentationRemote filter It contains thresholding and median filter See m_thresholdingOptions and m_medianOptions members This filter properties offers to the outer world by Get methodes to let them to be changed as well as definition the two mandatory neccesary
11. private GET PROPERTIES DEFINITION MACRO template typename ImageType gt r hresholdingFilter ImageType gt ThresholdingFilter PredecessorType new Properties GetProperties functor amp this elementFilter template typename ImageType gt ThresholdingFilter ImageType gt ThresholdingFilter typename ThresholdingFilter ImageType gt Properties prop PredecessorType prop 18 Chapter 2 Library Imaging GetProperties functor amp this elementFilter 2 5 3 Defining new dataset type This area is planned for future development some concepts are planned to be introduced to make this as easy as possible But main steps are clear now Designing dataset interfaces and synchronization system Use prepared abstract classes Implementing connection objects and input output ports Needed for interaction with pipeline Creating filter base classes working on this dataset type To make it easier for users 19 Chapter 3 Library vtklntegration This library is designed as bridge between libImaging and VTK it can convert images from Medv4D project to VTK representation So VTK viewers and filters can be applied to our data 3 1 Compilation 3 1 1 Dependencies libImaging and all its dependencies VTK www VTK org 3 2 Main parts 3 2 1 m4dImageDataSource This class is implementation of VTK interface vtkImageAlgorithm
12. 4 OMessageBox critical this tr Exception tr Some exception 7 2 2 M4D Viewer In this namespace there are classes that visualize the data passed by the image processing pipeline These classes have many signals and slots to connect to the other GUI components in M4D GUI namespace 46 Chapter 7 Graphical User Interface libm4dWidgets 7 2 2 1 m4dGUlAbstractViewerWidget This class is the base of all the viewer widget classes It is an interface to declare the necessary methods slots and signals to manage the viewer subclasses which makes it possible to add a viewer widget to another GUI component through this interface no matter what type of viewer it is There is an operator for downcasting every viewer widget to the appropriate OWidget so that it could be added to a GUI component There is also a function that tells which slots are implemented in the given type of viewer different viewers have different functionalities Other GUI components use this to know which slots should be connected Mouse buttons can be set and different modes can be set to personalize the viewer s behavior 7 2 2 2 m4dGUlSliceViewerWidget This class is used for visualizing the image data slice by slice Each slice is a 2D image which can be set to be selected and drawn according to the xy yz or zx axis Images are diplayed using OpenGL textures Image data comes through the image pipeline which needs the libImaging library to b
13. DICOMDIR format on either a CD your workstation s hard drive or a mapped network drive see Section 8 3 1 3 Working in different searching modes is almost identical you switch between the modes by changing tabs and you have always the same behavior All the tabs can be customized to suit your preferences by re sorting the columns in the exam lists Click a header to sort the list according to that heading For example click Patient Name to sort the list alphabetically Clicking the header field again will sort the list in the reverse order 56 Chapter 8 User Manual 8 3 1 1 Searching for Recent Exams Recent Exams are studies that were recently viewed it has two modes Recent Remote Exams recently retrieved and viewed from available DICOM server and Recent DICOMDIR recently viewed studies that are stored in DICOMDIR format To search for a Recent Exam 1 Click the Recent Exams tab 2 Click the or the icon to select the Recent Exams mode Recent Remote Exams recently retrieved and viewed from available DICOM server and Recent DICOMDIR recently viewed studies that are stored in DICOMDIR format Optionally filter the search by entering the search criteria Enter either a single criterion combination of Patient ID Last Name First Name Accession Number Study Description or Referring M D gt Optionally enter a range of dates in which to search Select the From and check boxes
14. Medv4D project documentation Szabolcs Grof Vaclav Klecanda Jan Kolomaznik Attila Ulman Medv4D project documentation by Szabolcs Grof Vaclav Klecanda Jan Kolomaznik and Attila Ulman Table of Contents EEA HEJ EVO vii 1 Library enini M REN 1 151 ERE Ob PD Ee mii uL 1 LIDS PENGON CIES san 1 MD Mat paris 1 1521 Og 1 1 22 MEE 1 1 2 3 vse secs costes es 1 12 4 DimeStamp hi ue oe ero hob em Ue Dd ce es 2 1 2 5 c Thread nika st nee etre ed e et eens aes ta etes 2 2 Eli 3 puente X 3 2 1 4 Dependencies ee E ER ERI 3 ATENE eI TII te 3 2 2 1 Datasets EL 4 DDD 4 2 2 3 POUUS A 5 p AC OMMECU ONS RERUM 5 SMELL PEE 5 2 3 T Dataset hieratchy oit tee WHERE dev EET PERLE biki 6 2 3 2 Falter Merate hy neci oet oed iem da eerte 7 2 3 3 Port and connection hierarchy esses ener nennen 8 2 4 Main design 9 2 4 T Filter execution e rrr ERR Hd 9 2 1 2 Locking image parts nire eerte Pod dedi e dde
15. OptsType m medianOptions Here is implementation of BoneSegmentationRemote constructor This way will be implemented all remote filters constructors There are two phases The first creation of defining container vector of FilterSerializers and putting Serializers that correspond to filter properties member variales into it The second stage is creating job while passing that defining container template lt typename ImageType gt BoneSegmentationRemote lt ImageType gt BoneSegmentationRemote PredecessorType new Properties AbstractFilterSerializer ser definig vector that will define actual remote pipelin FilterSerializerVector m_filterSerializers 42 Chapter 6 Remote computing CellBE library 410616 filterID 1 put into the vector serializers instances in order that is in remote pipe insert thresholding serializer ser GeneralFilterSerializer GetFilterSerializer lt Thresholding gt sam thresholdingOptions filterIDtt m filterSerializers push back ser insert median serializer ser GeneralFilterSerializer GetFilterSerializer lt Median gt sm medianOptions filterID m filterSerializers push back ser for other possible members definig remote pipe filters create job m job s cellClient CreateJob m filterSerializers 43 Chapter 7 Graphical User Interface libm4dWidgets 7 1 Toolkits 7 1 1 Qt The M
16. Selection 47 8 User r 49 A 49 8 1 Systent PEquUIne MSM x si 49 8 1 2 Installing the 50 8 2 Using the 50 8 21 50 82 2 USMS toolbar ruere retten teer T 50 8 2 3 USIMGS no te pO e e 52 8 3 Retrieving and Viewing entren 55 8 3 1 Using the Study Manager ieissar einen iiin i 55 8 3 2 VIEWING RENE 59 8 4 Manipulating Images 61 8 4 1 Adjusting window level settings 61 8 4 2 Changing image slice orientation 62 8 4 3 Adjusting image viewing nena 63 8 5 Measuring Nima ges 63 85 1 Overlay ime i eU EIN ERU 64 8 5 2 Making measurements errem tr rrr FE 64 8 5 3 PRODING IMA DES cnet teen 64 8 5 4 Clearing measurements pretii or rhe E Ice DER Ie 65 8 6 Replaceing viewers slice viewer 3D viewer nee 65 List of Tables 8 1 Mam 1018 E 8 2 Common tools 3 eiit ect eee ee ete ete 8 3 Measurement tools 8 4 Image Manipulation tools 8 5 Volumie
17. a study from the list and click View These studies will be available in the Recent DICOMDIR mode 8 3 2 Viewing studies Studies can be viewed using the procedures for the four exam tabs outlined in previous sections This section provide a general reiteration of those procedures In addition to learning how to view a study this section will also show you how to adjust the screen layout and compare multiple studies To view a study Select a study from the list and double click it to view it automatically or select a study from the list and click View The study appears in the main window in the previously selected viewer and the toolbar is updated according to the viewer you are using Images appear side by side in a grid default setting lt 1x2 like the films mounted beside each other on a light box This grid configuration can be adjusted by following the procedure outlined in Section 8 3 2 1 8 3 2 1 Adjusting the screen layout Images that appear on the screen are laid out in a side by side 1x2 grid configuration by default This configuration can be adjusted to suit your preferences To adjust the screen layout 59 Chapter 8 User Manual 1 Choose one of the following options to access the Screen Layout dialog box Tools Screen Layout Ctrl C Click The Screen Layout dialog box appears Omm m Es SE Omm JA 27 zE Columns Columns B i B JEN The Series la
18. ae oe bv ed nnd 11 2 4 3 Dumestamps i or t P p tr bes be iE e Prec babe eer 12 SML I bek 12 2 5 1 How to build pipeline aeree rire Ere rep 12 2 5 2 Creating new Deer eere tese eter v dei Loved evt ro eru e 15 2 3 3 Defining new dataset type ipei tre re Pet PP ERU FEE FERE E PEE rp Heer 19 3 Library 20 3 1 CompilatlO ss 20 3 1 1 DependencIeS EU C 20 Sup M 20 3 2 m4dimageDatasOou GCe niece cese teet ive eve a 20 4 DICOM Client 21 AV ID OMT 21 4 2 22 4 2 1 IDepende ticles i e o RERBA NEA EM 22 AD Am Che CLUEe s oH 22 Ze NNUS 22 S ADI 22 4 3 3 DICOMASSOCIAUION eap va kod ooo ye E eve 22 4 3 4 A bstractSeE VICE oeste tpe prep ute eate 23 is ie ee tte ert ele cer re delki tovto idest 23 iii LAW LORE SEL VICE 24 43 98 LOCALS CLVICE as oie m tonat eda Aisles eae aes 24 DU NULLI E 24 5 a
19. ases the image zoom and dragging down decreases it 4 Release the mouse button to keep the image at the new zoom setting 63 Chapter 8 User Manual 8 5 Measuring Images This section describes the measurement and selection tools which allow you measure images and make selections in a number of ways 8 5 1 Overlaying text Toggling the overlay hides or shows the displayed study information for a series To hide the written study information 1 Select a series 2 Choose one of the following options Tools Toggle Overlay Ctrl T Click To redisplay the written information select the series and click again 8 5 2 Making measurements There is an option to select points segments and even shapes The selection is drawn out immediately new point tool Tools New Point Ctrl D or click w and for each segment the segment length is also displayed in mm s If we select a closed shape meaning that the starting point of any of its segments is the ending point of another one this can be done by clicking on the starting point of the first segment after the last point has been selected and the shape is 2D which means that all of the points 3 coordinates are equal the centroid of the shape and the shape s area are measured and printed out as well only areas of non selfcrossing shapes are calculated correctly If a segment does not lie on the current slice it is not displayed If only one endpoint of the
20. assotiation For more details see DICOM doc ver _08 pdf chapter 9 1 4 and coresponding annexes 4 3 7 StoreService Implements service that performs C STORE operatoin to DICOM server It s purpose is to generate unique IDs and send new data to server Behavior in a nutshell Client SCU generates unique ID for sent new data establish assotiatoin with a server SCP and sends the data to server For more informations see DICOM doc ver _08 pdf chapter 9 1 1 and coresponding annexes Generation of unique IDs is based on prefix and the rest is delegated to DCMTK functions More informations about unique UDs generation see DICOM doc 4 3 8 LocalService Implements searching and gettting functions to local FS dicom files It sequentialy loads data files in specified folder and subfolders through queue read ID info based on that info and given filter inserts or not inserts if matching found record into result Each search run writes the folder that is performed on build structure of information that is used when aditional informations concerning data from the same run are required One run is quite expensive while loading each file is needed there is no other way how to read required IDs So it is sensitive how wide and deep is the subtree of the given folder Maybe some timeouts will be required All functions are private beacause are all called from friend class DemProvider 4 4 Usage Usage is quite simple First we have to con
21. bjects in Imaging library So when some new item in Imaging library appears and its author wants it to be able to use it remotely so new serializer has to written and registered Registering is done in according type of GeneralSerializer that serves as recognizer of particular serialiers Details of creating new Serializer will follow later on Now we will discuss each type of serializer in more details 6 2 2 1 FilterSerializer Each filterSerializer FS should be derived from Abst ractFilterSerializer class which is the base class for every FS and defines interface of its behaviour CIS is performed by SerializeClassInfo amp DeSerializeClassInfo pair of member functions ACS by SerializeProperties amp DeSerializeProperties pair 6 2 2 2 DataSetSerializer DataSetSerializer has more work to do than FilterSerializer It performs CIS within GeneralDataSetSerializer and appropriate switch cases desribed later and ACS in SerializeProperties amp DeSerializeProperties pair of functions that are in interface defined by AbstractDataSetSerializer that each new DataSet should inherit New is Actual Data Serialization ADS This is performed through another part of AbstractDataSetSerializer iterface parts Serialize OnDataPieceReadRequest OnDataSetEndRead functions For more detail of these function purpouse see appropriate headers 30 Chapter 6 Remote computing CellBE library Main idea of dataSetSerialization is to divide the w
22. brach Is opposite to ClientJob It s purpouse is to handle operation that the client job performs definition container unpacking and building pipeline and creating some supporting structures that are used in 29 Chapter 6 Remote computing CellBE library re recieving definition container content Will be dicused later on 6 2 2 Serializers Because this system or library is closely related to Imaging library that we wanted to let independent to any other library we have to solve how to perform serialization on the objects from the Imaging library that are mostly templated Serializers object was developed Serializer is object that can perform serialization of its content We have 2 types of serializers These are FilterSerializers perform Serialization of Filter Properties classes Used in sending definitioin container And DataSetSerializers These performs dataSet serialization Each Serializer performs serialization of 2 main types First is class info serialization CIS In this stage is template parameters along with class type serialized These information should be enough for other side for creating appropriate templated class instance The second serialization tier is for actual content serialization ACS of entities properties for filterProperties dataSet atributes for dataSet The whole library is closed system that should not be chaged Only these Serializers are subjects to edit Serializers reflects hieararchy of o
23. brary Imaging 2 3 Main classes In this section we are going to introduce most important classes We will go through each group and list them with brief characteristics 2 3 1 Dataset hierarchy AbstractDataSet New dataset types Figure 2 2 Filter hierarchy Abstractlmage AbstractImageDim lt 4 gt AbstractImageDim lt 2 gt AbstractImageDim lt 3 gt AbstractlmageDim lt ElementType 2 gt AbstractlmageDim lt ElementType 3 gt AbstractlmageDim ElementType 4 gt AbstractDataSet Is predecessor of all datastructures containing data Only concept implemented by this class is read write locking system This locking system ensure synchronization only on dataset structure its extents allocated buffers etc not on data contained inside Read write lock let multiple readers to obtain access and writers have to wait If there is at least one writer waiting no other reader is allowed to obtain lock And when all readers finish their work first writer get exclusive access Synchronization on data should be implemented in successors because it differ in each type of dataset Changes in internal structure can be detected by comparing timestamps When some change in internal structure of dataset has happened timestamp is increased So if you store value from previous access you can easily detect changes AbstractImage Abstract ancestor of image classes Has access methods to information about image dimens
24. derived That was definitely pros but there are some cons For instance there are networking absolutely hidden to library user So we had to use in manner the DCMKT authors wanted But we want some scather gather 21 Chapter 4 DICOM Client library like behaviour to be able to make the incoming data be written to directly to one big memory array that is essential for image processing algorithms operating upon the data It was impossible to do that due to the networking hiding and impossibility knowing DICOM file sizes befor actual data are recieved that would be needed to scater gather ops So we agreed to following scenario Whole file is recieved Than type of the elemens as well as image sizes are read from dataSet see next to set up the places in memory where the data should go Then actual data is copied to the place from dataSet And then are deleted from it So whole dataSet with all atributes about the image but actual data remains empty bottle DataSet is map like container for atrubutes key value pairs that the DICOM file is composed from When a file is being retrieved from server or from filesystem the dataSet is build automaticaly by the DCMTK library The building is atomical so no posibillity of knowing some attributes befere others discussed above 4 2 Compilation 4 2 1 Dependencies Common library 4 3 Architecture Public declarations are in namespace M4D Dicom while private not visible from outer are
25. e at least public typedef to PredecessorType Properties with name Properties Prepare default constructor and constructor with pointer to Properties Default constructor creates default set of properties In both constructors pointer to instance of Properties is passed to predecessor constructor in list of initializers Using constructor with parameter will completely initialize filter with passed properties no other method is needed to call 15 Chapter 2 Library Imaging Figure 2 8 Filter decisive flowchart START Has only one input and one output Use AbstractPipeFilter Process only images YES Use AbstractimageFilter WholeAtOncelExtents Input and output have same proportions YES NO NO Work on whole dataset Use AbstractimagefFilter WholeAtOnce YES NO Work on Yos Abstractlmage elements ElementfFilter YES Use AbstractimagesSlice FilterlExtents Do 2D computation Use AbstractImage2DFilter YES YES Work in layers Input and output with limited have same proportions neighbourhood NO Use Use AbstractimageFilter AbstractlmageSliceFilter If you follow mentioned rules you can use few preprocessor macros which can simplify implementation of your class 16 Chapter 2 Library Imaging Pointer to Properties structure is stored as protected member properties but its type is AbstractFil
26. e linked There are two helper classes to handle generics in Imaging library since Qt does not allow using templates 1 VoxelArrayCopier simply arranges the voxels in the source array so that it could be displayed according to the slice orientation with the help of using strides see Imaging library 2 TexturePreparer prepares the texture to be mapped and displayed It also fills up images that are not powers of 2 so that older graphics cards can map and display the texture as well The viewer can display one slice or more slices at a time it can display text information and handle mouse event according to mouse event handling settings which can be set by a special method called setButtonHandler 7 2 2 3 M4dGUIVtkViewerWidget This class basically uses VTK to visualize the dataset in 3D Datasets are converted to volume object and mapped into vtk scene This is done by the libVTKIntegration library and VTK itself For further information see the VTK manual or the libVTKIntegration section 7 2 3 M4D Selection This namespace contains two classes one for selecting points and another one for selecting shapes Shapes are nothing more than a collection of points 47 Chapter 7 Graphical User Interface libm4dWidgets 7 2 3 1 m4dPoint This is a template class for points It can set get point values and dimensions and it can measure point distances and also midpoints between two points 7 2 3 2 m4dShape This is a
27. e target of remote computing because there is some mashines available for testing on faculty But This library is not bound to specific architecture It was one of primary request to be platform indemendet It has to eliminate such scenarios that is usual in hospitals you have the CT mashine with software that can work and communicate ONLY with our supercalculating server that is budled with All for such small price of few milions 6 1 Compilation 6 1 1 Dependencies Imaging lib 6 2 Architecture All declarations are in namespace M4D CellBE System is classic Client Server architecture The client parts is in the library while the server part in another project Purpouse of the library is to be linked with main program that has to have ability of remote computing The both parts have some parts in common that reflects class hierarchy Figure 6 1 6 2 1 Job Job is entity that represents remote computation Job has 2 main parts Definig Contatiner and input amp output dataSets Definig Contatiner contains information about filters that the remote pipeline represented by this job will consist of and their settings Each filter has Properties inner class Instance of that class give us all neccessary information of that filter because it is teplated as well it s inner class of templated class and has all properties of filter that represents So we don t need to instatiate any filter when defining remote pipeline Filter Propert
28. eam amp s int32 minimums dim int32 maximums dim float32 elExtents dim for unsigned 0 i lt dim i gt gt minimums i gt gt maximums i gt gt elExtents i m NUMERIC TYPE TEMPLATE SWITCH MACRO GetNumericTypeID ElementType gt return M4D Imaging ImageFactory CreateEmptyImageFromExtents TTYPE gt dim minimums maximums elExtents unreachable but for syntactic corectness return M4D Imaging AbstractDataSet ADataSetPtr 38 Chapter 6 Remote computing CellBE library Here is a nother snippet from ImageSerializer 3D case Example of Serialize amp OnDataPieceReadRequest functions That performs ACS Serialize goes through image slice by slice and send each as dataPiece through iPublicJob PutDataPiece OnDataPieceReadReguestshould decide where to put data piece that is going to be recieved and corresponds to dataPieceHeader given to this method Memory places where the data piece should be recieved to is specified by DataBuff strucutres that is put into bufs container that comes as well within param Note state variable m currSlice that says which slice is going to be recieved Such variables are subject of Reset template lt typename ElementType gt void ImageSerializer lt typename 1 3 gt Serialize M4D CellBE iPublicJob xjob
29. ecieved directly into the right place in big array for 3d image and calculation can be started if another slices not needed This is ideal case Current implementation do not allow it due to dataSet locking and lack of universal dataSet handling So dataSet is currently transferred whole and whole recieved Because this serialization is statefull the inner state has to be in serializer instance Reset mandatory method should reset the state for seralizer reusage 6 2 3 CellClient class CellClient represent the gate to remote computing Each job on client side is created throuh this class by CreateJob function This class also contains container of available servers that can be used for remote computing It can also load it from config file 6 2 4 Remote Filter Remote filter is filter that represents remote pipeline It shall create definition container that is needed to create Job that represents remote computation It shall contain filterProperties that correnspons to the filter in remote pipeline which compose Because everything is templated there is not yet no other way of creating remote pipeline than define it through this filter properties that is members of remote filter they are some kind hardcoded That means if you want to create another remote filter with different pipeline within you have to write new sucessor of RemoteFilter So every remote filter MUST inherit from RemoteFilter 31 Chapter 6 Remote computing CellBE lib
30. edV4D project uses the Qt library to create and manipulate GUI elements Qt is a very powerful object oriented cross platform GUI library Since it has an X Window System implementation as well as a Windows implementation it allows the software to run under Windows and Unices as well It works together very well with many other useful toolkits one of which is the VTK Visualization Toolkit toolkit which is also used as an optional component of the software Qt uses QObject as a base of all its objects and a special macro Q OBJECT to inform Qt s preprocessor that the object contains Qt signals and slots Signals are special functions without body that can be connected with slots which causes the connected slot s to be called when the signal is emitted Further Qt uses QWidget as a base of all its GUI component objects There are container widgets which can be used to contain more widgets This allows the programmer to create more complicated GUI interfaces 7 1 2 VTK is a very complicated and large toolkit for visualizing a large number of data types Its robustness and size is the reason that the project uses it only as an optional component for visualizing volume data in a 3D scene A special Qt widget called QVTK Widget is used to incorporate VTK into the Qt GUI interface 7 2 Architecture Public and private declarations are in namespaces M4D GUI M4D Viewer and M4D Selection 44 Chapter 7 Graphical User In
31. erface libm4dWidgets For sure you will need to add some special funcionality to the GUI of the application some widgets controlling the pipeline filters with resources such icons reimplemented functionality at processing the resuls of search connections where can be connected viewers in the pipeline The following code segment shows widget and pipeline connection adding taken from the mainWindow constructor the derived class createMyPipeline tell mainWindow about possible connections can be during the creation of pipeline connections addSource conn Bone segmentation Stage 1 addSource conn Bone segmentation Result add your own settings widgets addDockWindow Bone Segmentation myPipelineWidget To change the functionality at processing the resuls of search just reimplement the m4dGUIMainWindow s process method in the derived class mainWindow The default behavior is it creates image from the Dicom Object Set and sets it as input of the currently selected viewer It looks like AbstractImage AImagePtr inputImage ImageFactory CreatelmageFromDICOM dicomobjSet try AbstractImageConnection xconn new AbstractImageConnection conn gt Put Image inputImage mainViewerDesktop gt getSelectedViewerWidget gt InputPort 0 UnPlug conn gt ConnectConsumer mainViewerDesktop gt getSelectedViewerWidget gt InputPort 0 catch
32. h option to change multithreading framework Chapter 2 Library Imaging Main goal of this library is effective implementation of pipeline computation on input datasets Whole computation should be as parallel as possible in order to utilize resources available in modern processors etc Design of interfaces and class hierarchies is aimed to extensibility and code reusability 2 1 Compilation 2 1 1 Dependencies This library should be linked together with libCommon So all its dependencies come with it Another dependency which in future will be optional compiler parameter is Dicom Toolkit DCMTK 2 2 Architecture All declarations are in namespace M4D Imaging Data structures in library are designed to make possible construction of pipeline computation system as shown in scheme Figure 2 1 We now present all types of these data structures and their tasks Datasets Centre of whole design hierarchy of classes prepared for storing data which provide methods for access synchronization over data Filters Are objects planned as processors working on datasets Only implmented branch of filters are pipeline filters They get access to input datasets through input ports do the computation and write results to output datasets obtained from output ports Ports Communication channels their job is exactly as the name sais Filters can get access to input output datasets and receive messages through ports Connections C
33. hole dataSet into smaller parts that can be transported throug network separately dataPieces DP and alternatively the calculation can be started on independently from other DP that have not yet arrived Each DP has its header that says how long it is So on reciving side when such header is recieved its passed to DataSetSerializer s OnDataPieceReadReguest method that will decide where the data that the DP reffers to are going to be recieved This can tell through DataBuffs vector by putting DataBuf sctruct into it DataBuf is struct of void pointer pointing somewhere into memory and size So the DataBuffs vector defines place where data of DP should be transmitted in geather manner Another mandatory function is OnDataSetEndRead This is called when whole dataSet is recieved No more DP are going to be recieved This is recognized by recieving of special DBHeader Function can perform some clean up or something Serialize is another mandatory function It has to perform actual whole ADS It gets pointer to iPublicJob interface and through its function PutDataPiece should perform serialization PutDataPiece is the same as in deserialization but it writes data into network in scatter manner In this function the programer should define meaning of DP and reflect the meaning in deserialization functions Perfect example is serialization of 3d image DP is one slice So whole dataSet is sent with slice granularity On the other side DP slice is r
34. ies instances are satisfied According these information is actual pipeline created on ther server side Input amp output dataSets are actual dataContainers that are dataRead from and send to server input and recieved and written to output When you look at the class hiearchy you can see there are commons parts for job on client and server side But both types of job has different behaviour when on client side and server side So 2 branch in hierachy reflects that Each hierarchy member will be described now in more details 28 Chapter 6 Remote computing CellBE library Figure 6 1 Hierarchy of classes composing job BasicSocket BasicJob IN ClientSocket A ClientJob 6 2 1 1 BasicSocket Base class containing network functionality Used BOOST Asio for asynchronous networking and scatter gather It contains pointer to socket that all the communication is performed through 6 2 1 2 ClientSocket Client has to be able to establish connection to server This class can do it 6 2 1 3 ClientJob Now we fucus on particular branches of the hierarchy Lets start with client one This class advances functionality for special for client job behaviour That is ID generation sending definition container and his content It has also supporting members special for client async operations as well as members that do them 6 2 1 4 ServerJob The last class in Job hierarchy remains This class form server side
35. in MAD DicomlInternal Whole design of class hierarchies is Figure 2 1 4 3 1 DcmProvider DcmProvider is the class all DICOM functionality is provide from It has methodes for comunication with DICOM server and files or fileSets manipulation C FIND C MOVE as well as searching local fileSystem folders It also contains basic class that represents one DICOM file Di comobj and some structures representing found results such as TableRow for view found information in table 4 3 2 DicomObj Represents one DICOM file When retrieving whole serie then the DicomObjs are stored in vector DicomObjSet It has methodes for Saving and Loading to filesystem As well as method for copying data to defined place when overspilling the bottle It also contains methodes to retrieve basic information from dataSet like width height element s data type 22 Chapter 4 DICOM Client library 4 3 3 DicomAssociation This is base class for DICOM assotiation Assotiation is something like connection It is defined by IP address port and Application Entity AE AE is like name Both sides client and server has its own This class contains pointers to DCMTK library objects that contains actual assotiation and his properties As well as some action members that establish reguest aborts and terminate the assotiation Next item contained in this class is address container that holds neccessary properties for different assotiation A
36. ing the viewer with another one causes updates of adaptive toolBars according to the new viewer s properties enabling disabling tools pushing triggering To switch to 3D view 1 Select a image series 2 Choose one of the following options 65 Chapter 8 User Manual Tools Replace Viewer Ctrl L Click 8 To switch back to slice viewer select the series and click again 66
37. input value and reference to output value This method is best to be inline and effective its called on every element of input dataset Abstract Image2DFilter This template is planned to be used as predecessor for filters procesing on two dimensional data By that are meant 2D images and 3D images processed in slices Output dataset proportions are set to the same values as input dataset so only method to be overrided is Process2D Abstract ImageFilterWholeAtOnce This template is prepared for creation of image filters which need to access whole input dataset or for experimental implementation without progressive computing Before call of ProcessImage filter waits on read bounding box with same proportion as image and after that write bounding box containing output image is marked as dirty After finished computation is this bounding box marked as modified or cancelled if computation did not finished successfuly ProcessImage returned false In classes inheriting from this one you must override methods ProcessImage and PrepareOutputDatasets Abstract ImageFilterWholeAtOnceIExtents Same usage as template Abstract ImageFilterWholeAtOnce but only when input and output image are the same dimension and proportions So only method you must override is ProcessImage ImageConvertor Because all parts of pipeline are strictly typed we can only process images of certain type But in reality user can open any kind of image A
38. ion type of elements and proportions These informations can be used for casting to right type of image or for generic programming Abstract ImageDim lt Dimension gt Templated class with specializations for each dimension now has no special purpose but in future some methods from Image classes will be moved here Image lt ElementType Dimension gt Templated class made for storing raster image data of certain type It has specialization for each used dimension It contains buffer with data which can be shared among different images for example 2D image can share one slice from 3D image But now this sharing concept isn t finished And will be available in future versions Sharing is possible because locking is done on buffer and this class has only wrapper methods for locking Chapter 2 Library Imaging 2 3 2 Filter hierarchy Figure 2 3 Filter hierarchy AbstractPipeFilter Ancestor of pipeline filters Public interface is extended with few methods modifiing behaviour ie setting invocation style and access methods to input ports and output ports These ports are comunication channels can send and receive messages get access to datasets etc In nonpublic interface there are declared pure virtual and virtual methods with special purpose they are called in predefined situations or in right order during computation If somebody wants to create new pipeline filter he must at least inherit its implementation from thi
39. ithout saving any changes 8 2 3 Using tools 8 2 3 1 Main tools Table 8 1 Main tools Search Open Search for patient studies available for viewing Open an existing document from disk or network file system 52 8 2 3 2 Common tools Table 8 2 Common tools Y Screen Layout Window Level Toggle Overlay 8 2 3 3 Measurement tools Table 8 3 Measurement tools Probe Tool Chapter 8 User Manual Redisplay series and images in various layouts Adjust the brightness and or contrast of the image Reposition the images in the window Increase or decrease the image s field of view Scroll through images within a series Hide or display the study information Give a pixel value for a given point 53 Chapter 8 User Manual a New Point Create a new point 7 New Shape Start a new shape v 52 Clear Point Clear last created point ry S Clear Shape Clear last created shape 26 Clear Points Shapes Clear all selections points shapes 8 2 3 4 Image Manipulation tools Table 8 4 Image Manipulation tools Flip Horizontal Flip the selected image from left to right about the vertical axis GO Flip Vertical Flip the selected image from top to bottom about the horizontal axis v gt Slice Orientation Switch the viewing axis orientation x y y z z x 54 Chapter 8 User Manual 8 2 3 5 Volume tools Table 8 5 Volume tools po
40. l methods with special interface to make computation easier AfterComputation This method should unlock parts of image which remained locked after unsuccesful computation Another task which is often done here is saving of timestamps from input output datasets properties etc If you override this method call predeccessor implementation first in your implementation 2 4 2 Locking image parts Image locking was designed to be fast and powerful enought to fulfill our needs Locks our optional so if some object ie viewer doesn t need synchronization he can ignore locking Locking is done by marking certain parts of image as DIRTY these parts can be only axis aligned bounding hyperboxes If filter plans to do computation on some part of image he marks this part as DIRTY and when he finishes succesfuly he mark it as MODIFIED if he finishes unsuccessfuly he marks it as CANC part ELL ED For this purposes is prepared class WriterBBoxInterface which stands for image If somebody wants to read some part of image and wants to be sure that nobody s making modification to this part he uses ReaderBBoxInterface Its class similar to WriterBBoxInterface but its state 11 Chapter 2 Library Imaging depends on state of incident writer bounding boxes As shown in Figure 2 7 reader bounding box will remain DIRTY until all incident writer bboxes are marked modified or at least one CANCELLED Figure 2 7 S
41. la Rotate Volume Rotates the volume about the three axes 8 3 Retrieving and Viewing Images A study is a set of related images which can be displayed and manipulated in the application You retrieve images from both local and remote exam studies 8 3 1 Using the Study Manager The Study Manager window allows you to search for a study to view and manipulate with it To access the Study Manager window File Search Ctrl S Click amp The Study Manager window appears 29 Chapter 8 User Manual Fiter Patient ID Last First Name Modality 3 From To 23 8 2008 2008 us 3 cr RT v XA Accession Study Desc Referring MD E px MR pr se Options d v 1 Study List 5 poro em View Recent Exams lg Remote Exams 7 DICOMDIR PatientID Name Description Dete Time Study ID Sex Birthdate EA ta The Recent Exams tab lists the studies that were recently viewed it has two modes Recent Remote Exams recently retrieved and viewed from available DICOM server and Recent DICOMDIR recently viewed studies that are stored in DICOMDIR format see Section 8 3 1 1 The Remote Exams tab lists the studies stored on available DICOM server If you want to view one of these exams you can select it and it will be retrieved for you see Section 8 3 1 2 The DICOMDIR tab lists the studies that are stored in
42. led by access methods in class And user should use these methods only in situations requiring synchronization This less comfortable though but more effective Image datasets should be created by static class ImageFactory 2 2 2 Filters So now we know how to store data Now we describe filters data processors In filter class hierarchy we count with future development of different kinds of filters but at the moment only implemented group Chapter 2 Library Imaging are pipeline filters So further in text when we say filter we mean pipeline filter As pipeline filter is meant data processor which takes its inputs and after a set of computations writes results to output s with constrain that input and output must differ Specialy in our case input output data are stored in datasets and filter cannot process data in place output datasets must differ from input datasets As noted earlier filters can have more than one input and more than one output Communication with surroundings is provided through ports they give access to input output datasets have interface for synchronization message communication etc All properties of filter are stored in one structure designed as inner structure with name Properties 2 2 3 Ports Ports provide communication interface for filters or other objects like viewers living in pipeline Ports are either input or output and cannot be exchanged Input ports give readonly access to da
43. line container has methods for this see example implementation Setting message hooks Special part are message listeners include ExamplePipelineHandler h ExamplePipelineHandler ExamplePipelineHandler _firstFilter new FIRST_FILTER_TYPE M4D Imaging AbstractPipeFilter secondFilter new FIRST FILTER TYPE IMPORTANT if you want next filter to b xecuted automatically secondFilter gt SetUpdateInvocationStyle AbstractPipeFilter UIS ON CHANGE BEGIN _pipeline AddFilter firstFilter _pipeline AddFilter secondFilter _pipeline MakeConnection firstFilter 0 secondFilter 0 true inConnection dynamic cast lt M4D Imaging AbstractImageConnectionInterface x gt amp pipeline MakeInputConnection _firstFilter 0 false outConnection dynamic cast lt M4D Imaging AbstractImageConnectionInterface x gt amp _pipeline MakeOutputConnection secondFilter 0 true Adding message listener outConnection SetMessageHook MessageReceiverInterface Ptr new Notifier void ExamplePipelineHandler FilterImage ImageType Ptr image inConnection PutImage image firstFilter gt Execute 14 Chapter 2 Library Imaging 2 5 2 Creating new filter One of the main advantage of this library is its extensibility The biggest potential is easy way to add new filter
44. methodes There are seme typedef that make the template madness easier template lt typename ImageType gt class BoneSegmentationRemote public RemoteFilter lt ImageType ImageType gt public typedef typename RemoteFilter lt ImageType ImageType gt PredecessorType typedef PredecessorType Properties Properties BoneSegmentationRemote To customize puting options available to outer world to be able to specify it thresholding filter issues typedef ThresholdingFilter lt ImageType gt Thresholding typedef typename Thresholding Properties ThresholdingOptsType 41 Chapter 6 Remote computing CellBE library ThresholdingoptsType GetThreshholdingOptions void return amp m_thresholdingOptions median filter issues typedef MedianFilter2D lt ImageType gt Median typedef typename Median Properties MedianOptsType MedianOptsType xGetMedianOptions void return amp m_medianOptions protected void PrepareOutputDatasets private x Here should be added members of filter options type that will define the remote pipeline this filter represents Each member x for single filter in remote pipeline As a next step is defining retrieving public members that will provide ability to change x the filter options from outer world xx ThresholdingoptsType m thresholdingoptions Median
45. nd here comes work for ImageConvertor which can convert generic images to desired type template parameter So usualy we put this filter as the first in pipeline 2 3 3 Port and connection hierarchy We will not list port and connection classes here because they are similar to each other and only difference is in their specialization to certain types of dataset There can be less classes but this system provide us better type control in compile time Chapter 2 Library Imaging Figure 2 4 Port hierarchy InputPort InputPortAbstractlmage InputPortlmageFilter lt Image lt ElementType dimension gt gt OutputPort OutputPortAbstractlmage OutputPortlmageFilter lt Image lt ElementType dimension gt gt Figure 2 5 Connectid Connectionlnterface AbstractlmageConnectionlnterface AbstractlmageConnection ImageConnection Image ElementType dimension gt gt 2 4 Main design concepts 2 4 1 Filter execution Execution of filter is complex process It can be modified by overriding prepared virtual methods Each of them has exact purpose and changing it can cause problems so be sure what you are doing These methods are marked gray in Figure 2 6 We now list them and desribe their function Chapter 2 Library Imaging Figure 2 6 Execution scheme Execute CheckProperties Are output datasets ready PrepareOutputDatasets BeforeComputation Do dataset locking Se
46. nd message FILTER_START ExecutionThreadMethod Returned value send U EXECUTION CANCELLED send message AfterComputation false FILTER_UPDATED AfterComputation true CleanAfterStoppedRun Unlock remaining locks save timestamps etc CleanAfterSuccessfulRun Execution finished 10 Chapter 2 Library Imaging CheckProperties Its actualy method from struct Properties its purpose is to check if all properties are set to valid values etc If you override this method call predeccessor implementation first in your implmentation BeforeComputation This method do all preparations before actual computation First thing it has to decide if the computation will be only update of modification or recalculation of whole data new dataset properties changed ect Next task is to call PrepareOutputDatasets if needed output input was resized change in properties etc When everything is prepared do marking of output parts which will be modified If you override this method call predeccessor implementation first in your implementation PrepareOutputDatasets Ithas to prepare resize output datasets according to inputs and filter properties Its called only when needed If you override this method call predeccessor implementation first in your implementation ExecutionThreadMethod Actual computation method in successor classes often overriden to call some pure virtua
47. ng specifications Pentium 4 CPU 1 GB RAM 128 MB of video RAM Display resolution 1280 x 1024 8 1 1 3 Supported operating systems Windows 2000 Windows XP or Windows Vista 49 Chapter 8 User Manual e nix 8 1 2 Installing the application It s no need to install the application Just copy the application and the configuration file to PC hard drive and then simply start it 8 2 Using the application 8 2 1 Application window The main application window is a workspace where you can view and work on retrieved images ENTM add n bed This window can contain more than one image at a time each in a separate pane arranged in a grid The menu bar appears at the top of the window and the status bar will appear at the bottom if enabled By default the tool bar appears at the top of the window directly beneath the menu bar but you can move it to the bottom left or right of the window in order to accommodate your preferences by dragging it to a new location 50 Chapter 8 User Manual 8 2 2 Using the toolbar Tools in the toolbar are displayed based on the toolbar settings and activated according to the selected viewer type To view the description of a tool hold the cursor over its icon Full descriptions of the tools can be found in Section 8 2 3 8 2 2 1 Moving the toolbar The toolbar does not have to remain at the top of the window It its component
48. of switch case that instatiates DataSetSerializer based on inner properties like TypeID Element type dimension Properties of image And another switch case in GeneralDataSetSerializer DeSerializeDataSetProperties method that on the other side can instantate DataSetSeralizer class CIS Here is snippet from ImageSerializer Example of SerializeProperties amp DeSerializeProperties functions Here used to write information about dimensionality element type sizes etc relevant for images 27 Chapter 6 Remote computing CellBE library template lt typename ElementType uint8 dim gt void ImageSerializerBase lt ElementType dim gt SerializeProperties M4D CellBE NetStream amp s AbstractImage im AbstractImage m_dataSet cast to sucessor serialize common properties s lt lt 110616 im gt GetDimension lt lt uintl6 im GetElementTypeID for unsigned i 0 i lt im gt GetDimension i const DimensionExtents amp dimExtents im gt GetDimensionExtents i s lt lt int32 dimExtents minimum s lt lt int32 dimExtents maximum s lt lt float32 dimExtents elementExtent ILILILILIL ELLI AALALA ITT VR TTT TTT TTT TATA Addi template lt typename ElementType uint8 dim gt M4D Imaging AbstractDataSet ADataSetPtr ImageSerializerBase lt ElementType dim gt DeSerializeProperties M4D CellBE NetStr
49. onnection objects are meant as bridge between objects with ports filter filter filter viewer They own datasets and grant access to them through ports Input ports have only read access and output ports have write access Connection object oversee synchronization of readers and writer Model is one to many so there can be multiple readers but only one writer Messages and message receivers Communications between objects in pipeline is assured by sending messages successors of PipelineMessage Objects which can receive messages have to implement Chapter 2 Library Imaging interface MessageReceiver ports filters etc there are also other interfaces but this one is most important If you make object with this interface you can add message hook to connection object by calling AddMessageHook Till this moment your object will obtain every message going through this particular connection object handy for imlementation of notifiers progress watchers etc Figure 2 1 Pipeline scheme Filter LD Output port O Connection object 211 input port Dataset under control 2 2 1 Datasets Actual data are stored in proper descendants of class Abst ractDataSet Its hierarchy is shown in Figure 2 2 Purpose of these classes is to provide access methods for reading and writing informations of certain type and optional synchronization By optional synchronization is meant set of synchronization methods which are not cal
50. p output if input lt bottom input gt top output outValue else output input ElementType bottom ElementType top ElementType outValue template lt typename ImageType gt class ThresholdingFilter public AbstractImageElementFilter lt ImageType ImageType ThresholdingFunctor lt typename ImageTraits lt ImageType gt ElementType gt gt 17 Chapter 2 Library Imaging public typedef ThresholdingFunctor lt typename ImageTraits lt ImageType gt ElementType gt Functor typedef Imaging AbstractImageElementFilter lt ImageType ImageType Functor gt PredecessorType typedef typename Imag raits lt ImageType gt ElementTyp InputElementType struct Properties public PredecessorType Properties Properties bottom 0 top 0 outValue 0 InputElement Type bottom InputElement Type top InputElementType outValue void CheckProperties functor bottom bottom _functor gt top top functor outValue outValue Functor x functor 3 hresholdingFilter Properties prop 3 1 hresholdingFilter GE SET PROPERTY METHOD MACRO InputElementType Bottom bottom GE SET PROPERTY METHOD MACRO InputElementType Top top GET SET PROPERTY METHOD MACRO InputElementType OutValue outValue protected
51. rary To have hierarchy complete there is RemoteFilterBase This class is ancesstor of RemoteFilter and it s purpouse is to make Ce11Client to the sucessors to make job creating possible 6 2 5 Server Server is whole implemented in asynchronous manner Base consists Server Main part is JobManager that stores all jobs that are currently on the server It is associative container with JobID key Only thing that server can do accept connections and read primary header 32 Chapter 6 Remote computing CellBE library Figure 6 2 Job life cycle ClientJob Connect Connection constructor Accepted CREATE request along with definition container Build Remote PipeLine ClientJob SendCreate OK IDLE FILTERS regest along with FilterSettings Read Filter Properties ClientJob SendFilterProps OK FILTER_PROPS_OK M ClientJob DATASET request along with DataSet properties SendDSProps Create DataSet Serializer read DS properties IN Step3 SS OK DATASET_PROPS_OK DataPiece 1 ClentJob Read DS DataPiece 277 SendDataSet content using ep DataPiece 3m Serializer from last step er 7 read resulting OK DATASETZOK 2 DataSet execution starts DataPiece Send resulting dataSet DataPiece 3 toClient IN
52. s can be moved to the bottom left or right of the window in order to accommodate your preferences by dragging it to a new location 8 2 2 2 Customizing the toolbar If you do not wish to view all of the tools in the toolbar you can customize which tools will be displayed in the toolbar by right clicking on the toolbar region and selecting wanted groups of tools You can enlarge the toolbar icons by clicking Medium or Large on the ToolBars menu To customize the toolbar viewer tools e Click ToolBars Customize The Viewer Tool Property window appears row tool 51 Description 4 Zoorn Right Mouse stack Right Mouse Togge Overlay W Probe Tool Left Mouse VA New Point Left Mouse New Shape Left Mouse Clear Point 1 Clear Shape Clear All Points Shapes JO Horizontal vertical 4 Sice Orientation 100 4 4 4 4 lt 0 lt lt lt Chapter 8 User Manual Shortcut Cti T Chri H Chi G Add remove tools to the customized toolbar by clicking the visibility icon v e Click on tools shortcut to edit them doubleclick edit click rewrite if the new value is not suitable for use as a shortcut it will be reseted to its previous value You can now activate the tool using the assigned shortcut and modifier key combination if you save your settings e Click OK to save your changes or click Cancel to exit w
53. s class and override these methods ExecutionThreadMethod PrepareOutputDatasets BeforeComputation AfterComputation Abstract ImageFilter Filter base for one way image filters it implements basic task like reading timestamps deciding what type of computation use etc If somebody wants to create new pipeline filter he must at least inherit its implementation from this class and override these methods ExecutionThreadMethod PrepareOutputDatasets BeforeComputation AfterComputation Abstract ImageSliceFilter Predecessor of filters computing in layers with limited neighbourhood convolution range filters etc Chapter 2 Library Imaging Abstract Image2DFilter This template is planned to be used as predecessor for filters procesing on two dimensional data By that are meant 2D images and 3D images processed in slices Output dataset proportions are set to the same values as input dataset so only method to be overrided is Process2D Abstract ImageElementFilter This template is prepared to ease design of image filters which work on zero neighbourhood of element use only value of the element These filters work with output dataset with same extents as input Because calling virtual method consumes time this template uses different way of implementation of actual computation third parameter of template is functor which has implemented operator which takes two parameters constant reference to
54. s with all features promised by pipeline design synchronization parallel execution etc This is achieved through set of filter abstract classes each designed for special purpose Author of new filter have to consider few aspects dimensionality type of input output data way the filter computes etc and choose right ancestor class for his filter To make decision easier you can use prepared flowchart Figure 2 8 and find most suitable ancestor class Now if you have chosen right ancestor class you can start with actual implementation of your filter You should keep few rules and concepts which can not only help you with writing but even some other parts of library will just work without handling extra issues This is achieved by generic design of whole library templates are used almost everywhere We introduce these rules and concepts and show practical examples from library sources First of all try design your filters as generic as possible So try maximally use dataset traits now only available ImageTraits template specialializations etc All ancestor classes are templated with exception of AbstractPipeFilter so it makes that easier Try to keep these rules when designing filter interface Filter class has public typedef to predecessor class with name PredecessorType All properties of filter are in one public nested struct Properties deriving from PredecessorType Properties In case that set of properties is empty mak
55. segment lies on the current slice the segment is displayed but only that endpoint that is on the current slice is drawn out 3D segments are measured in 3D space New shapes can be started by selecting the new shape tool Tools New Shape Ctrl H or click e Selected points segments shapes can then be displayed in different viewing orientations as well 8 5 3 Probing images Voxel value selection can also be done In this mode we can click on the image and the clicked voxel s value will be printed out above the cursor 64 Chapter 8 User Manual To probe the area of an image 1 Choose one of the following options Tools Probe Tool Ctrl B Click amp 2 Click anywhere on the image and hold the mouse button down to view the value at that point 8 5 4 Clearing measurements Measurements can easily be cleared either point by point always clearing the last one shape by shape again always clearing the last one or clearing all at once To clear measurements point shape all 1 Select a image series 2 Choose one of the following options Tools Clear Point Ctrl N Tools Clear Shape Ctrl E Tools Clear All Ctrl A Click 8 3 8 6 Replaceing viewers slice viewer 3D viewer The base application supports two types of viewers slice viewer and 3D viewer You can easily switch between them on the fly you don t have to reopen the image or do something else just switch Replac
56. sition the cursor over the image to be adjusted and right click and drag the cursor up or down over the image 3 Release the mouse button to apply the new values to all images within the series These values are displayed on the lower right corner of each image 8 4 1 2 Adjusting contrast The window setting controls the contrast of an image To adjust the contrast of an image 1 Choose one of the following options Tools Window Level Ctrl W Click From here you can adjust the contrast of the selected image 2 Position the cursor over the image to be adjusted and right click and drag the cursor left or right over the image 61 Chapter 8 User Manual 3 Release the mouse button to apply the new values to all images within the series These values are displayed on the lower right corner of each image 8 4 2 Changing image slice orientation The following two procedures can be used to change image orientation one for slice orientation and one for 3D rotation To flip an image 180 degree about the horizontal axis 1 Select the image to flip 2 Choose one of the following options e Tools Flip Horizontal Ctrl R Click To flip an image 180 degree about the vertical axis 1 Select the image to flip 2 Choose one of the following options Tools Flip Vertical Ctrl V Click To switch the viewing axis orientation x y y z 2 1 Select the series on which you want to change
57. ssotiation has different properties when different services are called So the container is a map indexed by string each called service The container is filled from config file There are some supporting methodes taking care of it The container is shared between all instances static 4 3 4 AbstractService This is base class for all services that is reguested to the side of DICOM server There is poiner to DCMTK Network object which need network subsystem on windows system initialized at the beginning of usage and unloaded when is no more needed So there is reference counting Each service is devided into 2 parts SCP Service Class Producer server and SCU Sevice Class User Client Both sides of an service has to agree while establishing assotiation what role to play Normally DICOM server plays server role SCP for C FIND C MOVE C STORE but for C MOVE subassotiations when image are transfered to client plays SCU role it reguests sending of data Bach scenario is described later in doc of successors Another class member is query dataSet that is used as a query to server similary like SQL query string Each query can be done on one of 4 levels Patient Study Series Images For example for Study level are all matched studies returned for Series Level all matched series On each level are relevant only sepecified set of matchable attributes so its quite hard to send robust query Some other filtering has sometimes to be done on re
58. struct DcmProvider instance Then we only create objects needed for holding data ResultSet and issue them along with some other parametrs to member functions of DcmProvider class instance created at the beginning Example follows include dicomConn DICOMServiceProvider h M4D Dicom DcmProvider dcmProvider DICOMProvider instance BE sees 24 Chapter 4 DICOM Client library somewhere when finding record based on some filter form values create resultSet container M4D Dicom DcmProvider ResultSet resultSet issue filter values and resultSet to provider method dcmProvider Find amp resultSet firstName lastName patientID fromDate toDate referringMD description now we have in resultSet vector all found items 25 Chapter 5 Data modifier Is tool that scans given folder recursively subfolders and modify the information tag values within found DICOM files This is because all data that we dispose has anonimized these values nad so when query is performed its results are nothing saying crap So thats why we developed this tool that generate new values based on dictionary from config file It scans files builds tree according IDs within the files to assign same generated values to files within the same study and changes the values generated from dictionary Values that are currently chaged are Patient sex Patient name based on sex Patient birth date
59. tasets and output give full access to datasets Ports are stored in InputPortList respective OutputPortList These container provide access to ports through their ID index in container In addition these containers can send message through all ports at once Usage of all ports isn t mandatory For example one can design filter which can have multiple different output formats but only one at the moment according to its settings For each format there can be special port and filter send data only to propriete one 2 2 4 Connections Connections answer the question where ports get access to datasets Connection objects work like bridge between ports There can be only one output port writer connected to one connection object but multiple input ports readers They all share access to dataset maintained by connection object Connection are designed even as inputs and outputs to whole pipeline You can tell constructor of connection object to not create dataset You can than pass your own dataset but of apropriete type to connection And if there is no writer its your input gateway to pipeline On the other side if there is no readers you have output gateway To connection objects can be assigned message listener Its object which can read messages going through connection This can be used for implementation of progress bars notifiers and for advanced control of a pipeline or even for synchronization of multiple pipelines Chapter 2 Li
60. template class for shapes It contains a list of its points a list of m4dPoints Besides adding and erasing points this class can also calculate the centroid and the area size of a shape provided that the whole shape lies on the plane of the slice For correct calculation and display the slice s orientation has to be set 48 Chapter 8 User Manual 8 1 Getting Started The application can be used for viewing and manipulating medical images Digital images and data from various sources including CT MR etc can be displayed analyzed and processed according to a concrete application type you have When viewing images users can perform adjustments of window width and level image stacking and measurement of regions of interest and various image alterations This guide contains information about the base application without additional processing functionality so it can be used with every type of final application 8 1 1 System requirements This section describes the hardware and software required to run the application 8 1 1 1 Required hardware The application must be run on a computer that meets the following hardware requirements Pentium II CPU 256 RAM 10 MB free hard drive space for application for image storage 32 MB of video RAM Minimum display resolution 1024 x 768 8 1 1 2 Recommended hardware To get the most out of the application it s recommended that your computer meet the followi
61. ter Properties So if you want access members of your properties structure you must either cast to right type every time or put preprocessor macro GET PROPERTIES DEFINITION MACRO to private section of your class declaration Now method GetProperties returning reference to Properties 18 available for usage make declaration of Get Set methods easier three macros are prepared GET PROPERTY METHOD MACRO TYPE NAME MEMBER NAME SET PROPERTY METHOD MACRO TYPE NAME MEMBER NAME and GET SET PROPERTY METHOD MACRO TYPE NAME MEMBER NAME These macros will be unwinded into inline declarations of TYPE Get NAME const void Set NAME TYPE value and both Parameter NAME is used in name of Get Set method and parameter MEMBER_NAME is name of Properties member accessed by these two methods Here we show implementation of thresholding filter Its simple class inheriting from AbstractImageElementFilter It uses ThresholdingFunctor and call it to each element of input image Only notable hack which is used in this example is how to pass thresholding parameters to functor we use method CheckProperties which is called before computation starts template lt typename ElementType gt class ThresholdingFunctor public void operator const ElementType amp input ElementType am
62. terface libm4dWidgets 7 2 1 M4D GUI In this namespace there are classes representing GUI components except viewers Most of the widgets can be used independently not just how they are used in the base application Extensibilty is also a big advantege of the design of GUI New widgets can be added easily especially viewers for this reason this framework is perfect for testing new types of viewers too 7 2 1 1 Creating a new application Author of the new application has almost nothing to do For a simple application is enougth to derive a class from m4dGUIMainWindow and you get every widget you should need ready to use The main program should be as following where mainWindow is the derived class include lt QApplication gt finclude mainWindow h finclude Common h finclude lt fstream gt int main int argc char xargv o td ofstream logFile Log txt SET LOUT logFile D COMMAND std ofstream debugFile Debug txt SET DOUT debugFile QApplication app argc argv app setQuitOnLastWindowClosed true mainWindow mainWindow if mainWindow wasBuildSuccessful mainWindow show return app exec 1 QMessageBox critical amp mainWindow QObject tr Exception mainWindow getBuildMessage QString Anin QObject tr The application will now terminate return 1 45 Chapter 7 Graphical User Int
63. the slice orientation 2 Choose one of the following options Tools Slice Orientation Ctrl G Click gt There are three possible states y z z x this tool is switching between them To switch the viewing axis orientation x y y z 2 1 Select the image to rotate its viewer must support 3D rotate 2 Choose one of the following options Tools Rotate Volume Ctrl U e Click 62 Chapter 8 User Manual 3 Position the cursor over the volume left click and drag the cursor over the volume The volume rotates in the direction of the mouse movement 4 Release the left mouse button to set the volume at the new rotation 8 4 3 Adjusting image viewing options 8 4 3 1 Panning Panning allows you to position images within the pane This feature is especially useful when the image is larger than the pane as it usually is after zooming To move an image within the pane 1 Select the image to move 2 Choose one of the following options Tools Pan Ctrl P Click 3 Position the cursor over the image you want to move and click and drag the cursor around the pane to move the image 4 Release the mouse button to drop the image in its new position 8 4 3 2 Zooming To zoom in and out of an image 1 Select the image to zoom 2 Choose one of the following options Tools Zoom Ctrl Z e Click as 3 Position the cursor over the image and right click and drag Dragging up incre
64. tion 8 3 1 2 to complete the search To retrieve and view a Remote Exam choose one of the following options Select a study from the list and double click it to retrieve and view it automatically Select a study and click View These studies will be available in the Recent Remote Exams mode 8 3 1 3 Searching for DICOMDIR Exams DICOMDIR studies are stored in DICOMDIR format on any folder accessible via file systems such as CDs removable file systems such as memory sticks your workstation s hard drive or a mapped network drive To search for a DICOMDIR Exam 1 Click the DICOMDIR tab 2 Click Path The directory tree and input field with history appears to the lower right of the window Name Date Modified ie 8 24 2008 6 01 20 0 8 18 2008 8 34 43 3 Browse to DICOMDIR file in the directory tree or write its path directly to the input field These two elements are updating each other browsing in the directory tree causes input field value change the currently selected path appears there which can be edited Writing the path to the input field causes directory tree expand to the selected path if it s valid Input field has higher priority 4 Follow steps 3 through 6 of Section 8 3 1 2 to complete the search To view a DICOMDIR Exam choose one of the following options 58 Chapter 8 User Manual Select a study from the list and double click it to view it automatically Select
65. to activate them and then enter the date parameters either by hand or by using the calendar window by clicking on the date field drop down list Sun Mon Tue Wed Thu Fri Sat 2 1 2 4 5 6 7 8 9 10 1213 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 ji 2 If you know that the study was performed today click Today Today s date appears in the date boxes If you know that the study was performed yesterday then click Yesterday and that date will appear in the date boxes Optionally filter the search by Modality type Select the check box to include all modality types in the search or clear it to filter by specific modality types which can be selected by clicking each modality type s corresponding check box 6 Click Search A study list appears in the bottom half of the Study Manager window To view studies without filtering clear all of the filters by clicking Clear Filter and click Search To view a Recent Exam choose one of the following options Select a study from the list and double click it to view it automatically Select a study from the list and click View 57 Chapter 8 User Manual 8 3 1 2 Searching for Remote Exams Recent Exams are studies that are stored on available DICOM server If you want to view one of these exams you can select it and it will be retrieved for you To search for a Remote Exam 1 Click the Remote Exams tab 2 Follow steps 3 through 6 of Sec
66. tools Geb ose ele LEE ER GR VER ERE EU Lu vi Preface Goal of this project is to create framework for easy development of user friendly medical aplications Suppose processing of 2D 3D even 4D for ex time series with input format DICOM storing on DICOM data server parallel implementation of difficult algorithms and platform independence It has to eliminate developing phases like DICOM files handling GUI parts programing User programmer can focus to write only a filter that represents the algorithm that he is interersted in vii Chapter 1 Library Common This library is composite of basic declarations wrappers etc It has no internal structure its just bunch of headers and source files without place so we put them together 1 1 Compilation This library must be compiled as the first of whole project because every other part use it 1 1 1 Dependencies Library Boost www boost org 1 2 Main parts 1 2 1 Log h We have prepared few macros for easy sending informations to log stream and few classes designed for formating output This hierarchy is still opened and prepared for extending 1 2 2 Debug h First thing which should be considered before starting big project is how it will be debugged We have set of preprocessor macros which allow us to use debug prints conditional compilation debuging prints for code blocks Some of these macros have version which takes n
67. turned records Common scenario of all services is to prepare query dataSet that selects wanted data files Then proceed the query to main TCMTK performing function and then retrieve resulting data through callbacks to final data structures Ancesting classes implementing the services contain supporting callback definitions that cooperated with DCMTK functions and definitions of structures that are then passed to appropriate callbacks 4 3 5 FindService Implements C FIND service to DICOM server Process decription in a nutshell client SCU establish assotiation to server SCP and sends query dataSet Server process query dataSet and sends back matched results For more details see DICOM doc ver _08 pdf chapter 9 1 2 and coresponding annexes 23 Chapter 4 DICOM Client library 4 3 6 MoveService Implements C MOVE service to DICOM server Its purpose is to move data files records from DICOM server There are two main functions that retrive data files One retrive one SINGLE image The image is specified by unique IDs on all levels patient study serie image The other retrieve all images from specified serie SET That means specification of IDs on all levels but image Process decription in a nutshell Client SCU establish assotiation to sever SCP send query dataSet server find matching image files then establish another subassotiation as SCU with calling client that plays SCP role and transmit data files over the sub
68. umeric parameter debugging level Actual debugging level is passed to compiler in command line as value assigned to preprocessor definition DEBUG LEVEL int This enables debugging and set debugging level If you in addition pass to compiler definition DEBUG_ADITIONAL_INFO some of mentioned debugging tools will have richer output Chapter 1 Library 1 2 3 Types h Because project is planned to be multi platform we must use architecture independent types we achieved that by typedefs int 16 uint32 float32 etc which must be rewritten for every incompatible platform Another issue we are dealing with in project is how to slightly move from static polymorphism compile time templates and dynamic polymorphism runtime object programming RTTI For this we have few tools to make that easier We have enumeration with values pertaining to basic numeric types These values are returned from templated function GetNumericTypeID lt TYPE gt On the other side over these values macros like NUMERIC TYPE TEMPLATE SWITCH MACRO decide which template instance call 1 2 4 TimeStamp h Very important class TimeSt amp which is used every time when change detection is needed Its implemented thread safe so it can be used even for synchronization purposes 1 2 5 Thread h This is only header with wrappers to boost thread classes mutexes Only purpose is to provide interace for multithreading wit
69. unsigned Dim 3 typedef uint16 ElementType typedef M4D Imaging Image ElementType Dim gt ImageType class Notifier public MessageReceiverInterfac public void ReceiveMessage M4D Imaging PipelineMessage Ptr msg M4D Imaging PipelineMessage MessageSendStyl sendStyle M4D Imaging FlowDirection direction if msg msgID M4D Imaging PMI_FILTER_UPDATED 1 DO NOTIFICATION Put your code here class ExamplePipelineHandler public Default constructor pipeline construction ExamplePipelineHandler Method which pass image to pipeline and start computation void FilterImage ImageType Ptr image protected M4D Imaging PipelineContainer _pipeline M4D Imaging AbstractPipeFilter x firstFilter M4D Imaging AbstractImageConnectionInterface inConnection M4D Imaging AbstractImageConnectionInterface x outConnection Actual pipeline construction should proceed in three basic steps 13 Chapter 2 Library Imaging Allocation of filters Normal allocation of objects We construct desired filters and add them to pipeline We set filter properties And if you want some filter to be executed by pipeline message and not manual calling of Execute method you must call method SetUpdateInvocationStyle as in example Establishing connections When we have allocated filters we must connect them in pipeline Pipe
70. ynchronization over image data 2D example Writer bounding box Reader bounding box 2 4 3 Timestamps Very often we need to detect if something changed during time or which change is older Thats why we have class TimeStamp Its simple class it has inside two big integers one is ID of timestamp and second is actual time In addition we have inside mutex for access synchronization This class has predefined operator lt so two instance can be easily compared which is older This has defined result only for two timestamps with same ID Different objects have timestamps with different ID 2 5 Usage 2 5 1 How to build a pipeline First thing we should know is how to create filtering pipeline with supposed behaviour using prepared filters This section will be brief tutorial to pipeline construction We show possible usage on example class that will have all desired abilities normaly distributed across application 12 Chapter 2 Library Imaging Before we start construction we must decide if we want handle storing and deallocation of all objects There is prepared container for all pipeline objects which can handle deallocation of stored objects and semiautomatically connects filters and other objects with ports used as communication channel For our example we use this PipelineContainer For manual control and construction see its source code include Imaging Image h include Imaging PipelineContainer h const
71. yout determines the format of the panes in the window Each pane can contain one series The Image layout determines the format of the images within the active series 2 Select a layout for the series image or define the values for rows and columns and click Apply 3 Click OK to close the Screen Layout dialog box 8 3 2 2 Comparing multiple studies Multiple studies can be compared by selecting additional studies while viewing a study To select an additional study for comparison with the current study being viewed 1 Select a viewer where you want to appear the study border around the selected viewer turns green 2 While viewing the current study search for the additional study by clicking n 3 Conduct the search see Section 8 3 1 2 4 Select the required study from thelist and click View 5 Change the screen layout as required see Section 8 3 2 1 60 Chapter 8 User Manual 8 4 Manipulating Images This section covers manipulating image display functionality such as orientation magnification field of view etc 8 4 1 Adjusting window level settings Window leveling allows you to adjust the brightness and contrast of images 8 4 1 1 Adjusting brightness The level setting controls the brightness of an image To adjust the brightness of an image 1 Choose one of the following options Tools Window Level Ctrl W Click From here you can adjust the brightness of the selected image 2 Po

Download Pdf Manuals

image

Related Search

Related Contents

Bluetooth Speaker System & Digital Music Player  NTSS User Manual - Documentation    Windtower information technologies Co.,Ltd    26 MAI 2014 - George Soros liquide ses actions de  手引書[PDF:4.0MB]  

Copyright © All rights reserved.
Failed to retrieve file