Diff of /TumorDetection.py [000000] .. [03d98b]

Switch to side-by-side view

--- a
+++ b/TumorDetection.py
@@ -0,0 +1,164 @@
+from sklearn.model_selection import train_test_split
+from sklearn.neighbors import KNeighborsClassifier
+import pandas as pd
+from functions import *
+from skimage import morphology, measure, filters
+from skimage.measure import label, regionprops
+from sklearn.cluster import KMeans
+import matplotlib.pyplot as pyplot
+from skimage.feature import greycomatrix, greycoprops
+from sklearn.neural_network import MLPClassifier
+from sklearn import cross_validation
+import pickle
+
+path = "featuresdicom.xlsx"
+INPUT_SCAN_FOLDER = "G:\\final\\dicom final\\database\\malignant\\LIDC-IDRI-0072\\"
+
+fileDICOMFeatureList = pd.read_excel(path, header=None)
+
+matrixFeatures = np.array((fileDICOMFeatureList.as_matrix())[1:, :])
+yMatrixFeatures = matrixFeatures[:, 7]
+xMatrifFeatures = matrixFeatures[:, 0:7]
+X_train, X_test, y_train, y_test = train_test_split(xMatrifFeatures, yMatrixFeatures, test_size=0.2, random_state=10)
+y_train = y_train.astype('int')
+y_test = y_test.astype('int')
+
+# clf = MLPClassifier(hidden_layer_sizes=1000,solver='lbfgs')
+#
+# clf.fit(X_train, y_train)
+modelFileMLP = 'mlpmodel.sav'
+# pickle.dump(clf,open(filename,'wb'))
+
+modelMLP = pickle.load(open(modelFileMLP, 'rb'))
+# print(clf)
+MLPscore = modelMLP.score(X_train, y_train)
+MLPtest = modelMLP.predict(X_test)
+
+print('MLP training=', MLPscore * 100)
+print("MLP testing accuracy=", np.mean(MLPtest == y_test) * 100)
+KNNmodel = KNeighborsClassifier()
+kfold = cross_validation.KFold(n=len(X_train), n_folds=10, random_state=10)
+cv_results = cross_validation.cross_val_score(KNNmodel, X_train, y_train, cv=kfold, scoring='accuracy')
+message = "%s: %f " % ("KNN cross validation accuracy", cv_results.mean())
+print(message)
+K_value = 3
+neigh = KNeighborsClassifier(n_neighbors=K_value, weights='uniform', algorithm='auto')
+neigh.fit(X_train, y_train)
+KNNpredictValue = neigh.predict(X_test)
+print("KNN testing accuracy=", np.mean(KNNpredictValue == y_test) * 100)
+
+listProperties = ['contrast', 'dissimilarity', 'homogeneity', 'ASM', 'energy']
+listFeatures = ['contrast', 'dissimilarity', 'homogeneity', 'ASM', 'energy', 'mean', 'stddev', 'label']
+properties = np.zeros(6)
+
+# glcmMatrix = []
+final = []
+arrayOriginalImages = dicomRead(INPUT_SCAN_FOLDER)
+test3D(ConstPixelDims = arrayOriginalImages)
+tumorArea = []
+arrayTumorContour = []
+for z in range(125, 180):
+
+    tempImageSlice = arrayOriginalImages[z][:][:]
+    # img=img.pixel_array
+    #imgg = tempImageSlice
+    tempImageMask = segment(tempImageSlice)
+    tempImageMask = np.where(tempImageMask == 255, 1, 0)
+    # pyplot.imshow(tempImageMask, cmap='gray')
+    # pyplot.show()
+    tempImageConvMask = tempImageMask * tempImageSlice
+    tempImageConvMask = (tempImageConvMask / 256).astype('uint8')
+    ImageConvMask = tempImageConvMask
+    tempImageSliceMean = arrayOriginalImages[z][:][:].mean()
+    tempImageSliceStdDev = arrayOriginalImages[z][:][:].std()
+    glcmMatrix = (greycomatrix(tempImageConvMask, [1], [0], levels=2 ** 8))
+
+    for j in range(0, len(listProperties)):
+        properties[j] = (greycoprops(glcmMatrix, prop=listProperties[j]))
+
+    arrayFeatureValues = np.array([[properties[0], properties[1], properties[2], properties[3], properties[4], tempImageSliceMean, tempImageSliceStdDev]])
+
+    # pyplot.imshow(imgg,cmap='gray')
+    # pyplot.show()
+    # df = pd.DataFrame(final, columns=listFeatures)
+
+    y_pred = neigh.predict(arrayFeatureValues)
+    tempSegmentedImage = tempImageConvMask
+    print(y_pred)
+    if (y_pred == 2 or y_pred == 1):
+        segmented1 = tempSegmentedImage
+
+        tempSegmentedImageMean = np.mean(tempSegmentedImage)
+        tempSegmentedImageStdDev = np.std(tempSegmentedImage)
+        segmentedImage = tempSegmentedImage - tempSegmentedImageMean
+        segmentedImage = tempSegmentedImage / (tempSegmentedImageStdDev + 0.00001)
+        # pyplot.imshow(imgg,cmap='gray')
+        # pyplot.show()
+        # hist = pyplot.hist(segmented.flatten(), bins=200)
+
+        ROI = segmentedImage[100:400, 100:400]
+        ROImean = np.mean(ROI)
+        ROImaxv = np.max(tempSegmentedImage)
+        ROIminv = np.min(tempSegmentedImage)
+        tempSegmentedImage[tempSegmentedImage == ROImaxv] = tempSegmentedImageMean
+        tempSegmentedImage[tempSegmentedImage == ROIminv] = tempSegmentedImageMean
+        ROIkmeans = KMeans(n_clusters=3).fit(np.reshape(ROI, [np.prod(ROI.shape), 1]))
+        ROIkmeanscenters = sorted(ROIkmeans.cluster_centers_.flatten())
+        ROIkmeansthreshold = np.mean(ROIkmeanscenters)
+        threshROIImg = np.where(segmentedImage >= ROIkmeansthreshold, 1.0, 0.0)
+        threshROIImg = morphology.erosion(threshROIImg, np.ones([9, 9]))
+        threshROIImg = morphology.dilation(threshROIImg, np.ones([9, 9]))
+        # pyplot.imshow(threshROIImg, cmap='gray')
+        # pyplot.show()
+        tumorContours = measure.find_contours(threshROIImg, 0.8)
+
+        # Display the image and plot all contours found
+        tempTumorArea = []
+        if (tumorContours):
+            contourLabels = label(threshROIImg)
+            contourRegions = regionprops(contourLabels, threshROIImg)
+            arrayTumorContour.append(tumorContours)
+            tempTumorArea = (tempTumorArea.append(contourRegions[i].area) for i in range(len(contourRegions)))
+            tempTumorArea = (contourRegions[0].area)
+            tumorArea.append(tempTumorArea)
+            fig, ax = pyplot.subplots()
+            ax.imshow(tempImageSlice, interpolation='nearest', cmap=pyplot.cm.gray)
+
+            for n, singleContour in enumerate(tumorContours):
+                ax.plot(singleContour[:, 1], singleContour[:, 0], linewidth=2)
+
+            ax.axis('image')
+            ax.set_xticks([])
+            ax.set_yticks([])
+            # threshROIImg = threshROIImg * imgg
+            pyplot.imshow(tempImageSlice, cmap='gray')
+            pyplot.show()
+
+
+            if (y_pred == 1):
+                print(str(z) + ' Image is tumorous')
+                print(tempTumorArea.max())
+                # if(tempTumorArea<Put area here):
+                # elif(areaa<Put area here):
+                # elif(areaa < Put area here):
+            elif (y_pred == 2):
+                print(str(z) + ' Image is tumorous')
+                print(tempTumorArea.max())
+                # if(areaa<Put area here):
+                # elif(areaa<Put area here):
+                # elif(areaa < Put area here):
+        else:
+            print(str(z) + ' Image is non tumorous')
+    else:
+        print(str(z)+' Image is non tumorous')
+
+if (len(tumorArea)):
+    volume = 0;
+    for i in range(0, len(tumorArea) - 1):
+        if (i == 0):
+            volume = volume + (((tumorArea[i] + 0) * 1.25) / 2)
+        else:
+            volume = volume + (((tumorArea[i] + tumorArea[i - 1]) * 1.25) / 2)
+    print(volume)
+
+