Page 1
Software Engineering Department
Department of Nuclear Medicine Rambam Health Care Campus
Analysis of PHANTOM images in order to determine the reliability of PET/SPECT
cameras
Students: Archil Pirmisashvili, 317881407 Gleb Orlikov, 317478014
Supervisor: Dr. Miri Cohen WeissDate: 13/06/13
Page 2
Nuclear Medicine
Nuclear medicine is a branch of medical imaging that uses small amounts of radioactive material to diagnose and determine the severity of treat or a variety of diseases.
Page 3
Nuclear Medicine – PET/CT camera
Page 4
PET/CT camera QA Test
Page 5
QA testing of PET camera
The Nuclear Medicine Accreditation Committee Standards
PET Phantom
Phantom image
Page 6
QA testing of PET camera
Testing Result:
Image including calculated
values such as:minValuemaxValueMeanRatios
Page 7
The goal
The project goal is to automate PET/SPECT cameras QA procedure in order to reduce time.
Page 8
Possible Problems
Bad slice: Good slice:
Page 9
Our application
Application does the following steps:
• Define template (mask).• Choose the “best” slice.• Fit the template to the PET image slice.• Calculate values and generate report.
Page 10
Find the “best” sliceProblem: Choose “best” slice from all slices, given by the camera
Solution: Walk through all PET Dicom images, adjust contrasts (leave only HOT rods) and find circles using HOUGH algorithm.
Page 11
Template definition
Problem: Find ROIs on Best PET slice.
Solution: Apply the PHANTOM MASK on the Best PET slice to get ROIs.
Page 12
Fit the MASK
Problem: Fit the PHANTOM MASK to the PET image slice.
Solution: Scale the MASK and apply (move/rotate) on the image.
Page 14
Class diagramPETCameraQA
AcquisitionFOV
«C# class»
Attributes
+ AcquisitionDelayMinutes : Integer
+ AcqusitionTimeMinutes : Integer
+ ActualDoseTime : DateTime
+ ArtefactsComment : String
+ ArtefactsExist : Boolean
+ ColdRod11Visible : Boolean
+ ColdRod12Visible : Boolean
+ ColdRod4Visible : Boolean
+ ColdRod6Visible : Boolean
+ ColdRod7Visible : Boolean
+ ColdRod9Visible : Boolean
+ ContactServiceComments : String
+ ContrastHotVial12MM : Double
+ ContrastHotVial16MM : Double
+ ContrastHotVial25MM : Double
+ ContrastHotVial8MM : Double
+ Cylinder25mmPassed : Boolean
+ DecayFactor : Double
+ EquivalentAcquisitionTime : TimeSpan
+ HotVial12Visible : Boolean
+ HotVial16Visible : Boolean
+ HotVial25Visible : Boolean
+ HotVial8Visible : Boolean
+ Image : Bitmap
+ MeanBackgroundPassed : Boolean
+ MeanSUVAir : Double+ MeanSUVBackground : Double
+ MeanSUVBone : Double
+ MeanSUVWater : Double+ MinSUVAir : Double
+ MinSUVBone : Double
+ MinSUVWater : Double
+ Misregistration : Misregistration
+ MisregistrationComment : String
+ Ratio12mm25mm : Double
+ Ratio12mmBackground : Double+ Ratio16mm25mm : Double
+ Ratio16mmBackground : Double
+ Ratio16to25Passed : Boolean+ Ratio25mmBackground : Double
+ Ratio8mm25mm : Double
+ Ratio8mmBackground : Double
+ RatioAirBone : Double+ RatioWaterBone : Double
+ RemoveFromOperation : Boolean
+ SliceFileName : String+ SliceNumber : Integer
+ StartTime : DateTime
- acqusitionTimeMinutes : Integer
- actualDoseTime : DateTime
- image : Bitmap
- misregistration : Misregistration
- startTime : DateTime
Operations
+ AcquisitionFOV(camera : Cameras, actualDoseTime : DateTime, acquisitionTimeMin : Integer)
Algorithm
«C# class»
Attributes
Operations
+ Algorithm()
+ AngleBetween2Points(pnt1 : PointF, pnt2 : PointF) : Single
+ ArrayToBitmap(slice : Integer[*]) : Bitmap
+ ArrayToImage(slice : Integer[*]) : Image + CenterClosingCT(img : Image<Gray, Byte>) : Image<Gray, Byt...
+ CirclesIntercepting(c1 : CircleF, c2 : CircleF) : Boolean + ClosingImage(img : Image<Gray, Byte>, erodeElement : IntPtr,... + ConvertFromImageCoordinates(img : Image<Gray, Byte>, pnt ...
+ FindAngle(pnt : PointF) : Single + FindBestSlice(slices : List<DicomFile>, mask : CircleMask) : Dico...
+ FindHoughCircles(slice : DicomFile, WindowCenter : Double) : CircleF[*] + FitCircleMask(img : Image<Gray, Byte>, msk : CircleMask) : Circ... + MakeBinaryImage(img : Image<Gray, Byte>, intensityThreshol...
+ PointInCircle(pnt : PointF, center : PointF, radius : Single) : Boolean + SearchPhantomCenter(image : Image<Gray, Byte>, cannyThre... + SearchPhantomRadius(image : Image<Gray, Byte>, cannyThre...
Cameras
«C# enum»«enumeration»
Literals
D690
LS
None
Circle
«C# class»
Attributes
+ Radius : Single
- radius : Single
Operations
+ Circle()
+ Circle(type : ShapeTypes, roiType : ROITypes)
+ Circle(center : PointF, type : ShapeTypes, roiType : ROITypes)
+ Circle(center : PointF)
+ Circle(radius : Single, type : ShapeTypes, roiType : ROITypes)
+ Circle(radius : Single, center : PointF, type : ShapeTypes, roiType : ROITypes)
+ Circle(radius : Single, center : PointF)
+ Circle(radius : Single)
+ Clone() : Shape
+ Rotate(angle : Single)
+ Scale(scaleFactor : Single)
+ Translate(position : PointF)
CircleMask
«C# class»
Attributes
+ MaskName : String
+ Shapes : Shape[*]
Operations
+ AddShape(shape : Shape)
+ CircleMask()
+ CircleMask(fileName : String) + CircleMask(shapes : List<Shape>)
+ CircleMask(stream : Stream) + CircleMask(center : PointF, radius : Single, shapes :...
+ CircleMask(center : PointF, radius : Single)
+ CircleMask(center : PointF)
+ CircleMask(radius : Single)
+ Clone() : Shape
+ LoadFromFile(fileName : String) : CircleMask
+ RemoveShape(shape : Shape)
+ Rotate(angle : Single)+ Save(fileName : String) : Boolean
+ Save(stream : Stream)
+ Scale(scaleFactor : Single)+ ToString() : String
+ Translate(position : PointF)- Load(stream : Stream)
Misregistration
«C# enum»«enumeration»
Literals
Moderate
NoneSevere
QATest
«C# class»
Attributes
+ ActualDifference : Double
+ ActualDoseA : Double
+ ActualDoseB : Double
+ ActualDoseTime : DateTime
+ ActualRatio : Double
+ Camera : Cameras
+ FOV1 : AcquisitionFOV
+ FOV2 : AcquisitionFOV
+ TargetTime : DateTime
+ TestDifference : Double
+ TestDose1 : Double
+ TestDose2 : Double
+ TestDoseTime : DateTime
+ TestRatio : Double
- actualDoseA : Double
- actualDoseB : Double
- actualDoseTime : DateTime
- camera : Cameras
- testDose1 : Double
- testDose2 : Double
- testDoseTime : DateTime
- _FOV1 : AcquisitionFOV
- _FOV2 : AcquisitionFOV
Operations
+ QATest(camera : Cameras)
ROITypes
«C# enum»«enumeration»
Literals
AirBackground
HotA
HotBHotC
HotD
None
Teflon
Water
Shape
«C# class»
Attributes
+ Center : PointF
+ Name : String
+ ROIType : ROITypes
+ Type : ShapeTypes
- center : PointF
- roiType : ROITypes
- type : ShapeTypes
Operations
+ Clone() : Shape
+ Rotate(angle : Single)
+ Scale(scaleFactor : Single)
+ Shape(center : PointF)
+ Shape(type : ShapeTypes, roiType : ROITypes)
+ Shape(center : PointF, type : ShapeTypes, roiType : ROITypes)
+ Shape()
+ ToString() : String
+ Translate(position : PointF)
ShapeTypes
«C# enum»«enumeration»
Literals
OrientationLocation
OrientationRotation
ROI
SliceCircles
«C# class»
Attributes
+ Circles : CircleF[*]
+ Slice : DicomFile
Operations
+ SliceCircles()
+ SliceCircles(slice : DicomFile, circles : CircleF[*])
CircleMask
*
Shapes
*
QATest
*
Camera
1
QATest
*
FOV1
1
QATest
*
FOV2
1
Shape
*
Type
1
Shape *
ROIType
1
AcquisitionFOV
*
Misregistration
1
Page 15
Class diagram cont.PETCameraQAApplication
Options
«C# struct»
Attributes
+ MasksPath : String
+ Organization : String+ TestsPath : String
Operations
+ Options()
Solution
«C# struct»
Attributes
+ max : Double+ mean : Double+ min : Double
Operations
+ Solution()
About
«C# class»
Attributes
+ AssemblyCompany : String+ AssemblyCopyright : String+ AssemblyDescription : String+ AssemblyProduct : String
+ AssemblyTitle : String+ AssemblyVersion : String- components : IContainer- labelCopyright : Label- labelProductName : Label- labelVersion : Label- logoPictureBox : PictureBox- okButton : Button- tableLayoutPanel : TableLayoutPanel- textBoxDescription : TextBox
Operations
+ About()- InitializeComponent()- logoPictureBox_Click(sender : Object, e : EventArgs)# Dispose(disposing : Boolean)
ChooseSeries
«C# class»
Attributes
+ cancelFlag : Boolean+ lstReturn : List<Di...- allList : List<DicomF...
- btnCancel : Button
- btnOk : Button- comboBox : ComboBox- components : IContainer- groupBox1 : GroupBox- modality : String- pictureBox : PictureBox- trackBar : TrackBar
Operations
+ ChooseSeries(strLi...
- btnCancel_Click(sender : Object, e : EventArgs)- btnOk_Click(sender : Object, e : EventArgs)- comboBox_SelectedIndexChanged(sender : Object, e : EventArgs)- InitializeComponent()- ShowSlice(index : Integer) - SortList(list : List<D...
- trackBar_Scroll(sender : Object, e : EventArgs)# Dispose(disposing : Boolean)
Form1
«C# class»
Attributes
- aboutToolStripMenuItem : ToolStripMenuItem- bestPETSlice : Integer- bestPETSlice3D : Integer- btnCancelTest : Button
- btnCorect1 : Button- btnCorect2 : Button- btnRunTest : Button- components : IContainer- exitToolStripMenuItem : ToolStripMenuItem- fileToolStripMenuItem : ToolStripMenuItem- fittedMask1 : CircleMask- fittedMask2 : CircleMask- generateMaskToolStripMenuItem : ToolStripMenuItem- groupBox1 : GroupBox- groupBox2 : GroupBox
- groupBox3 : GroupBox- helpToolStripMenuItem : ToolStripMenuItem- hToolStripMenuItem : ToolStripMenuItem- imagesPathBox1 : GroupBox- imagesPathTextBox : TextBox- imagesPathTextBox2 : TextBox- label10 : Label- label11 : Label- label2 : Label- label3 : Label- label4 : Label
- label5 : Label- label6 : Label- label7 : Label- label8 : Label- label9 : Label- maskBox : GroupBox
- maskSelectionComboBox : ComboBox- maskToolStripMenuItem : ToolStripMenuItem- menuStrip1 : MenuStrip- pathImagesButton : Button
- pathImagesButton2 : Button- pbMask : PictureBox- pbPETwithMASK : PictureBox- pbPETwithMASK2 : PictureBox
- programOptionsToolStripMenuItem : ToolStripMenuItem- progressBar1 : ProgressBar- settings : Options- sourcePathDialog : FolderBrowserDialog- startTestButton : Button
- tbActDose1 : TextBox- tbActDose2 : TextBox- tbActDoseTime1 : TextBox- tbTestDose1 : TextBox- tbTestDose2 : TextBox- tbTestDoseTime1 : TextBox- testLogGroupBox : GroupBox- testLogListBox : ListBox- testProgressGroupBox : GroupBox- toolStripSeparator1 : ToolStripSeparator
Operations
+ Form1()- aboutToolStripMenuItem_Click(sender : Object, e : EventArgs)- btnCancelTest_Click(sender : Object, e : EventArgs)- btnCorect1_Click(sender : Object, e : EventArgs)- btnCorect2_Click(sender : Object, e : EventArgs)- btnRunTest_Click(sender : Object, e : EventArgs)- DrawMask(img : Bitmap, mask : Shape) : Bitmap- DrawShape(img : Bitmap, shape : Shape) : Bitmap- EnableCorrect1Button(enabled : Boolean)
- EnableCorrect2Button(enabled : Boolean)- EnableLoadImagesButton(enabled : Boolean)- EnableStartTestButton(enabled : Boolean)- FillMasksComboBox()- FitMasks()- Form1_Load(sender : Object, e : EventArgs)- generateMaskToolStripMenuItem_Click(sender : Object, e : EventArgs)- GenerateReport() : Boolean- GetSelectedMask() : CircleMask- hToolStripMenuItem_Click(sender : Object, e : EventArgs)- InitializeComponent()
- LoadImages(path : String, path2 : String)- LoadMask(FileName : String) : Shape- LoadOptions() : Boolean- maskSelectionComboBox_SelectedIndexChanged(sender : Object, e : EventArgs)- OpenSeriesForm(fr : Form, chSer : ChooseSeries) : DialogResult- pathImagesButton2_Click(sender : Object, e : EventArgs)- pathImagesButton_Click(sender : Object, e : EventArgs)- programOptionsToolStripMenuItem_Click(sender : Object, e : EventArgs)- SaveOptions() : Boolean- SetProgressMax(max : Integer)- SetProgressValue(val : Integer)
- ShowPETSlice(index : Integer, mask : CircleMask)- ShowPETSlice2(index : Integer, mask : CircleMask)- SliceSelection() - SortList(list : List<D...
- SortSlices()- startTestButton_Click(sender : Object, e : EventArgs)- ToConsole(message : String)# Dispose(disposing : Boolean)
GenerateResults
«C# class»
Attributes
+ ImageAxial : Bitmap+ ImageAxial3D : Bitmap+ MaxSUV12mm : Double
+ MaxSUV12mm3D : Double+ MaxSUV16mm : Double+ MaxSUV16mm3D : Double+ MaxSUV25mm : Double+ MaxSUV25mm3D : Double+ MaxSUV8mm : Double+ MaxSUV8mm3D : Double+ MeanSUVAir : Double+ MeanSUVAir3D : Double+ MeanSUVBackground : Double+ MeanSUVBackground3D : Double
+ MeanSUVBone : Double+ MeanSUVBone3D : Double+ MeanSUVWater : Double+ MeanSUVWater3D : Double+ MinAir : Double+ MinAir3D : Double+ MinBone : Double+ MinBone3D : Double+ MinWater : Double+ MinWater3D : Double+ SUV12Visible : Boolean
+ SUV12Visible3D : Boolean+ SUV16Visible : Boolean+ SUV16Visible3D : Boolean+ SUV25Visible : Boolean+ SUV25Visible3D : Boolean+ SUV8Visible : Boolean+ SUV8Visible3D : Boolean- maxSUV12mm : Double- maxSUV12mm3D : Double- maxSUV16mm : Double- maxSUV16mm3D : Double
- maxSUV25mm : Double- maxSUV25mm3D : Double- maxSUV8mm : Double- maxSUV8mm3D : Double- meanSUVAir : Double- meanSUVAir3D : Double- meanSUVBackground : Double- meanSUVBackground3D : Double- meanSUVBone : Double- meanSUVBone3D : Double- meanSUVWater : Double
- meanSUVWater3D : Double- minAir : Double- minAir3D : Double- minBone : Double- minBone3D : Double- minWater : Double- minWater3D : Double
Operations
+ GenerateResults(mask : CircleMask, mask3D : CircleMask, img : DicomFile, img3D : DicomFile)
- CalculationPerCircle(circle : Circle, img : DicomFile) : Solution- DrawShape(img : Bitmap, shape : Shape) : Bitmap
Help
«C# class»
Attributes
- components : IContainer- groupBox1 : GroupBox- vScrollBar1 : VScrollBar
Operations
+ Help()- InitializeComponent()# Dispose(disposing : Boolean)
OptionsForm
«C# class»
Attributes
+ MasksPath : String+ Organization : String+ TestsPath : String- cancelButton : Button
- components : IContainer- GeneralGroupBox : GroupBox- MasksFolderBrowserDialog : FolderBrowserDialog- masksGroupBox : GroupBox- masksPathButton : Button- masksPathTextBox : TextBox- organizationLabel : Label- organizationTextBox : TextBox- saveOptionsButton : Button- TestsFolderBrowserDialog : FolderBrowserDialog- testsGroupBox : GroupBox
- testsPathButton : Button- testsPathTextBox : TextBox
Operations
+ OptionsForm()- cancelButton_Click(sender : Object, e : EventArgs)- InitializeComponent()- masksPathButton_Click(sender : Object, e : EventArgs)- OptionsForm_Load(sender : Object, e : EventArgs)- saveOptionsButton_Click(sender : Object, e : EventArgs)
- testsPathButton_Click(sender : Object, e : EventArgs)# Dispose(disposing : Boolean)
Program
«C# class»
Attributes
Operations
- Main()
ReportPDFExporter
«C# class»
Attributes
+ Test : QATest- test : QATest
Operations
+ CreateDocument(test : QATest) : Document+ DefineStyles(document : Document)+ Export(filename : String, showResult : Boolean)
+ ReportPDFExporter(test : QATest)- DefineContentSection(document : Document, test : QATest)
Resources
«C# class»
Attributes
- resourceCulture : CultureInfo- resourceMan : ResourceManager~ browse : Bitmap~ Culture : CultureInfo~ ResourceManager : ResourceManager
Operations
~ Resources()
Settings
«C# class»
Attributes
+ Default : Settings- defaultInstance : Settings
Operations
+ Settings()
SliceFitForm
«C# class»
Attributes
+ bestSlice : Integer+ mask : CircleMask
- btnCancel : Button- btnSave : Button
- components : IContainer- currScaleFac : Single- downBtn : Button- groupBox3 : GroupBox- label1 : Label- label2 : Label- label3 : Label- label4 : Label- lblSliceNum : Label- leftBtn : Button- leftRotateBtn : Button
- pbSliceAndMask : PictureBox- rightBtn : Button- rightRotateBtn : Button- scaleFactor : NumericUpDown- title : String- trackBar : TrackBar- upBtn : Button
Operations
+ SliceFitForm(allList ...
- button1_Click(sender : Object, e : EventArgs)- button2_Click(sender : Object, e : EventArgs)- downBtn_Click_1(sender : Object, e : EventArgs)- DrawMask(img : Bitmap, mask : Shape) : Bitmap- DrawShape(img : Bitmap, shape : Shape) : Bitmap- EnableTrackBar(val : Boolean)- InitializeComponent()- leftBtn_Click(sender : Object, e : EventArgs)- leftRotateBtn_Click(sender : Object, e : EventArgs)- rightBtn_Click_1(sender : Object, e : EventArgs)- rightRotateBtn_Click(sender : Object, e : EventArgs)
- scaleFactor_ValueChanged_1(sender : Object, e : EventArgs)- SetSliceNumberLabel(val : Integer)- SetTrackBarValue(val : Integer)- ShowSlice(index : Integer, mask : CircleMask)- SliceFitForm_Load(sender : Object, e : EventArgs)- trackBar_Scroll(sender : Object, e : EventArgs)- upBtn_Click(sender : Object, e : EventArgs)# Dispose(disposing : Boolean)
TestForm
«C# class»
Attributes
- btnLoadFile : Button- button1 : Button- components : IContainer- i : Integer- label1 : Label- ofdSource : OpenFileDialog- pbImage : PictureBox
Operations
+ TestForm()- btnLoadFile_Click(sender : Object, e : EventArgs)- button1_Click(sender : Object, e : EventArgs)- DrawMask(img : Bitmap, mask : Shape) : Bitmap- DrawShape(img : Bitmap, shape : Shape) : Bitmap- InitializeComponent()- LoadImage()- LoadMask(FileName : String) : Shape - SortList(list : List<D...
# Dispose(disposing : Boolean)
MaskGenerator
DrawStatuses
«C# enum»«enumeration»
Literals
MoveNoneRotateScale
AboutMaskGenerator
«C# class»
Attributes
+ AssemblyCompany : String+ AssemblyCopyright : String+ AssemblyDescription : String+ AssemblyProduct : String+ AssemblyTitle : String+ AssemblyVersion : String
- components : IContainer- labelCompanyName : Label- labelCopyright : Label- labelProductName : Label- labelVersion : Label- logoPictureBox : PictureBox- okButton : Button- tableLayoutPanel : TableLayoutPanel- textBoxDescription : TextBox
Operations
+ AboutMaskGenerator()- InitializeComponent()# Dispose(disposing : Boolean)
Form1
«C# class»
Attributes
- aboutToolStripMenuItem : ToolStripMenuItem- backgroundAngle : Single- backgroundImage : Bitmap- backgroundPos : PointF- backgroundScale : Single- chkOrientation : CheckBox
- chkRoi : CheckBox- cmImage : ContextMenuStrip- components : IContainer- count : Integer- drawStatus : DrawStatuses- exitToolStripMenuItem : ToolStripMenuItem- fileToolStripMenuItem : ToolStripMenuItem- groupBox1 : GroupBox- groupBox2 : GroupBox- helpToolStripMenuItem : ToolStripMenuItem- lastPos : Point
- leftButtonDown : Boolean- loadBackgroundToolStripMenuItem : ToolStripMenuItem- lstShapes : ListBox- MaskShapeName : String- menuStrip1 : MenuStrip- moveToolStripMenuItem : ToolStripMenuItem- ofdBackground : OpenFileDialog- ofdMask : OpenFileDialog- pbImage : ExtendedPictureBox- rotateToolStripMenuItem : ToolStripMenuItem- scaleToolStripMenuItem : ToolStripMenuItem
- sfdMask : SaveFileDialog
- splitContainer1 : SplitContainer- statusStrip1 : StatusStrip- toolStripMenuItem1 : ToolStripMenuItem- toolStripMenuItem2 : ToolStripMenuItem- toolStripMenuItem3 : ToolStripMenuItem- toolStripSeparator1 : ToolStripSeparator- toolStripSeparator2 : ToolStripSeparator- toolStripSeparator4 : ToolStripSeparator
Operations
+ ConvertFromScreenCoordinated(point : PointF) : PointF+ ConvertToScreenCoordinated(point : PointF) : PointF+ Form1()- aboutToolStripMenuItem_Click(sender : Object, e : EventArgs)- chkOrientation_CheckedChanged(sender : Object, e : EventArgs)- chkRoi_CheckedChanged(sender : Object, e : EventArgs)- DrawShape(shape : Shape, color : Color, g : Graphics)- DrawShapes(g : Graphics)- exitToolStripMenuItem_Click(sender : Object, e : EventArgs)
- Form1_KeyDown(sender : Object, e : KeyEventArgs)- Form1_Load(sender : Object, e : EventArgs)- InitializeComponent()- loadBackgroundToolStripMenuItem_Click(sender : Object, e : EventArgs)- LoadShapes(shapes : Shape[*])- LoadShapes()- lstShapes_KeyDown(sender : Object, e : KeyEventArgs)- lstShapes_SelectedIndexChanged(sender : Object, e : EventArgs)- MoveMask(position : PointF, relative : Boolean)- moveToolStripMenuItem_Click(sender : Object, e : EventArgs)- pbImage_MouseDown(sender : Object, e : MouseEventArgs)
- pbImage_MouseMove(sender : Object, e : MouseEventArgs)- pbImage_MouseUp(sender : Object, e : MouseEventArgs)- pbImage_Paint(sender : Object, e : PaintEventArgs)- pbImage_Resize(sender : Object, e : EventArgs)- resetDrawStatuses(status : DrawStatuses)- RotateMask(angle : Single)- rotateToolStripMenuItem_Click(sender : Object, e : EventArgs)- ScaleMask(scaleFactor : Single)- scaleToolStripMenuItem_Click(sender : Object, e : EventArgs)- splitContainer1_KeyDown(sender : Object, e : KeyEventArgs)- toolStripMenuItem1_Click(sender : Object, e : EventArgs)
- toolStripMenuItem2_Click(sender : Object, e : EventArgs)- toolStripMenuItem3_Click(sender : Object, e : EventArgs)# Dispose(disposing : Boolean)
Program
«C# class»
Attributes
Operations
- Main()
Resources
«C# class»
Attributes
- resourceCulture : CultureInfo- resourceMan : ResourceManager~ Culture : CultureInfo~ ResourceManager : ResourceManager
Operations
~ Resources()
Settings
«C# class»
Attributes
+ Default : Settings- defaultInstance : Settings
Operations
+ Settings()
Settings *Default 1
Settings *Default 1
Page 16
GUI – Main window
Page 17
GUI – Select series
Page 18
GUI – Manual MASK adjustment
Page 20
GUI – MASK generator
Page 22
Testing
• GUI Testing.
• QA Test results testing (comparing received results from the system with the test result made by physicians).
Page 23
Final Conclusions
• In a work with image processing, you need to pay attention that the image processing result generally are not accurate, and if there is a need in precision you need to try additional techniques in order to double check your results.
• If there are similar images but with different quality you need to adjust the contrast in order to improve your image.
• Our work was based only on two kinds of GE cameras, so the project is oriented for them. Any additions may cause additional changes in algorithms and calculations.
Page 24
References
[1] J. P. Pluim, J. B. Maintz, and M. A. Viergever, ‘‘Image registration by maximization of combined mutual information and gradient information,’’IEEE Trans. Med. Imaging 19, 809–814 ~2000.
[2] W. M. Wells III, P. Viola, H. Atsumi, S. Nakajima, and R. Kikinis, ‘‘Multi-modal volume registration by maximization of mutual information,’’ Med. Image Anal 1, 35–51 ~1996.
[3] Matthew Y. Wang, Calvin R. Maurer, Jr., J. Michael Fitzpatrick,* Member, IEEE, and Robert J. Maciunas, “IEEE TRANSACTIONS ON BIOMEDICAL ENGINEERING, VOL. 43, NO. 6, JUNE 1996.”
[4] Use of the Hough transformation to detect lines and curves in pictures. Technical note 36. April 1971. By: Richard O.Duda and Peter E. Hart. Artificial intelligence center.