project_a_presentation

25
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 Weiss Date: 13/06/13

Upload: gleb-orlikov

Post on 16-Aug-2015

62 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Project_A_presentation

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: Project_A_presentation

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: Project_A_presentation

Nuclear Medicine – PET/CT camera

Page 4: Project_A_presentation

PET/CT camera QA Test

Page 5: Project_A_presentation

QA testing of PET camera

The Nuclear Medicine Accreditation Committee Standards

PET Phantom

Phantom image

Page 6: Project_A_presentation

QA testing of PET camera

Testing Result:

Image including calculated

values such as:minValuemaxValueMeanRatios

Page 7: Project_A_presentation

The goal

The project goal is to automate PET/SPECT cameras QA procedure in order to reduce time.

Page 8: Project_A_presentation

Possible Problems

Bad slice: Good slice:

Page 9: Project_A_presentation

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: Project_A_presentation

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: Project_A_presentation

Template definition

Problem: Find ROIs on Best PET slice.

Solution: Apply the PHANTOM MASK on the Best PET slice to get ROIs.

Page 12: Project_A_presentation

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 13: Project_A_presentation

Use case diagram

Page 14: Project_A_presentation

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: Project_A_presentation

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: Project_A_presentation

GUI – Main window

Page 17: Project_A_presentation

GUI – Select series

Page 18: Project_A_presentation

GUI – Manual MASK adjustment

Page 19: Project_A_presentation

GUI – Options

Page 20: Project_A_presentation

GUI – MASK generator

Page 21: Project_A_presentation

GUI – Help

Page 22: Project_A_presentation

Testing

• GUI Testing.

• QA Test results testing (comparing received results from the system with the test result made by physicians).

Page 23: Project_A_presentation

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: Project_A_presentation

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.

Page 25: Project_A_presentation

Questions ???