[ffcb78]: / Preprocessing Medical Data Pipeline / __pycache__ / preprocessing.cpython-311.pyc

Download this file

111 lines (111 with data), 20.8 kB

§

9™Ðe>ãóì—ddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
Z
ddlmZddlmZddlZddlZddlZddlmZd„Zd„Zd„Zd	„Zd
„Zd„Zd„Zd
„Zd„Z d„Z!d„Z"d„Z#d„Z$d„Z%d„Z&dS)éN)Ú	PyntCloud)Úresize)Útqdm)ÚImagecóP—|j\}}}tj||||zf¦«}|S©N)ÚshapeÚnpÚreshape)Úarray_3dÚdepthÚheightÚwidthÚarray_2ds     ú/Users/asif/Documents/Deep Learning Musculoskeletal Automatic Segmentation/Preprocessing Medical Data Pipeline/preprocessing.pyÚflatten_3d_to_2drs1€à#œ>Ñ€Eˆ65õŒz˜( U¨F°U©NÐ$;Ñ<Ô<€Hà€Oócóî—| d¦«}t|¦«dkrdS|d ¦«}	t|d¦«}n#t$rYdSwxYw|›d|d›}|S)NÚ_ééþÿÿÿrÚ03d)ÚsplitÚlenÚupperÚintÚ
ValueError)Úinput_stringÚpartsÚprefixÚnumber_partÚ
new_strings     rÚtransform_stringr#s’€Ø×Ò˜sÑ#Ô#€Eå
ˆ5z„zA‚~€~؈tà
2ŒY_Š_Ñ
Ô
€Fðݘ% œ(‘m”mˆˆøÝððð؈tˆtðøøøðÐ.Ð.˜[Ð.Ð.Ð.€JØÐsÁAÁ
A*Á)A*có>—g}|D]}| |¦«Œ|Sr)Úextend)ÚarrÚ	flattenedÚrows   rÚflatten_2d_arrayr)-s3€Ø€IØððˆØ×Ò˜ÑÔÐÐØÐrcót—g}tj|¦«D] \}}}|D]}| |¦«ŒŒ!|Sr)ÚosÚwalkÚappend)Ú	directoryÚfolder_namesÚrootÚdirsÚfilesÚfolders      rÚListFoldersr45sX€Ø€LÝœW YÑ/Ô/ð(ð(шˆdEØð	(ð	(ˆFØ×Ò Ñ'Ô'Ð'Ð'ð	(àÐrcó²—g}tj|¦«}t|¦«}|D]®}tj ||¦«}tj |¦«rm| d¦«rX	tj|¦«}| 	|¦«Œ#tj
j$rtd|›d¦«YŒªwxYwŒ¯|S)Nz.dcmzSkipping file: z. It is not a valid DICOM file.)
r+ÚlistdirÚsortedÚpathÚjoinÚisfileÚendswithÚpydicomÚdcmreadr-ÚerrorsÚInvalidDicomErrorÚprint)r.Údicom_filesr2Úsorted_filesÚfilenameÚfilepathÚ
dicom_files       rÚread_dicom_filesrF<së€Ø€KÝŒJyÑ!Ô!€Eݘ%‘=”=€Là ðSðSˆÝ”7—<’< 	¨8Ñ4Ô4ˆÝ
Œ7>Š>˜(Ñ#Ô#ð	S¨×(9Ò(9¸&Ñ(AÔ(Að	Sð
SÝ$œ_¨XÑ6Ô6
Ø×"Ò" :Ñ.Ô.Ð.Ð.øÝ”>Ô3ð
Sð
Sð
SÝÐQ¨ÐQÐQÐQÑRÔRÐRÐRÐRð
SøøøøàÐsÁ?)B)Â)'CÃCcóz—tj|¦«}|dz}|dz}|dz}d||dfz}t|¦«dS)NizMemory usage of %s: %d %s.ÚMB)ÚsysÚ	getsizeofr@)ÚvariableÚ
variable_nameÚ
size_in_bytesÚ
size_in_kbÚ
size_in_mbÚ
size_in_gbÚmessages       rÚ
get_ram_usagerRKsO€Ý”M (Ñ+Ô+€MØ Ñ%€JؘdÑ"€JؘdÑ"€JØ*¨m¸ZÈÐ-NÑN€GÝ	ˆ'N„N€N€N€Nrcó2—tj||¬¦«}|S)N©Úaxis)r
Úsqueeze)Úarray_4drUrs   rÚconvert_4d_to_3drXSs€ÝŒz˜(¨Ð.Ñ.Ô.€HØ€Orcó4—tjd¬¦«}| dd¬¦«}| |||d¬¦«| d¦«| d	¦«| d
¦«tj¦«dS)N)érZ)ÚfigsizeéoÚ3d)Ú
projectionÚblue)ÚcÚXÚYÚZ)ÚpltÚfigureÚadd_subplotÚscatterÚ
set_xlabelÚ
set_ylabelÚ
set_zlabelÚshow)ÚxÚyÚzÚfigÚaxs     rÚplot_3d_datarqVsˆ€å

