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