Diff of /dataprocess/xmlopt.py [000000] .. [f77492]

Switch to side-by-side view

--- a
+++ b/dataprocess/xmlopt.py
@@ -0,0 +1,148 @@
+'''
+Created by WangQL
+
+6/27/2018
+
+operation for xml files
+get structure of xml files from LIDC
+'''
+try: 
+  import xml.etree.cElementTree as ET 
+except ImportError: 
+  import xml.etree.ElementTree as ET 
+import sys,os
+import matplotlib.pyplot as plt
+import scipy.misc
+import numpy as np
+
+def getEdgeMap(file, zloc, nodule_list):
+
+  tree = ET.parse(file) 
+  root = tree.getroot() 
+
+  try:
+    rangelist = []
+    Img=np.zeros((512,512))
+
+    for onenoduleid in nodule_list:
+      rangelist, Img = getEdgeMap_id(root, onenoduleid, zloc)
+      if rangelist != None:
+        break
+      
+    # scipy.misc.imsave(str(j) + '.png', Img)
+    # print('flag: ', flag)
+    signtemp = False
+
+    lnglist = []
+    latlist = []
+    for i in range(len(rangelist)-1):
+      lnglist.append(rangelist[i][0])
+      latlist.append(rangelist[i][1])
+
+    # print(nodule_list[0])
+    # print(lnglist)
+    # print(latlist)
+    maxlng = max(lnglist)
+    minlng = min(lnglist)
+    maxlat = max(latlist)
+    minlat = min(latlist)
+
+    for a in range(minlng, maxlng):
+      for b in range(minlat, maxlat):
+        point = [a, b]
+        if isPointinPolygon(point, rangelist, maxlng, minlng, maxlat, minlat):
+          Img[b][a] = 1
+  except:
+    signtemp = True
+
+  return Img, signtemp
+
+
+def getEdgeMap_id(root, nodule_list, zloc):
+  flag = True
+  j=0
+  coo2=[]
+  sign = 0
+
+  rangelist = []
+  flag = True
+  Img=np.zeros((512,512))
+  for ResponseHeader in root:
+    # print('child')
+    # print(ResponseHeader.tag)
+    if not flag:
+      break
+    for readingSession in ResponseHeader:
+      if not flag:
+        break
+      # print('    ',readingSession.tag)
+      for unblindedReadNodule in readingSession:
+        if not flag:
+          break
+        # print('        ',unblindedReadNodule.tag)
+        if unblindedReadNodule.tag == '{http://www.nih.gov}noduleID':
+          id = unblindedReadNodule.text.strip()
+          try:
+            input_id = int(nodule_list)
+            id = int(id)
+          except:
+            input_id = str(nodule_list)
+            id = str(id)
+          # print(id_i, id)
+          if id == input_id:
+            # print('here here')
+            for unblindedReadNodule in readingSession:
+              if  unblindedReadNodule.tag=='{http://www.nih.gov}roi':
+                coo=[]
+                hoo=[]
+                hoo1=[]
+                j+=1
+                for roi in unblindedReadNodule:
+                  if not flag:
+                    break
+                  if roi.tag == '{http://www.nih.gov}imageZposition':
+                    if abs(float(zloc) - float(roi.text)) < 0.001:
+                      # existsign = True
+                      # print("float(zloc)")
+                      # print(float(roi.text))
+                      for roi in unblindedReadNodule:
+                        if roi.tag=='{http://www.nih.gov}edgeMap':
+                          n=0
+                          coo1=[]
+                          for edgeMap in roi: 
+                              if n:
+                                hoo.append(int(edgeMap.text))
+                              else:
+                                hoo1.append(int(edgeMap.text))
+                              n=1
+                              coo1.append(int(edgeMap.text))
+                          coo.append(coo1)
+                          coo2.append(coo1)
+                      for i in range(len(coo)):
+                        Img[coo[i][1]][coo[i][0]]=1
+                      flag = False
+                      rangelist = coo
+  return rangelist, Img
+
+def isPointinPolygon(point, rangelist, maxlng, minlng, maxlat, minlat):  #[[0,0],[1,1],[0,1],[0,0]] [1,0.8]
+
+    if (point[0] > maxlng or point[0] < minlng or
+        point[1] > maxlat or point[1] < minlat):
+        return False
+    count = 0
+    point1 = rangelist[0]
+    for i in range(1, len(rangelist)):
+        point2 = rangelist[i]
+        if (point[0] == point1[0] and point[1] == point1[1]) or (point[0] == point2[0] and point[1] == point2[1]):
+            return False
+        if (point1[1] < point[1] and point2[1] >= point[1]) or (point1[1] >= point[1] and point2[1] < point[1]):
+            point12lng = point2[0] - (point2[1] - point[1]) * (point2[0] - point1[0])/(point2[1] - point1[1])
+            if (point12lng == point[0]):
+                return False
+            if (point12lng < point[0]):
+                count +=1
+        point1 = point2
+    if count%2 == 0:
+        return False
+    else:
+        return True
\ No newline at end of file