Œ*˜VÐ
$Ñ
$Ô
$€Cà	Š˜¨ˆÑ	.Ô	.€B؇J‚Jˆq!Q˜&€JÑ!Ô!Ð!؇M‚M#ÑÔÐØ‡M‚M#ÑÔÐØ‡M‚M#ÑÔÐÝ„HJ„J€J€J€Jrcó‚—|tj|¦«z}|tj|¦«z}d}||zd|z
|zz}|S)Ngà?é)r
Úmax)Úimage1Úimage2ÚalphaÚsuperimposed_images    rÚsuperimpose_imagesry`sI€Ø
•b”f˜V‘n”nÑ
$€FØ
•b”f˜V‘n”nÑ
$€FØ€EØ ™¨1¨u©9¸Ñ*>Ñ>ÐØÐrcó¤—td|¦«g}g}g}g}g}g}|d |¦«z}t|¦«}tt	|¦«¦«D]f}	||	jt
j||	j¦«z}
| |
¦«tdt
j|
¦«¦«Œg| |¦«t|¦«}t
j
|¦«}td| ¦«¦«|d |¦«z}tt	|¦«¦«D]b}	| ||	j¦«| ||	j¦«| ||	j
¦«Œctj|gd¢¬¦«}|S)NzPatient Scan Data: z/Raw DICOM MRI Scans/{}ú#Max pixel value in image stack is: z/{}©rlrmrn©Úcolumns)r@ÚformatrFÚrangerÚpixel_arrayr
rtr-r)ÚarrayÚImagePositionPatientÚImageOrientationPatientÚPixelSpacingÚpdÚ	DataFrame)
Ú
scans_pathÚfoldersÚscan_pixel_dataÚscan_coordinate_dataÚsingle_scan_pixel_dataÚscan_orientation_dataÚscan_pixelspacing_dataÚsingle_paitent_scans_pathrAÚiÚnormalized_dataÚtraining_scansÚ
coord_datas
             rÚReadIn_MRIScans_Masksr”hsЀÝ	Ð
 Ñ)Ô)Ð)Ø€OØÐØÐØÐØÐØÐà!+Ð.G×.NÒ.NÈwÑ.WÔ.WÑ!WÐÝ"Ð#<Ñ=Ô=€Kõ•C˜Ñ$Ô$Ñ
%Ô
%ðNðNˆØ& qœ>Ô5½¼¸{È1¼~Ô?YÑ8ZÔ8ZÑ[ˆØ×%Ò% oÑ6Ô6Ð6Ý
Ð3µR´V¸OÑ5LÔ5LÑMÔMÐMÐMØ×ÒÐ1Ñ2Ô2Ð2å% oÑ6Ô6€NÝ”X˜nÑ-Ô-€NÝ	Ð
/°×1CÒ1CÑ1EÔ1EÑFÔFÐFð",¨e¯lªl¸7Ñ.CÔ.CÑ!CÐÝ
•C˜Ñ$Ô$Ñ
%Ô
%ðCðCˆØ×#Ò# K°¤NÔ$GÑHÔHÐHØ×$Ò$ [°¤^Ô%KÑLÔLÐLØ×%Ò% k°!¤nÔ&AÑBÔBÐBÐBå”Ð2¸O¸O¸OÐLÑLÔL€JØÐrc	óô—tjd |¦«¦«}tj|jgd¢¬¦«}| dd¬¦«}| d¬¦«}td	tj
|jd
d|jddz
¦«¦«td
tj
|jd
d|jddz
¦«¦«|d d„¦«|d<	| 
d¦«| 
d¦«tj|ddz¦«dz|d<	| 
d¦«tj||d¬¦«}| d¦« ¦« ¦«}t%t'|ddgt)|¦«z¦«¦«}|d |¦« d¦«|d<|j|ddkjd}|j|ddkjd
}||z
dz}	td|¦«td|¦«td|	¦«	| 
d¦«| 
d¦«| 
d¦«|||	|fS)NúSC:/Users/GGPC/OneDrive/Desktop/Part 4 Project/Part4Project/SegmentationMasks/{}.plyr|r}rnF)Ú	ascendingT)ÚdropzHeight of Paitent in mm: éÿÿÿÿrrz%Length of Paitent AOI (tibia) in mm: có"—t|d¦«S)Nrs)Úround)rls rú<lambda>z'MappingCoordinateData.<locals>.<lambda>›s€µe¸A¸q±k´k€rzExactMaskCoordinateData.csvzExactScanCoordinateData.csvzRoundedMaskCoordinateData.csv)ÚonÚAOIzOutside of AOIÚSegmentationRegionSlicersúAOI Slice Start: úAOI Slice End: úAOI Slice Range: ztibia_mri_coord.csvzmergedcoordsystems.csvzcondensedmergedcoordsystems.csv)ÚtrimeshÚ	load_meshrr†r‡ÚverticesÚsort_valuesÚreset_indexr@r
ÚabsÚilocÚapplyÚto_csvr›ÚmergeÚgroupbyÚmedianÚdictÚziprÚmapÚfillnaÚlocÚindex)
Úfilename_labelr“Úmeshr¥Ú	merged_dfÚcondensed_dfÚmapping_dictÚslices_aoi_startÚslices_aoi_endÚslice_aoi_ranges
          rÚMappingCoordinateDatar½‹sî€åÔÐs×{Ò{ð}KñLôLñMôM€DõŒ|˜DœM°?°?°?ÐCÑCÔC€Hð
×#Ò# C°UÐ#Ñ;Ô;€HØ×#Ò#¨4Ð#Ñ0Ô0€Hå	Ð
%¥r¤v¨j¬o¸bÔ.AÀ!Ô.DÀzÄÐWXÔGYÐZ[ÔG\Ñ.\Ñ']Ô']Ñ^Ô^Ð^Ý	Ð
1µ2´6¸(¼-ÈÔ:KÈAÔ:NÐQYÔQ^Ð_`ÔQaÐbcÔQdÑ:dÑ3eÔ3eÑfÔfÐfà  ”o×+Ò+Ð,AÐ,AÑBÔB€JˆsOð9؏ŠÐ5Ñ6Ô6Ð6Ø×ÒÐ7Ñ8Ô8Ð8õ”H˜X cœ]¨QÑ.Ñ/Ô/°!Ñ3€HˆSMð9؏ŠÐ7Ñ8Ô8Ð8唘 X°#Ð6Ñ6Ô6€Ià×$Ò$ SÑ)Ô)×0Ò0Ñ2Ô2×>Ò>Ñ@Ô@€L坘L¨Ô-°¨wµs¸<Ñ7HÔ7HÑ/HÑIÔIÑJÔJ€Là,6°s¬O×,?Ò,?ÀÑ,MÔ,M×,TÒ,TÐUeÑ,fÔ,f€JÐ(Ñ)à"œ zÐ2KÔ'LÐPUÒ'UÔVÔ\Ð^_Ô`ÐØ ”n ZÐ0IÔ%JÈeÒ%SÔTÔZÐ\^Ô_€NØ%Ð(8Ñ8¸1Ñ<€OÝ	Ð
Ð/Ñ0Ô0Ð0Ý	Ð
˜^Ñ,Ô,Ð,Ý	Ð
˜Ñ/Ô/Ð/ð?Ø×ÒÐ/Ñ0Ô0Ð0Ø×ÒÐ1Ñ2Ô2Ð2Ø×ÒÐ=Ñ>Ô>Ð>ð˜^¨_¸jÐHÐHrcó2—tjd |¦«¦«}tj|jgd¢¬¦«}tj|jgd¢¬¦«}t||¬¦«}|ddg}| d|d|d	|d
¬¦«}|j	| 
¦« |¦«}tj
|d¬
¦«}t||d¬¦«}tj|dkd	d¦«}|S)Nr–r|r})Úv1Úv2Úv3)Úpointsr¶éÚ	voxelgridrrsr)Ún_xÚn_yÚn_z)rrrs)ÚaxesF)Ú
anti_aliasing)r£r¤rr†r‡r¥ÚfacesrÚ
add_structureÚ
structuresÚget_feature_vectorrr
Ú	transposerÚwhere)	rµr¼r¶r¥rÊÚcloudÚdesired_resolutionÚvoxelgrid_idÚ
voxel_grids	         rÚVoxelisationMaskrÔÆsD€åÔÐs×{Ò{ð}KñLôLñMôM€DõŒ|˜DœM°?°?°?ÐCÑCÔC€HÝŒL˜œÐ-?Ð-?Ð-?Ð@Ñ@Ô@€EÝ˜X¨EÐ2Ñ2Ô2€Eð*¨3°Ð4Ðð×&Ò& {Ð8JÈ1Ô8MÐSeÐfgÔShðoAðBCôoDÐ&ñEôE€LØÔ! ,Ô/×BÒBÑDÔD×LÒLÐM_Ñ`Ô`€Jõ”˜j¨yÐ9Ñ9Ô9€Jõ˜
Ð$6ÀeÐLÑLÔL€J唘* qš.¨!¨QÑ/Ô/€JðÐrcóê—tjd ||¦«¦«}tj|¦«}| ¦«}tj|¬¦«}|ddd…dd…dd…f}tj|dkdd¦«}tj	|¦«}tj
tj|dk¦«¦«}|jdkrt|d¦«}nd}|jdkrt|d¦«}nd}td|d¦«td|d¦«td|d|dz
dz¦«||d|dfS)	Nz6{}/Raw NIFITI Segmentation Masks (3D Slicer Output)/{})Údatar™rrsr r¡r¢)ÚsitkÚ	ReadImagerÚGetArrayFromImageÚ
GetSpacingr†r‡r
rÏr‚rÎÚnonzeroÚsizeÚtupler@)ÚbasedirrµÚseg_masks_15A_tibiaÚseg_masks_15A_tibia_dataÚvoxel_dimensionsÚindicesÚfirst_non_zero_index_2dÚlast_non_zero_index_2ds        rÚMaskCreationråçs—€Ýœ.Ð*b×)jÒ)jÐkrðuCñ*Dô*DñEôEÐÝ#Ô5Ð6IÑJÔJÐØ*×5Ò5Ñ7Ô7ÐÝ”|Ð+;Ð<Ñ<Ô<Ðà7¸¸¸"¸¸a¸a¸aÀÀÀ¸
ÔCÐÝ!œxÐ(@ÀAÒ(EÀqÈ!ÑLÔLÐå!œxÐ(@ÑAÔAÐÝŒl2œ:Ð&>À!Ò&CÑDÔDÑEÔE€GØ„|aÒÐÝ"'¨°¬
Ñ"3Ô"3ÐÐà"&Ðà„|aÒÐÝ!& w¨r¤{Ñ!3Ô!3ÐÐà!%Ðå	Ð
Ð6°qÔ9Ñ:Ô:Ð:Ý	Ð
Ð3°AÔ6Ñ7Ô7Ð7Ý	Ð
Ð 6°qÔ 9Ð<SÐTUÔ<VÑ VÐYZÑ ZÑ\Ô\Ð\à#Ð%<¸QÔ%?ÐAWÐXYÔAZÐZÐZrc
óΗtjd |t|d d¦«d¦«¦«¦«}tjd ||d d¦«d|d¦«¦«}| ¦«}| ¦«}	|	t|¦«dd…dd…df}
|t|¦«dd…dd…df}t
|
|¦«}tj|d¬¦«tj	d ||d¦«¦«tj
d	¦«tj¦«|d
krßtjd ||¦«¦«}
|
 ¦«}|	|dd…dd…df}
