{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![](https://axisimagingnews.com/wp-content/uploads/2020/10/COVID19.jpg)\n\nSource: https://axisimagingnews.com/imaging-news/associations/siim-fisabio-rsna-host-machine-learning-challenge-covid-19-detection-localization\n\n\n# The CoVID-19 crisis \nIn the past year has affected the world. \n\nCurrently, COVID-19 can be diagnosed, it can take a few hours and sometimes days before results are back.\n\nSo I try to make guidline to help radiologist differentiate COVID-19 from other types of infection.\n\nLet's drive right in!\n","metadata":{}},{"cell_type":"markdown","source":"#### Study-level labels\n\nStudies in the test set contain labels so They are as follows:\n        \n            \"negative\", \"typical\", \"indeterminate\", \"atypical\"\n\n","metadata":{}},{"cell_type":"markdown","source":"### Content\n\n**NEGATIVE FOR PNEUMONIA**\n\n    - No lung opacities\n\n**TYPICAL APPEARANCE**\n\n    - Multifocal bilateral, peripheral opacities with rounded morphology, lower lung–predominant distribution\n\n**INDETERMINATE APPEARANCE**\n\n    - Absence of typical findings AND unilateral, central or upper lung predominant distribution\n\n**ATYPICAL APPEARANCE**\n\n    - Pneumothorax, pleural effusion, pulmonary edema, lobar consolidation, solitary lung nodule or mass, diffuse tiny nodules, cavity\n\n##### 1. Import Libraries\n##### 2. Collect data\n##### 3. Review\n##### 4. Data Exploration (label group)\n\n      * Negative for Pneumonia\n\n      * Typical Appearance\n\n      * Indeterminate Appearance\n\n      * Atypical_Appearance\n ##### 5. Data Exploation (Photometric Interpretation and Modality types.)\n \n      * MONOCROME1 & CR\n\n      * MONOCROME1 & DX\n\n      * MONOCROME2 & CR\n\n      * MONOCROME2 & DX\n\n ##### 6. Ranking of Gray of MONOCROME1 & CR\n \n \n\n        ","metadata":{}},{"cell_type":"markdown","source":"## 1. Import Libraries","metadata":{}},{"cell_type":"code","source":"!pip install python-gdcm -q","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport glob\nfrom tqdm import tqdm\nimport matplotlib\nimport matplotlib.pyplot as plt\nfrom matplotlib import cm, colors\nfrom matplotlib.gridspec import GridSpec\n%matplotlib inline\n\nfrom functools import reduce\nimport ast\nimport seaborn as sns\n\nfrom IPython.display import Image, clear_output\nimport torch\nfrom shutil import copyfile\n\n\n\nfrom collections import Counter\n\nfrom math import *\n\nfrom scipy.linalg import norm\nimport scipy.ndimage\n\nfrom ipywidgets.widgets import *\nimport ipywidgets as widgets\n\nimport plotly\nimport plotly.express as px\nfrom plotly.graph_objs import *\n\n#import chart_studio.plotly as py\n\nfrom mpl_toolkits.mplot3d import Axes3D\n\nimport cv2\n\n\nfrom skimage import io, img_as_float, img_as_ubyte, color, exposure, measure, morphology, data, transform\nfrom skimage.measure import label, regionprops\nfrom skimage.color import rgb2lab, deltaE_cie76\nfrom skimage.util import compare_images \n\nfrom sklearn.cluster import KMeans\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import metrics\n\nimport pydicom \nfrom pydicom.data import get_testdata_file\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nfrom pydicom import dcmread\nimport gdcm\n\n%matplotlib inline\n\nimport os\n    #for dirname, _, filenames in os.walk('/kaggle/input'):\n#    for filename in filenames:\n#        print(os.path.join(dirname, filename))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2. Collect data","metadata":{}},{"cell_type":"markdown","source":"#### Read Files","metadata":{}},{"cell_type":"code","source":"train_image_level = pd.read_csv('/kaggle/input/siim-covid19-detection/train_image_level.csv')\ntrain_study_level = pd.read_csv('/kaggle/input/siim-covid19-detection/train_study_level.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print( \"'train_image_level's data has \",train_image_level.shape[0], 'samples')\nprint( \"& 'train_study_level's data has \",train_study_level.shape[0], 'samples')","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_image_level.head(3)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_study_level.head(3)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Merge study csv to image csv ","metadata":{}},{"cell_type":"code","source":"#Merge study csv to image csv.\ntrain_study_level['StudyInstanceUID'] = train_study_level['id'].apply(lambda x: x.replace('_study', ''))\ntrain_image_level = train_image_level.merge(train_study_level, on='StudyInstanceUID')\ncomplete_data = train_image_level.drop(['id_x','id_y'], axis=1)\ncomplete_data.head(3)","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Merge image path to the train_image_level dataframe","metadata":{}},{"cell_type":"code","source":"# Merge image path to the train_image_level dataframe.\ntrain_dir = '/kaggle/input/siim-covid19-detection/train'\ntest_dir = '/kaggle/input/siim-covid19-detection/test'\n\ntraining_paths = []\n\nfor sid in tqdm(complete_data['StudyInstanceUID']):\n    training_paths.append(glob.glob(os.path.join(train_dir,sid+\"/*/*\"))[0])\n\ncomplete_data['path'] = training_paths\n\ncomplete_data.head(3)","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Read full text in table\npd.set_option('display.max_colwidth', -1)\ncomplete_data.head(3)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Read image file (.dcm)","metadata":{}},{"cell_type":"code","source":"#training_paths = []\nds = pydicom.dcmread(training_paths[0])\nds","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n#### Add some DCM's conlumns to \"Complete Data\"","metadata":{}},{"cell_type":"code","source":"def process_dicom(dicom_obj):\n    pixel_data=(0x7fe0, 0x0010) #ignore the pixel data\n    data_dict={}\n    for x in dicom_obj:\n        if x.tag==pixel_data:\n            continue\n        value=dicom_obj[x.tag].value\n        name=x.name\n        data_dict[name]=value\n    return data_dict","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"columns_reordered = list(complete_data.columns)\ncomplete_data = complete_data[columns_reordered]\n\ndicom_dict={}\nneeded_columns=[\"Patient ID\",\"Patient's Sex\",\"Body Part Examined\",\"Imager Pixel Spacing\",\n                \"Photometric Interpretation\",\"Modality\"]\n# \"Study Instance UID\",\"Study ID\"\n\nfor i,x in tqdm(complete_data.iterrows()):\n    dicom_obj=pydicom.dcmread(x['path'],stop_before_pixels=True)\n    dicom_obj_dict=process_dicom(dicom_obj)\n    for key in dicom_obj_dict:\n        if type(dicom_obj_dict[key])==list:\n            continue\n        if key in needed_columns:\n            if key not in dicom_dict:\n                dicom_dict[key]=[]\n            dicom_dict[key].append(dicom_obj_dict[key])\n            \nfor col in needed_columns:\n    complete_data[col]=dicom_dict[col]\n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Review","metadata":{}},{"cell_type":"markdown","source":"#### Review complete file","metadata":{}},{"cell_type":"code","source":"complete_data.head(1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Review Patient's Sex","metadata":{}},{"cell_type":"code","source":"Negative = complete_data[complete_data['Negative for Pneumonia']==1]\nTypical = complete_data[complete_data['Typical Appearance']==1]\nIndeterminate = complete_data[complete_data['Indeterminate Appearance']==1]\nAtypical = complete_data[complete_data['Atypical Appearance']==1]\n\ndata = pd.DataFrame({'Typical Appearance': Typical[\"Patient's Sex\"].value_counts(),\n              'Negative for Pneumonia': Negative[\"Patient's Sex\"].value_counts(),\n              'Indeterminate Appearance': Indeterminate[\"Patient's Sex\"].value_counts(),\n              'Atypical Appearance': Atypical[\"Patient's Sex\"].value_counts()\n             })\ndata_t = data.transpose()\nax = data_t.plot.bar(stacked = True, width=0.8,figsize=(15,5), title=\"Annotation Per Class = 1\")\n\nplt.grid(axis='y')\nplt.xticks(rotation=0)\nplt.show()","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Review Body Part Examined\n##### I need to review some image of each \"Body Part Examined\"","metadata":{}},{"cell_type":"code","source":"complete_data['Body Part Examined'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"##### Check\n","metadata":{}},{"cell_type":"markdown","source":"###### after check each body part examined, ABDOMEN image can not show.\n###### there are some error.\n###### so I delete ABDOMEN's data from complete_data.","metadata":{}},{"cell_type":"code","source":"#complete_data = complete_data[complete_data['Body Part Examined']!='ABDOMEN']\n#complete_data['Body Part Examined'].value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Review Image","metadata":{}},{"cell_type":"code","source":"label_appearance = list(complete_data.columns)[3:7]\nrow_img = 2\ncol_img = len(label_appearance)\n\nc= 0\ncolor = 'gray'\nds_pos = [0 for p in range(row_img)]\n\nfig,ax = plt.subplots(row_img,col_img, figsize=(25,row_img*4))\n\nfor i in label_appearance:\n    for r in range(row_img):\n        link = complete_data[complete_data[i] == 1]['path'].iloc[r]\n        ds_pos[r] = pydicom.dcmread(link).pixel_array\n        ax[r,c].imshow(ds_pos[r], cmap=color)\n        \n      \n    ax[0,c].set_title(i, font='Serif', fontsize=20)\n    c +=1","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4. Data Exploration (lebel group)","metadata":{}},{"cell_type":"markdown","source":"#### Photometric Interpretation have 2 types.\n        * MONOCHROME1 : indicates that the greyscale ranges from bright to dark with ascending pixel values\n        * MONOCHROME2 : ranges from dark to bright with ascending pixel values.\n        \n#### Modality have 2 types. \n        * CR\n        * DX\n    \n   refer: **Digital Radiography versus Computed Radiography**\n   \n   https://www.news-medical.net/health/Digital-Radiography-versus-Computed-Radiography.aspx\n\n#### I will review by seperate each label appearances with Photometric Interpretation and Modality","metadata":{}},{"cell_type":"markdown","source":"### Negative for Pneumonia group ","metadata":{}},{"cell_type":"code","source":"Negative_Pneumonia = complete_data[complete_data['Negative for Pneumonia']==1]\nNegative_Pneumonia1_cr = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Negative_Pneumonia['Modality'] == 'CR')].reset_index()\nNegative_Pneumonia1_dx = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Negative_Pneumonia['Modality'] == 'DX')].reset_index()\nNegative_Pneumonia2_cr = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Negative_Pneumonia['Modality'] == 'CR')].reset_index()\nNegative_Pneumonia2_dx = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Negative_Pneumonia['Modality'] == 'DX')].reset_index()\n\nNagative = [Negative_Pneumonia1_cr, Negative_Pneumonia1_dx, Negative_Pneumonia2_cr, Negative_Pneumonia2_dx]","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"row = 2\ncol = len(Nagative)\npos = 0\ni = 0\n#fig, ax = plt.subplots(row,col, figsize=(25,row*5))\n\nfor data in Nagative:\n    for pos in range(row): \n        link = data['path'].iloc[pos]\n        ds_pos = pydicom.dcmread(link).pixel_array\n        #ax[pos,i].imshow(ds_pos,cmap='gray')\n    i += 1\n    \n  #  ax[0,0].set_title('Negative with MONOCHROME1 & CR', font='Serif', fontsize=15)\n  #  ax[0,1].set_title('Negative with MONOCHROME1 & DX', font='Serif', fontsize=15)\n  #  ax[0,2].set_title('Negative with MONOCHROME2 & CR', font='Serif', fontsize=15)\n  #  ax[0,3].set_title('Negative with MONOCHROME2 & DX', font='Serif', fontsize=15)\n        \n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Typical group \n","metadata":{}},{"cell_type":"code","source":"Typical_Appearance = complete_data[complete_data['Typical Appearance'] == 1].reset_index()\nTypical_Appearance1_cr = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Typical_Appearance['Modality'] == 'CR')].reset_index()\nTypical_Appearance1_dx = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Typical_Appearance['Modality'] == 'DX')].reset_index()\nTypical_Appearance2_cr = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Typical_Appearance['Modality'] == 'CR')].reset_index()\nTypical_Appearance2_dx = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Typical_Appearance['Modality'] == 'DX')].reset_index()\n\ntypical = [Typical_Appearance1_cr,Typical_Appearance1_dx,Typical_Appearance2_cr,Typical_Appearance2_dx]","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"row = 2\ncol = len(typical)\npos = 0\ni = 0\n#fig, ax = plt.subplots(row,col, figsize=(25,row*5))\n\nfor data in typical:\n    for pos in range(row): \n        \n        link = data['path'].iloc[pos]\n        ds_pos = [0 for p in range(pos+1)]\n        ds_pos = pydicom.dcmread(link).pixel_array\n\n        \n        #ax[pos,i].imshow(ds_pos,cmap='gray')\n    i += 1\n    \n #   ax[0,0].set_title('Typical with MONOCHROME1 & CR', font='Serif', fontsize=15)\n #   ax[0,1].set_title('Typical with MONOCHROME1 & DX', font='Serif', fontsize=15)\n #   ax[0,2].set_title('Typical with MONOCHROME2 & CR', font='Serif', fontsize=15)\n #   ax[0,3].set_title('Typical with MONOCHROME2 & DX', font='Serif', fontsize=15)\n        \n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Indeterminate group","metadata":{}},{"cell_type":"code","source":"Indeterminate_Appearance = complete_data[complete_data['Indeterminate Appearance'] == 1].reset_index()\nIndeterminate_Appearance1_cr = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                                        (Indeterminate_Appearance['Modality'] == 'CR')].reset_index()\nIndeterminate_Appearance1_dx = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                                        (Indeterminate_Appearance['Modality'] == 'DX')].reset_index()\nIndeterminate_Appearance2_cr = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                                        (Indeterminate_Appearance['Modality'] == 'CR')].reset_index()\nIndeterminate_Appearance2_dx = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                                        (Indeterminate_Appearance['Modality'] == 'DX')].reset_index()\nindeterminate = [Indeterminate_Appearance1_cr,Indeterminate_Appearance1_dx,Indeterminate_Appearance2_cr,Indeterminate_Appearance2_dx]","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"row = 2\ncol = len(indeterminate)\npos = 0\ni = 0\n#fig, ax = plt.subplots(row,col, figsize=(25,row*5))\n\nfor data in indeterminate:\n    for pos in range(row): \n        \n        link = data['path'].iloc[pos]\n        ds_pos = [0 for p in range(pos+1)]\n        ds_pos = pydicom.dcmread(link).pixel_array\n\n        \n       # ax[pos,i].imshow(ds_pos,cmap='gray')\n    i += 1\n    \n    #ax[0,0].set_title('Indeterminate with MONOCHROME1 & CR', font='Serif', fontsize=15)\n    #ax[0,1].set_title('Indeterminate with MONOCHROME1 & DX', font='Serif', fontsize=15)\n    #ax[0,2].set_title('Indeterminate with MONOCHROME2 & CR', font='Serif', fontsize=15)\n    #ax[0,3].set_title('Indeterminate with MONOCHROME2 & DX', font='Serif', fontsize=15)","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Atypical group","metadata":{}},{"cell_type":"code","source":"Atypical_Appearance = complete_data[complete_data['Atypical Appearance'] == 1].reset_index()\nAtypical_Appearance1_cr = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')&\n                                             (Atypical_Appearance['Modality'] == 'CR')].reset_index()\nAtypical_Appearance1_dx = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')&\n                                             (Atypical_Appearance['Modality'] == 'DX')].reset_index()\nAtypical_Appearance2_cr = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME2')&\n                                             (Atypical_Appearance['Modality'] == 'CR')].reset_index()\nAtypical_Appearance2_dx = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME2')&\n                                             (Atypical_Appearance['Modality'] == 'DX')].reset_index()\natypical = [Atypical_Appearance1_cr,Atypical_Appearance1_dx,Atypical_Appearance2_cr,Atypical_Appearance2_dx]","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"row = 2\ncol = len(atypical)\npos = 0\ni = 0\n#fig, ax = plt.subplots(row,col, figsize=(25,row*5))\n\nfor data in atypical:\n    for pos in range(row): \n        \n        link = data['path'].iloc[pos]\n        ds_pos = [0 for p in range(pos+1)]\n        ds_pos = pydicom.dcmread(link).pixel_array\n\n        \n       # ax[pos,i].imshow(ds_pos,cmap='gray')\n    i += 1\n    \n  #  ax[0,0].set_title('Atypical with MONOCHROME1 & CR', font='Serif', fontsize=15)\n  #  ax[0,1].set_title('Atypical with MONOCHROME1 & DX', font='Serif', fontsize=15)\n  #  ax[0,2].set_title('Atypical with MONOCHROME2 & CR', font='Serif', fontsize=15)\n  #  ax[0,3].set_title('Atypical with MONOCHROME2 & DX', font='Serif', fontsize=15)","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 5. Data Exploation (Photometric Interpretation and Modality types.)","metadata":{}},{"cell_type":"markdown","source":"### MONOCROME1 & CR","metadata":{}},{"cell_type":"code","source":"order = 3\ncolor = 'gray'\nfig, ax = plt.subplots(order,4, figsize=(30,order*7))\n\n\n####################################################\n#MONOCROME1 & CR\nNegative_Pneumonia1_cr = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Negative_Pneumonia['Modality'] == 'CR')].reset_index()\n\n\nfor pos in range(order):\n    \n \n    link = Negative_Pneumonia1_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    ax[pos,0].imshow(ds_pos[pos],cmap=color)      \n    ax[0,0].set_title('Negative', font='Serif', fontsize=20)\n\n\n####################################################\n#MONOCROME1 & CR\nTypical_Appearance1_cr = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Typical_Appearance['Modality'] == 'CR')].reset_index()\n\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Typical_Appearance1_cr.loc[pos,'boxes'])\n    link = Typical_Appearance1_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='g', fc='none', lw=3)\n        ax[pos,1].add_patch(p)\n    ax[pos,1].imshow(ds_pos[pos],cmap=color)      \n    ax[0,1].set_title('Typical', font='Serif', fontsize=20)\n\n####################################################\n#MONOCROME1 & CR\nIndeterminate_Appearance1_cr = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                                        (Indeterminate_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Indeterminate_Appearance1_cr.loc[pos,'boxes'])\n    link = Indeterminate_Appearance1_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='b', fc='none', lw=3)\n        ax[pos,2].add_patch(p)\n    ax[pos,2].imshow(ds_pos[pos],cmap=color)      \n    ax[0,2].set_title('Indeterminate', font='Serif', fontsize=20)\n    \n    \n####################################################\n#MONOCROME1 & CR\nAtypical_Appearance1_cr = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')&\n                                             (Atypical_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Atypical_Appearance1_cr.loc[pos,'boxes'])\n    link = Atypical_Appearance1_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='r', fc='none', lw=3)\n        ax[pos,3].add_patch(p)\n    ax[pos,3].imshow(ds_pos[pos],cmap=color)      \n    ax[0,3].set_title('Atypical', font='Serif', fontsize=20)\n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### MONOCROME1 & DX","metadata":{}},{"cell_type":"code","source":"order = 2\ncolor = 'gray'\nfig, ax = plt.subplots(order,4, figsize=(30,order*7))\n\n\n####################################################\n#MONOCROME1 & DX\nNegative_Pneumonia1_dx = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Negative_Pneumonia['Modality'] == 'DX')].reset_index()\n\n\nfor pos in range(order):\n    \n \n    link = Negative_Pneumonia1_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    ax[pos,0].imshow(img,cmap=color)      \n    ax[0,0].set_title('Negative', font='Serif', fontsize=20)\n\n\n####################################################\n#MONOCROME1 & DX\nTypical_Appearance1_dx = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                            (Typical_Appearance['Modality'] == 'DX')].reset_index()\n\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Typical_Appearance1_dx.loc[pos,'boxes'])\n    link = Typical_Appearance1_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='g', fc='none', lw=3)\n        ax[pos,1].add_patch(p)\n    ax[pos,1].imshow(img,cmap=color)      \n    ax[0,1].set_title('Typical', font='Serif', fontsize=20)\n\n####################################################\n#MONOCROME1 & DX\nIndeterminate_Appearance1_dx = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1') &\n                                                        (Indeterminate_Appearance['Modality'] == 'DX')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Indeterminate_Appearance1_dx.loc[pos,'boxes'])\n    link = Indeterminate_Appearance1_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='b', fc='none', lw=3)\n        ax[pos,2].add_patch(p)\n    ax[pos,2].imshow(img,cmap=color)      \n    ax[0,2].set_title('Indeterminate', font='Serif', fontsize=20)\n    \n    \n####################################################\n#MONOCROME1 & DX\nAtypical_Appearance1_dx = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')&\n                                             (Atypical_Appearance['Modality'] == 'DX')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Atypical_Appearance1_dx.loc[pos,'boxes'])\n    link = Atypical_Appearance1_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='r', fc='none', lw=3)\n        ax[pos,3].add_patch(p)\n    ax[pos,3].imshow(img,cmap=color)      \n    ax[0,3].set_title('Atypical', font='Serif', fontsize=20)\n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### MONOCROME2 & CR","metadata":{}},{"cell_type":"code","source":"order = 2\ncolor = 'gray'\nfig, ax = plt.subplots(order,4, figsize=(30,order*7))\n\n\n####################################################\n#MONOCROME2 & CR\nNegative_Pneumonia2_cr = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Negative_Pneumonia['Modality'] == 'CR')].reset_index()\n\n\nfor pos in range(order):\n    \n \n    link = Negative_Pneumonia2_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    ax[pos,0].imshow(img,cmap=color)      \n    ax[0,0].set_title('Negative', font='Serif', fontsize=20)\n\n\n####################################################\n#MONOCROME2 & CR\nTypical_Appearance2_cr = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Typical_Appearance['Modality'] == 'CR')].reset_index()\n\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Typical_Appearance2_cr.loc[pos,'boxes'])\n    link = Typical_Appearance2_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='g', fc='none', lw=3)\n        ax[pos,1].add_patch(p)\n    ax[pos,1].imshow(img,cmap=color)      \n    ax[0,1].set_title('Typical', font='Serif', fontsize=20)\n\n####################################################\n#MONOCROME2 & CR\nIndeterminate_Appearance2_cr = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                                        (Indeterminate_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Indeterminate_Appearance2_cr.loc[pos,'boxes'])\n    link = Indeterminate_Appearance2_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='b', fc='none', lw=3)\n        ax[pos,2].add_patch(p)\n    ax[pos,2].imshow(img,cmap=color)      \n    ax[0,2].set_title('Indeterminate', font='Serif', fontsize=20)\n    \n    \n####################################################\n#MONOCROME2 & CR\nAtypical_Appearance2_cr = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME2')&\n                                             (Atypical_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Atypical_Appearance2_cr.loc[pos,'boxes'])\n    link = Atypical_Appearance2_cr['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='r', fc='none', lw=3)\n        ax[pos,3].add_patch(p)\n    ax[pos,3].imshow(img,cmap=color)      \n    ax[0,3].set_title('Atypical', font='Serif', fontsize=20)\n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### MONOCROME2 & DX","metadata":{}},{"cell_type":"code","source":"order = 2\ncolor = 'gray'\nfig, ax = plt.subplots(order,4, figsize=(30,order*7))\n\n\n####################################################\n#MONOCROME2 & DX\nNegative_Pneumonia2_dx = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Negative_Pneumonia['Modality'] == 'DX')].reset_index()\n\n\nfor pos in range(order):\n    \n \n    link = Negative_Pneumonia2_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    ax[pos,0].imshow(img,cmap=color)      \n    ax[0,0].set_title('Negative', font='Serif', fontsize=20)\n\n\n####################################################\n#MONOCROME2 & DX\nTypical_Appearance2_dx = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                            (Typical_Appearance['Modality'] == 'CR')].reset_index()\n\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Typical_Appearance2_dx.loc[pos,'boxes'])\n    link = Typical_Appearance2_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='g', fc='none', lw=3)\n        ax[pos,1].add_patch(p)\n    ax[pos,1].imshow(img,cmap=color)      \n    ax[0,1].set_title('Typical', font='Serif', fontsize=20)\n\n####################################################\n#MONOCROME2 & DX\nIndeterminate_Appearance2_dx = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME2') &\n                                                        (Indeterminate_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Indeterminate_Appearance2_dx.loc[pos,'boxes'])\n    link = Indeterminate_Appearance2_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='b', fc='none', lw=3)\n        ax[pos,2].add_patch(p)\n    ax[pos,2].imshow(img,cmap=color)      \n    ax[0,2].set_title('Indeterminate', font='Serif', fontsize=20)\n    \n    \n####################################################\n#MONOCROME2 & DX\nAtypical_Appearance2_dx = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME2')&\n                                             (Atypical_Appearance['Modality'] == 'CR')].reset_index()\n\nfor pos in range(order):\n    \n    boxes = ast.literal_eval(Atypical_Appearance2_dx.loc[pos,'boxes'])\n    link = Atypical_Appearance2_dx['path'].iloc[pos]\n    ds_pos = [0 for p in range(pos+1)]\n    ds_pos[pos] = pydicom.dcmread(link).pixel_array\n    img = exposure.equalize_hist(ds_pos[pos])\n\n    for box in boxes:\n        p = matplotlib.patches.Rectangle((box['x'], box['y']),\n                                      box['width'], box['height'],\n                                      ec='r', fc='none', lw=3)\n        ax[pos,3].add_patch(p)\n    ax[pos,3].imshow(img,cmap=color)      \n    ax[0,3].set_title('Atypical', font='Serif', fontsize=20)\n","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 6. MONOCROME1","metadata":{}},{"cell_type":"markdown","source":"#### Gray will be in the range 40 - 200.\n##### I will divide the levels in 10 steps.\n##### Firstly, I will one image of each types. \n","metadata":{}},{"cell_type":"code","source":"#### change image type from uint16 to uint8 by read_xray\n\ndef read_xray(path, voi_lut = True, fix_monochrome = True):\n    dicom = pydicom.read_file(path)\n    \n    if voi_lut:\n        data = apply_voi_lut(dicom.pixel_array, dicom)\n        #data = exposure.equalize_adapthist(data)\n    else:\n        data = dicom.pixel_array\n        #data = exposure.equalize_adapthist(data)\n               \n    # depending on this value, X-ray may look inverted - fix that:\n    if fix_monochrome and dicom.PhotometricInterpretation == \"MONOCHROME1\":\n        data = np.amax(data) - data\n        \n    data = data - np.min(data)\n    data = data / np.max(data)\n    data = (data * 255).astype(np.uint8)\n        \n    return data","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def grayRange(lower, upper,img ,hsv, color, patient_id, data):\n    #cnt = count \n    cnt_L = 0\n    cnt_R = 0\n    mask = cv2.inRange(hsv, lower, upper)\n    kernel = np.ones((5,5),np.uint8)\n    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)\n    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)\n    contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\n    #cv2.drawContours(img,contours, -1, color, 3)\n    \n    # fig size = 1200 x 1000\n    for contour in contours:\n        x,y,w,h = cv2.boundingRect(contour)    \n        if 0 < x < 600 and 100 < y < 800 and 0 < w < 1000 and 0 < h < 1000 :\n            area = w*h\n            if 0 < area < 10000:\n                #cv2.rectangle(img,(x,y),(x+w,y+h),color,2)\n                cv2.drawContours(img,contour, -2, color, 3)\n                cnt_L += 1\n        \n        elif 600 < x < 1100 and 100 < y < 800 and 0 < w < 1000 and 0 < h < 1000 :\n            area = w*h\n            if 0 < area < 10000:\n                #cv2.rectangle(img,(x,y),(x+w,y+h),color,2)\n                cv2.drawContours(img,contour, -2, color, 3)\n                cnt_R += 1               \n    \n    count_L.append(cnt_L)\n    count_R.append(cnt_R)\n        \n    \n            \n   \n    return data, count_L, count_R\n    \n   \n    ","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def chkGray1(path_img, hsv, img, re_img_gray, patient_id, data, count_L, count_R):\n    count = 0\n    \n    \n    lower1 = np.array([0,0,0])\n    upper1 = np.array([0,0,20])\n    color1 = (0,0,255)\n\n    lower2 = np.array([0,0,20])\n    upper2 = np.array([0,0,30])\n    color2 = (0,0,255)\n\n    lower3 = np.array([0,0,30])\n    upper3 = np.array([0,0,40])\n    color3 = (0,0,255)\n\n    lower4 = np.array([0,0,40])\n    upper4 = np.array([0,0,50])\n    color4 = (0,255,0)\n\n    lower5 = np.array([0,0,50])\n    upper5 = np.array([0,0,60])\n    color5 = (0,255,0)\n\n    lower6 = np.array([0,0,60])\n    upper6 = np.array([0,0,70])\n    color6 = (0,255,0)\n\n    lower7 = np.array([0,0,70])\n    upper7 = np.array([0,0,80])\n    color7 = (0,255,0)\n\n    lower8 = np.array([0,0,80])\n    upper8 = np.array([0,0,90])\n    color8 = (0,255,0)\n\n    lower9 = np.array([0,0,90])\n    upper9 = np.array([0,0,100])\n    color9 = (255,255,187)\n\n    lower10 = np.array([0,0,100])\n    upper10 = np.array([0,0,110])\n    color10 = (255,255,187)\n\n    lower11 = np.array([0,0,110])\n    upper11 = np.array([0,0,120])\n    color11 = (255,255,0)\n\n    lower12 = np.array([0,0,120])\n    upper12 = np.array([0,0,130])\n    color12 = (255,255,0)\n\n    lower13 = np.array([0,0,130])\n    upper13 = np.array([0,0,140])\n    color13 = (255,128,0)\n\n    lower14 = np.array([0,0,140])\n    upper14 = np.array([0,0,150])\n    color14 = (255,128,0)\n\n    lower15 = np.array([0,0,150])\n    upper15 = np.array([0,0,160])\n    color15 = (255,128,0)\n\n    lower16 = np.array([0,0,160])\n    upper16 = np.array([0,0,170])\n    color16 = (255,0,255)\n\n    lower17 = np.array([0,0,170])\n    upper17 = np.array([0,0,180])\n    color17 = (255,0,255)\n    \n    lower18 = np.array([0,0,180])\n    upper18 = np.array([0,0,190])\n    color18 = (0,0,0)\n        \n    lower19 = np.array([0,0,190])\n    upper19 = np.array([0,0,200])\n    color19 = (255,0,0)\n    \n    lower20 = np.array([0,0,200])\n    upper20 = np.array([0,0,210])\n    color20 = (255,0,0)\n    \n    lower21 = np.array([0,0,210])\n    upper21 = np.array([0,0,220])\n    color21 = (136,0,0)\n    \n    lower22 = np.array([0,0,220])\n    upper22 = np.array([0,0,230])\n    color22 = (136,0,0)\n    \n    lower23 = np.array([0,0,230])\n    upper23 = np.array([0,0,240])\n    color23 = (136,0,0)\n    \n    lower24 = np.array([0,0,240])\n    upper24 = np.array([0,0,255])\n    color24 = (136,0,0)\n    \n\n    grayRange(lower1, upper1, img, hsv, color1, patient_id, data = 'g1')   #น้ำเงิน\n    data.append('0')\n    grayRange(lower2, upper2, img, hsv, color2, patient_id, data = 'g2')  #น้ำเงิน\n    data.append('1')\n    grayRange(lower3, upper3, img, hsv, color3, patient_id, data = 'g3')   #น้ำเงิน\n    data.append('2')\n    grayRange(lower4, upper4, img, hsv, color4, patient_id, data = 'g4')   #เขียว\n    data.append('3')\n    grayRange(lower5, upper5, img, hsv, color5, patient_id, data = 'g5')   #เขียว\n    data.append('4')\n    grayRange(lower6, upper6, img, hsv, color6, patient_id, data = 'g6')   #เขียว\n    data.append('5')\n    grayRange(lower7, upper7, img, hsv, color7, patient_id, data = 'g7')   #เขียว\n    data.append('6')\n    grayRange(lower8, upper8, img, hsv, color8, patient_id, data = 'g8')   #เขียว\n    data.append('7')\n    grayRange(lower9, upper9, img, hsv, color9, patient_id, data = 'g9')   #เหลืองอ่อน\n    data.append('8')\n    grayRange(lower10, upper10, img, hsv, color10, patient_id, data = 'g10' )  #เหลืองอ่อน\n    data.append('9')\n    grayRange(lower11, upper11, img, hsv, color11, patient_id, data = 'g11')  #เหลือง\n    data.append('10')\n    grayRange(lower12, upper12, img, hsv, color12, patient_id, data = 'g12')  #เหลือง\n    data.append('11')\n    grayRange(lower13, upper13, img, hsv, color13, patient_id, data = 'g13')  #ส้ม\n    data.append('12')\n    grayRange(lower14, upper14, img, hsv, color14, patient_id, data = 'g14')  #้ส้ม\n    data.append('13')\n    grayRange(lower15, upper15, img, hsv, color15, patient_id, data = 'g15')  #ส้ม\n    data.append('14')\n    grayRange(lower16, upper16, img, hsv, color16, patient_id, data = 'g16')  #ชมพู\n    data.append('15')\n    grayRange(lower17, upper17, img, hsv, color17, patient_id, data = 'g17')  #ชมพู\n    data.append('16')\n    grayRange(lower18, upper18, img, hsv, color18, patient_id, data = 'g18')  #แดง\n    data.append('17')\n    grayRange(lower19, upper19, img, hsv, color19, patient_id, data = 'g19')  #แดง\n    data.append('18')\n    grayRange(lower20, upper20, img, hsv, color20, patient_id, data = 'g20')  #แดง\n    data.append('19')\n    #grayRange(lower21, upper21, img, hsv, color21, patient_id, data = 'g21')  #เลือดหมู\n    #grayRange(lower22, upper22, img, hsv, color22, patient_id, data = 'g22')  #เลือดหมู\n    #grayRange(lower23, upper23, img, hsv, color23, patient_id, data = 'g23')  #เลือดหมู\n    #grayRange(lower24, upper24, img, hsv, color24, patient_id, data = 'g24')  #เลือดหมู\n    \n    \n    return re_img_gray, data, patient_id, count_L, count_R","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nNegative_Pneumonia1 = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nTypical_Appearance1 = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nIndeterminate_Appearance1 = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nAtypical_Appearance1 = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\n\nprint('Negative_Pneumonia1: ',Negative_Pneumonia1['path'].shape[0], 'images')\nprint('Typical_Appearance1: ',Typical_Appearance1['path'].shape[0], 'images')\nprint('Indeterminate_Appearance1: ',Indeterminate_Appearance1['path'].shape[0], 'images')\nprint('Atypical_Appearance1: ',Atypical_Appearance1['path'].shape[0], 'images')","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#target => complete_data                            \n\n#MONOCROME1&CR => Negative_Pneumonia1_cr, Typical_Appearance1_cr ,Indeterminate_Appearance1_cr, Atypical_Appearance1_cr\n\nNegative_Pneumonia1 = Negative_Pneumonia[(Negative_Pneumonia['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nTypical_Appearance1 = Typical_Appearance[(Typical_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nIndeterminate_Appearance1 = Indeterminate_Appearance[(Indeterminate_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\nAtypical_Appearance1 = Atypical_Appearance[(Atypical_Appearance['Photometric Interpretation']=='MONOCHROME1')].reset_index()\n\npatient_id = []\ndata = []\ncount_L = []\ncount_R = []\nx_position = []\nstatus = []\nsex =[]\n\ntest1 = Negative_Pneumonia1\nfor i in range(Negative_Pneumonia1['path'].shape[0]):   \n    check = test1.iloc[i]\n    if check['Photometric Interpretation']=='MONOCHROME1':\n        img_path = check['path']  \n        imgC = read_xray(img_path)   #change from 16bit color to 8bit color\n        img_gray = cv2.cvtColor(imgC, cv2.COLOR_BGR2RGB)   # make Gray color\n        re_img = cv2.resize(img_gray,(1200,1000))\n        hsv = cv2.cvtColor(re_img, cv2.COLOR_BGR2HSV)\n        chkGray1(img, hsv, re_img, re_img, check['Patient ID'], data, count_L, count_R)\n        for id in range(20):\n            patient_id.append(check['Patient ID'])\n            sex.append(check[\"Patient's Sex\"])\n            #status.append('neg')\n            status.append(0)\n\n        #print(patient_id)\n        #print(status)\n        #print(data)\n        #print(count_L)\n        #print(count_R)\n    #plt.imshow(re_img) \n\ntest2 = Typical_Appearance1\nfor i in range(Typical_Appearance1['path'].shape[0]):   \n    check = test2.iloc[i]\n    if check['Photometric Interpretation']=='MONOCHROME1':\n        img_path = check['path']  \n        imgC = read_xray(img_path)   #change from 16bit color to 8bit color\n        img_gray = cv2.cvtColor(imgC, cv2.COLOR_BGR2RGB)   # make Gray color\n        re_img = cv2.resize(img_gray,(1200,1000))\n        hsv = cv2.cvtColor(re_img, cv2.COLOR_BGR2HSV)\n        chkGray1(img, hsv, re_img, re_img, check['Patient ID'], data, count_L, count_R)\n        for id in range(20):\n            patient_id.append(check['Patient ID'])\n            sex.append(check[\"Patient's Sex\"])\n            #status.append('typ')\n            status.append(1)\n    \n    \n\ntest3 = Indeterminate_Appearance1\nfor i in range(Indeterminate_Appearance1['path'].shape[0]):   \n    check = test3.iloc[i]\n    if check['Photometric Interpretation']=='MONOCHROME1':\n        img_path = check['path']  \n        imgC = read_xray(img_path)   #change from 16bit color to 8bit color\n        img_gray = cv2.cvtColor(imgC, cv2.COLOR_BGR2RGB)   # make Gray color\n        re_img = cv2.resize(img_gray,(1200,1000))\n        hsv = cv2.cvtColor(re_img, cv2.COLOR_BGR2HSV)\n        chkGray1(img, hsv, re_img, re_img, check['Patient ID'], data, count_L, count_R)\n        for id in range(20):\n            patient_id.append(check['Patient ID'])\n            sex.append(check[\"Patient's Sex\"])\n            #status.append('In')\n            status.append(2)\n            \n\ntest4 = Atypical_Appearance1\nfor i in range(Atypical_Appearance1['path'].shape[0]):   \n    check = test4.iloc[i]\n    if check['Photometric Interpretation']=='MONOCHROME1':\n        img_path = check['path']  \n        imgC = read_xray(img_path)   #change from 16bit color to 8bit color\n        img_gray = cv2.cvtColor(imgC, cv2.COLOR_BGR2RGB)   # make Gray color\n        re_img = cv2.resize(img_gray,(1200,1000))\n        hsv = cv2.cvtColor(re_img, cv2.COLOR_BGR2HSV)\n        chkGray1(img, hsv, re_img, re_img, check['Patient ID'], data, count_L, count_R)\n        for id in range(20):\n            patient_id.append(check['Patient ID'])\n            sex.append(check[\"Patient's Sex\"])\n            #status.append('Atyp')\n            status.append(3)\n    \n    \n    \ndf_check = pd.DataFrame({'patient_id': patient_id,\n                         'sex': sex,\n                         'status': status,\n                         'ref': data,\n                         'Left': count_L,\n                         'Right': count_R                 \n                        })\n\n#df_check\n#b,b,b,g,g,g,g,g,yl,yl,y,y,o,o,o,p,p,r,r\ndf_check.shape","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def des(des):\n    if des == 0:\n        return 'neg'\n    elif des == 1:\n        return 'typ'\n    elif des == 2:\n        return 'In'\n    elif des == 3:\n        return 'Atyp'\n    else:\n        return 'none'\n    \ndef sex(sex):\n    if sex == 'M':\n        return 0\n    elif sex == 'F':\n        return 1\n    else:\n        return 'none'\n\ndf_check['description']=df_check['status'].apply(des)\ndf_check['sex_value']=df_check['sex'].apply(sex)\ndf_check.head()","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n#replace Nan and Infiniy value     \n#df_check['ratio'] = df_check['ratio'].fillna(0)   #replace Nan\n#df_check['ratio'] = df_check['ratio'].replace([np.inf, -np.inf], 99) #replace infinity\n\ndf_check.loc[df_check.Left==0, 'Left'] = 1\ndf_check.loc[df_check.Right==0, 'Right'] = 1\ndf_check['ratio'] = df_check['Left']/df_check['Right']\n\ndf_check.head()","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"col = 4   #fix\nrow = 10\n\ngs = GridSpec(row,col)\nfig = plt.figure(figsize=(30,5*row))\ncount_L = []\ncount_R = []\n\nfor i in range(row):\n        \n    path_img_neg = Negative_Pneumonia1['path'].iloc[(i)]\n    patient_id_n = Negative_Pneumonia1['Patient ID'].iloc[i]\n\n    #change from 16bit color to 8bit color\n    imageC_n = read_xray(path_img_neg)\n    \n    # make Gray color\n    img_gray = cv2.cvtColor(imageC_n, cv2.COLOR_BGR2RGB)\n        \n    #reduce shape (1200,1000)\n    re_img_gray_n = cv2.resize(img_gray,(1200,1000))\n    img_n = re_img_gray_n\n       \n    hsv_n = cv2.cvtColor(img_n, cv2.COLOR_BGR2HSV)\n    chkGray1(path_img_neg, hsv_n, img_n, re_img_gray_n, patient_id_n, data, count_L, count_R)\n        \n    fig.add_subplot(gs[i,0]).set_title('Nagative')\n    fig.add_subplot(gs[i,0]).imshow(re_img_gray_n)\n\nfor i in range(row):\n    path_img_typ= Typical_Appearance1['path'].iloc[i]\n    patient_id_t = Typical_Appearance1['Patient ID'].iloc[i]\n    \n    #change from 16bit color to 8bit color\n    imageC_typ = read_xray(path_img_typ)\n    \n    # make Gray color\n    img_gray = cv2.cvtColor(imageC_typ, cv2.COLOR_BGR2RGB)\n    \n    #reduce shape (1200,1000)\n    re_img_gray_typ = cv2.resize(img_gray,(1200,1000))\n    img_typ = re_img_gray_typ\n    hsv_t = cv2.cvtColor(img_typ, cv2.COLOR_BGR2HSV)\n\n    chkGray1(path_img_typ, hsv_t, img_typ, re_img_gray_typ, patient_id_t, data, count_L, count_R)\n    \n    fig.add_subplot(gs[i,1]).set_title('Typical')\n    fig.add_subplot(gs[i,1]).imshow(img_typ)\n\nfor i in range(row):\n \n    path_img_in = Indeterminate_Appearance1['path'].iloc[i]\n    patient_id_in = Indeterminate_Appearance1['Patient ID'].iloc[i]\n\n    #change from 16bit color to 8bit color\n    imageC_in = read_xray(path_img_in)\n    # make Gray color\n    img_gray = cv2.cvtColor(imageC_in, cv2.COLOR_BGR2RGB)\n    #reduce shape (1200,1000)\n    re_img_gray_in = cv2.resize(img_gray,(1200,1000))\n    img_in = re_img_gray_in\n    hsv_in = cv2.cvtColor(img_in, cv2.COLOR_BGR2HSV)\n\n    chkGray1(path_img_in, hsv_in, img_in, re_img_gray_in, patient_id_in, data, count_L, count_R)\n    \n    fig.add_subplot(gs[i,2]).set_title('Indeterminate')\n    fig.add_subplot(gs[i,2]).imshow(img_in)\n\nfor i in range(row):\n    path_img_a = Atypical_Appearance1['path'].iloc[i]\n    patient_id_a = Atypical_Appearance1['Patient ID'].iloc[i]\n\n    #change from 16bit color to 8bit color\n    imageC_a = read_xray(path_img_a)\n    # make Gray color\n    img_gray = cv2.cvtColor(imageC_a, cv2.COLOR_BGR2RGB)\n    #reduce shape (1200,1000)\n    re_img_gray_a = cv2.resize(img_gray,(1200,1000))\n    img_a = re_img_gray_a\n    hsv_a = cv2.cvtColor(img_a, cv2.COLOR_BGR2HSV)\n    \n    chkGray1(path_img_a, hsv_a, img_a, re_img_gray_a, patient_id_a, data, count_L, count_R)\n\n    fig.add_subplot(gs[i,3]).set_title('Atypical')\n    fig.add_subplot(gs[i,3]).imshow(img_a)\n","metadata":{"_kg_hide-input":true,"_kg_hide-output":false,"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nsns.catplot(data=df_check, x='ref', y='Left', hue='description')\nsns.lineplot(data=df_check, x='ref', y='Left', hue='description')\nsns.catplot(data=df_check, x='ref', y='Right', hue='description')\nsns.lineplot(data=df_check, x='ref', y='Right', hue='description')\n#sns.catplot(data=df_chk2, x='ref', y='ratio', hue='description')\n#sns.catplot(data=df_chk3, x='ref', y='ratio', hue='description')\n\nplt.show()","metadata":{"_kg_hide-input":true,"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"g = sns.PairGrid(df_check, vars=['ref', 'Left', 'Right','ratio'],\n                 hue='description', palette='RdBu_r')\ng.map(plt.scatter, alpha=0.8)\ng.add_legend();","metadata":{"_kg_hide-input":true,"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#fig = px.scatter_3d(df_check, x='ref', y='Right', z='ratio', color='description', symbol = 'ref')\nfig = px.scatter_3d(df_check, x='ref', y='ratio', z='Right', color='description')\nfig.show()","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#predict\ntrain = complete_data[complete_data['Photometric Interpretation']=='MONOCHROME1'].reset_index()\n\n#print('Id              Actual                 PredictionString')\n\n#for i in range(train['path'].shape[0]):\n\nactual = []\npred = []\nPatient_ID = []\n\ncnt = 0\ncorrect = 0\n\nfor i in range(50):\n    \n    status = 0\n    #i= 1\n   # Patient_ID.append[train['Patient ID'].iloc[i]]\n\n    if train['Photometric Interpretation'].iloc[i]=='MONOCHROME1':        \n\n        #actual \n        if train['Negative for Pneumonia'].iloc[i]==1:\n            status = 'negative 1 0 0 1 1'                   \n        elif train['Typical Appearance'].iloc[i]==1:\n            status = 'typical 1 0 0 1 1'\n        elif train['Indeterminate Appearance'].iloc[i]==1:\n            status = 'indeterminate 1 0 0 1 1'\n        elif train['Atypical Appearance'].iloc[i]==1:\n            status = 'atypical 1 0 0 1 1'\n        else:\n            status = 'none 1 0 0 1 1'        \n        \n        #prediction\n\n        count_L = []\n        count_R = []\n        data = []\n        img_path = train['path'].iloc[i]\n        imgC = read_xray(img_path)   #change from 16bit color to 8bit color\n        img_gray = cv2.cvtColor(imgC, cv2.COLOR_BGR2RGB)   # make Gray color\n        re_img = cv2.resize(img_gray,(1200,1000))\n        hsv = cv2.cvtColor(re_img, cv2.COLOR_BGR2HSV)\n        chkGray1(img, hsv, re_img, re_img, train['Patient ID'], data, count_L, count_R)\n\n        if ( (5 < count_R[4] < 19 and 0 < (count_L[4]/count_L[4]) < 10) or (5 < count_R[5] < 19 and 0 < (count_L[4]/count_L[4]) < 10)\n           ):\n            predict = 'atypical 1 0 0 1 1'\n\n        #elif: \n         #   predict = 'typical 1 0 0 1 1'\n\n        #elif:\n        #    predict = 'indeterminate 1 0 0 1 1'\n        \n       # elif:\n        #    predict = 'negative 1 0 0 1 1'\n\n        else:\n            predict = 'none 1 0 0 1 1'\n            \n          \n\n        #print(train['Patient ID'].iloc[i] ,'  ', status,'       ', predict )\n        Patient_ID.append(train['Patient ID'].iloc[i])\n        actual.append(status)\n        pred.append(predict)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Pred_judg = pd.DataFrame({'Patient_ID':Patient_ID,\n                         'actual': actual,\n                         'predict': pred })\nPred_judg.head(50)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## MONOCROME2 ","metadata":{}},{"cell_type":"code","source":"print('Negative_Pneumonia2_cr: ',Negative_Pneumonia2_cr['path'].shape[0], 'images')\nprint('Typical_Appearance2_cr: ',Typical_Appearance2_cr['path'].shape[0], 'images')\nprint('Indeterminate_Appearance2_cr: ',Indeterminate_Appearance2_cr['path'].shape[0], 'images')\nprint('Atypical_Appearance2_cr: ',Atypical_Appearance2_cr['path'].shape[0], 'images')","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}