||dd…dd…df}t
|
|¦«}tj|d¬¦«tj	d ||jd|¦«¦«tj
d	¦«tj¦«dSdS)
Nz${}/nnUNet Data/scans/msk_00{}.nii.gzrrrsz!{}/nnUNet Data/masks/{}/{}.nii.gzÚgray)Úcmapz1Validating Scan & Mask (Binary) on Slice {} of {}ÚoffFz{}/msk_00{}.nii.gzz>Validating Scan & Mask (Multiclass) on Slice {}/{} of msk_00{})
ÚnibÚloadrrrÚ	get_fdataryrdÚimshowÚtitlerUrkr	)rÞÚcolab_fnameÚ
slice_idx_binÚslice_idx_multiÚmulticlass_dirÚ
mask_indexÚnii_img_scanÚnii_img_maskÚ	mask_dataÚ	scan_datarurvrxÚnii_img_mask_multiclassÚmulticlass_mask_datas               rÚVisualValidationMSKrús€Ý”8ÐC×KÒKÈGÕUXÐ[fÐghÔ[i×ZpÒZpÐqtÑZuÔZuÐwxÔYyÑUzÔUzÑ{Ô{Ñ|Ô|€LÝ”8Ð@×HÒHÈÐT_Ð`aÔTb×SiÒSiÐjmÑSnÔSnÐpqÔRrÐs~ð@AôtBñCôCñDôD€Là×&Ò&Ñ(Ô(€IØ×&Ò&Ñ(Ô(€IØ
•s˜=Ñ)Ô)¨1¨1¨1¨a¨a¨a°Ð2Ô
3€FØ
•s˜=Ñ)Ô)¨1¨1¨1¨a¨a¨a°Ð2Ô
3€FÝ+¨F°FÑ;Ô;ÐÝ„JÐ!¨Ð/Ñ/Ô/Ð/Ý„IÐB×JÒJÈ=ÐZeÐfgÔZhÑiÔiÑjÔjÐjÝ„HˆUO„O€OÝ„HJ„J€Jà˜%ÒÐÝ"%¤(Ð,@×+HÒ+HÈÐYcÑ+dÔ+dÑ"eÔ"eÐØ6×@Ò@ÑBÔBÐØ˜?¨A¨A¨A¨q¨q¨q°!Ð3Ô4ˆØ% o°q°q°q¸!¸!¸!¸QÐ&>Ô?ˆÝ/°¸Ñ?Ô?ÐÝŒ
Ð%¨FÐ3Ñ3Ô3Ð3ÝŒ	ÐS×[Ò[Ð\kðnBônHðIJônKðMWñXôXñ	Yô	Yð	YÝŒ‰ŒˆÝŒ‰
Œ
ˆ
ˆ
ˆ
ð	 Ðrcó¤	—gggggf\}}}}	}
|g}td¦«td|¦«t|¦«D]b\}}td¦«tdd |¦«¦«t|||¦«}
t	||¦«\}}}tt
j||z
¦«dz¦«|z}|dkrg|dkr|||dz…}|
||dz…}nFt
j||||dz…fd¬	¦«}t
j||
||dz…fd¬	¦«}|d
kr*| 	|¦«| 	|
¦«| 	|¦«|	 	|¦«td¦«Œdt
j
|¦«}t
j
|¦«}| d¦«}|dz}t
j|dkdd¦«}td
¦«td| 
¦«¦«td¦«tdt
j|¦«¦«td¦«|d
kr’t
j|t!|¦«|jdzddf¦«}t
j|t!|¦«|jdzddf¦«}t
j|d¬	¦«}t
j|d¬	¦«}|dkr,t
j|d¬	¦«}t
j|d¬	¦«}|dkrbt
j|jddddftj¬¦«}t+|jd¦«D]e}||dd…dd…df}t-j|¦«}| dt,j¦«}t
j
|¦«||dd…dd…df<Œft
j|jddddftj¬¦«}t+|jd¦«D]e}||dd…dd…df}t-j|¦«}| dt,j¦«}t
j
|¦«||dd…dd…df<Œf|}|}td|j¦«td|j¦«|||fS)Nú
z+Patient Scan Data Folders Included in Run: zSegmentation Mask: z{}rTrrsrTFÚfloat32gào@zScans Normalized! [0-1]r{zMasks Binarised! [0,1]zLabels in the mask are : rÃr™é)Údtype)rþrþz,Training Scans Input Shape (Full 3D Stack): z,Training Masks Input Shape (Full 3D Stack): )r@Ú	enumeraterr”rårr
r¨Úconcatenater-r‚ÚastyperÏrtÚuniquerrr	Úexpand_dimsÚemptyrýr€rÚ	fromarrayrÚBILINEARÚuint8)rˆÚfilename_labelsr‰Útotal_slices_raw_dataÚDataOnlyAOIÚCroppingÚtrain_mask_tibia_labelsr’Ústart_slices_aoiÚend_slices_aoiÚslice_aoi_rangesr´rµÚ
training_scanràrºr»Úmedian_aoi_indexÚtraining_scans_resizedrÚinput_imageÚ	pil_imageÚ
resized_imageÚtrain_mask_tibia_labels_resizeds                        rÚ
preprocessingrse€ØceÐgiÐkmÐoqÐsuÐcuÑ_И^Ð-=¸~ÐO_Ø&Ð'€OÝ	ˆ$K„K€KÝ	Ð
7¸ÑAÔAÐAå!*¨?Ñ!;Ô!;ðñшˆ~Ý
ˆd‰ŒˆÝ
Ð# T§[¢[°Ñ%@Ô%@ÑBÔBÐBå-¨j¸'À%¼.ÑIÔIˆ
ÝEQÐR\Ð^lÑEmÔEmÑBÐ Ð"2°Nݝrœv nÐ7GÑ&GÑHÔHÈ1ÑLÑMÔMÐP`Ñ`Ðà˜$ÒÐØ˜’

Ø*BÐDTÐWeÐfgÑWgÐChÔ*iÐ'Ø!.Ð0@À>ÐRSÑCSÐ/TÔ!Uå*,¬.Ð:QÐSkÐm}ðAOðPQñAQðmRôTSð:Tð[\ð+]ñ+]ô+]Ð'Ý!#¤°ÀÐP`ÐcqÐrsÑcsÐOtÔAuÐ0vÐ}~Ð!Ñ!Ô!à˜5Ò Ð Ø#×*Ò*Ð+CÑDÔDÐDØ×!Ò! -Ñ0Ô0Ð0à×ÒÐ 0Ñ1Ô1Ð1Ø×Ò˜nÑ-Ô-Ð-å
ˆd‰Œˆ‰å œhÐ'>Ñ?Ô?ÐÝ”X˜nÑ-Ô-€Nð$×*Ò*¨9Ñ5Ô5€NؐdÑ€NÝ œhÐ'>À!Ò'CÀQÈÑJÔJÐÝ	Ð
#Ñ$Ô$Ð$Ý	Ð
/°×1CÒ1CÑ1EÔ1EÑFÔFÐFÝ	Ð
"Ñ#Ô#Ð#Ý	Ð
%¥r¤yÐ1HÑ'IÔ'IÑJÔJÐJÝ	ˆ$K„K€KàuÒÐÝœ NµS¸±\´\ÀNÔDXÐYZÔD[Ñ5[Ð]`ÐbeÐ4fÑgÔgˆÝ"$¤*Ð-DÅsÈ?ÑG[ÔG[Ð^uÔ^{Ð|}Ô^~ÑG~ðADðFIðGJñ#Kô#KÐÝœ¨¸RÐ@Ñ@Ô@ˆÝ"$¤.Ð1HÈrÐ"RÑ"RÔ"RÐàtÒÐÝœ¨¸RÐ@Ñ@Ô@ˆÝ"$¤.Ð1HÈrÐ"RÑ"RÔ"RÐð	DÒÑå!#¤¨>Ô+?ÀÔ+BÀCÈÈaÐ*PÕXZÔXbÐ!cÑ!cÔ!cÐݐ~Ô+¨AÔ.Ñ/Ô/ð	Ið	IˆAØ(¨¨A¨A¨A¨q¨q¨q°!¨Ô4ˆKÝœ¨Ñ4Ô4ˆIØ%×,Ò,¨Z½¼ÑHÔHˆMÝ13´¸-Ñ1HÔ1HÐ" 1 a a a¨¨¨¨A :Ñ.Ð.õ+-¬(Ð4KÔ4QÐRSÔ4TÐVYÐ[^Ð`aÐ3bÕjlÔjrÐ*sÑ*sÔ*sÐ'ÝÐ.Ô4°QÔ7Ñ8Ô8ð	Rð	RˆAØ1°!°Q°Q°Q¸¸¸¸1°*Ô=ˆKÝœ¨Ñ4Ô4ˆIØ%×,Ò,¨Z½¼ÑHÔHˆMÝ:<¼(À=Ñ:QÔ:QÐ+¨A¨q¨q¨q°!°!°!°Q¨JÑ7Ð7à/ˆØ"AÐå	Ð
8¸.Ô:NÑOÔOÐOÝ	Ð
8Ð:QÔ:WÑXÔXÐXàÐ2Ð4DÐDÐDr)'Únumpyr
r+r<Ú	SimpleITKr×Úpandasr†r£Ú	pyntcloudrÚskimage.transformrrIÚmatplotlib.pyplotÚpyplotrdrÚnibabelrêÚreÚcv2ÚPILrrr#r)r4rFrRrXrqryr”r½rÔrårúr©rrú<module>r%sÃðàÐÐÐØ	€	€	€	Ø€€€ØÐÐÐØÐÐÐØ€€€ØÐÐÐÐÐØ$Ð$Ð$Ð$Ð$Ð$Ø
€
€
€
ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐØ	€	€	€	Ø
€
€
€
ØÐÐÐÐÐððððððð"ðððððð
ð
ð
ððððððð	ð	ð	ðððððððF7Ið7Ið7IðvðððB[ð[ð[ð6ððð4OEðOEðOEðOEðOEr