{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\n#import numpy as np # linear algebra\n#import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n#import os\n#for dirname, _, filenames in os.walk('/kaggle/input'):\n    #for filename in filenames:\n        #print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport skimage.io\nimport imageio\nimport os\nimport scipy.ndimage as ndi\nimport random\nfrom skimage import color\nfrom collections import Counter \nimport scipy.ndimage.measurements\nfrom skimage.feature import greycomatrix,greycoprops\nfrom sklearn import preprocessing\nfrom sklearn.neighbors import KNeighborsClassifier","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install imagecodecs","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def file_names(path):\n    file_names_pictures=[]\n    for dirname, _, filenames in os.walk(path):\n        for filename in filenames:\n            #print(os.path.join(dirname, filename))\n            file_names_pictures.append(os.path.join(dirname, filename))\n    return np.sort(file_names_pictures)\ndef show_image_in_path(path):\n    \"\"\"Show image in first dimension .\n    \n    Args:\n    str: image path\n    \"\"\"\n    image_path=path\n    im=imageio.imread(image_path)\n    show_image(im[:,:,0])\ndef read_image(image_path,part_to_read):\n    im=imageio.imread(image_path)\n    if part_to_read==0:\n        return im\n    elif part_to_read==1:\n        return im[:,:,0]\n    elif part_to_read==2:\n        return im[:,:,1]\n    elif part_to_read==3:\n        return im[:,:,2]\n    else:\n        raise ValueError(\"argument number 2 must be 0,1,2 or 3\")\ndef show_image(image):\n    \"\"\"Show images.\n    \n    Args:\n    numpy.Array: image to show\n    \"\"\"\n    plt.imshow(image)\ndef equalizer(image):\n    \"\"\"Equalize images.\n    \n    Args:\n    numpy.Array: image to equalize\n    \n    Returns:\n    numpy.Array: equalized image\n    \"\"\"\n    hist=ndi.histogram(image,min=0,max=255,bins=256)\n    cdf=hist.cumsum()/hist.sum()\n    im_equalized=cdf[image]*255\n    return im_equalized\ndef histogram_1D(image):\n    return ndi.histogram(image,min=0,max=1,bins=1000)\ndef CDF_1D(image):\n    hist=ndi.histogram(image,min=0,max=1,bins=1000)\n    return hist.cumsum()/hist.sum()\ndef histogram(image,i):\n    #im=imageio.imread(image_path)\n    if i==0:\n        return ndi.histogram(image,min=0,max=255,bins=256)\n    elif i==1:\n        return ndi.histogram(image[:,:,0],min=0,max=255,bins=256)\n    elif i==2:\n        return ndi.histogram(image[:,:,1],min=0,max=255,bins=256)\n    elif i==3:\n        return ndi.histogram(image[:,:,2],min=0,max=255,bins=256)\n    else:\n        raise ValueError(\"argument number 2 must be 0,1,2 or 3\")\ndef CDF(image,i):\n    #im=imageio.imread(image_path)\n    if i==0:\n        hist=ndi.histogram(image,min=0,max=255,bins=256)\n        return hist.cumsum()/hist.sum()\n    elif i==1:\n        hist=ndi.histogram(image[:,:,0],min=0,max=255,bins=256)\n        return hist.cumsum()/hist.sum()\n    elif i==2:\n        hist=ndi.histogram(image[:,:,1],min=0,max=255,bins=256)\n        return hist.cumsum()/hist.sum()\n    elif i==3:\n        hist=ndi.histogram(image[:,:,2],min=0,max=255,bins=256)\n        return hist.cumsum()/hist.sum()\n    else:\n        raise ValueError(\"argument number 2 must be 0,1,2 or 3\")\n    \ndef plot_histogram(image):\n    hist=ndi.histogram(image,min=0,max=255,bins=256)\n    plt.plot(hist)\ndef mask_apply_1(image):\n    B=image<255\n    im_selected=np.where(B,image,0)\n    #ndi.binary_closing(B,iterations=3)\n    return im_selected,ndi.binary_closing(B,iterations=3)\ndef mask_apply(image,mask):\n    B=mask>0\n    im_selected=np.where(B,image,0)\n    return im_selected\ndef plot_histogram_in_image_parts(image,mask):\n    im_selected=mask_apply(image,mask)\n    hist=ndi.histogram(im_selected,min=1,max=255,bins=255)\n    plt.plot(hist)\ndef dimensions_after_mask_application(image,mask):\n    try:\n        im_selected=mask_apply(image,mask)\n    except ValueError:\n        im_selected,_=mask_apply_1(image)\n    dimensions=[]\n    for i in range(im_selected.shape[0]):\n        if im_selected[i,:].any():\n            dimensions.append(i)\n            break\n    for j in range(dimensions[0],im_selected.shape[0]):\n        if not im_selected[j,:].any():\n            dimensions.append(j)\n            break\n    for k in range(im_selected.shape[1]):\n        if im_selected[:,k].any():\n            dimensions.append(k)\n            break\n    for l in range(dimensions[2],im_selected.shape[1]):\n        if not im_selected[:,l].any():\n            dimensions.append(l)\n            break\n    return dimensions\ndef extract_patchs(im_mask,im,dimensions,patch_number,patch_length,patch_width):\n    selected_patchs=[]\n    selected_dimentions=[]\n    for i in range(100000):\n        if len(selected_patchs)>=patch_number:\n            break;\n        pixel_coordinates=[random.randint(dimensions[0], dimensions[1]),random.randint(dimensions[2], dimensions[3])]\n        if  im_mask[pixel_coordinates[0]:pixel_coordinates[0]+patch_width,pixel_coordinates[1]:pixel_coordinates[1]+patch_length].all():\n            selected_patchs.append(im[pixel_coordinates[0]:pixel_coordinates[0]+patch_width,pixel_coordinates[1]:pixel_coordinates[1]+patch_length,:])\n            selected_dimentions.append((pixel_coordinates[0],pixel_coordinates[1]))\n    return selected_patchs,selected_dimentions\ndef extract_patch_layers(selected_patchs,layer_number):\n    selected_patchs_created=[]\n    if layer_number==0:\n        for i in range(len(selected_patchs)):\n            selected_patchs_created.append(selected_patchs[i][:,:,0])\n        return selected_patchs_created\n    elif layer_number==1:\n        for i in range(len(selected_patchs)):\n            selected_patchs_created.append(selected_patchs[i][:,:,1])\n        return selected_patchs_created\n    elif layer_number==2:\n        for i in range(len(selected_patchs)):\n            selected_patchs_created.append(selected_patchs[i][:,:,2])\n        return selected_patchs_created\n    else:\n        raise ValueError(\"argument number 2 must be 0,1 or 2\")\ndef show_patchs(figSize,columns_number,rows_number,selected_patchs):\n    fig=plt.figure(figsize=figSize)\n    for i in range(1, columns_number*rows_number +1):\n        #img = np.random.randint(10, size=(h,w))\n        fig.add_subplot(rows_number, columns_number, i)\n        #print(i)\n        plt.imshow(selected_patchs[i-1])\n    plt.show()\ndef show_patch_location(selected_patch,selected_image,selected_dimention,image):\n    mask1=np.ones(selected_image.shape,dtype=bool)\n    mask1[selected_dimention[0]:selected_dimention[0]+400,selected_dimention[1]:selected_dimention[1]+400]=False\n    im_position=np.where(mask1,image[:,:,0],0)\n    f, axarr = plt.subplots(1,2)\n    axarr[0].imshow(im_position[dimensions[0]:dimensions[1],dimensions[2]:dimensions[3]])\n    axarr[1].imshow(selected_patch)\ndef show_histograms(selected_patchs):\n    n=len(selected_patchs)\n    l=[]\n    gs = plt.GridSpec(n,4) \n    fig = plt.figure(figsize=(20,50))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n        l.append(fig.add_subplot(gs[i,2]))\n        l.append(fig.add_subplot(gs[i,3]))\n    k=0\n    for i in range(0,n*4,4):\n        l[i].imshow(selected_patchs[k])\n        l[i+1].plot(histogram(selected_patchs[k],1))\n        l[i+2].plot(histogram(selected_patchs[k],2))\n        l[i+3].plot(histogram(selected_patchs[k],3))\n        k=k+1\ndef show_CDF(selected_patchs):\n    n=len(selected_patchs)\n    l=[]\n    gs = plt.GridSpec(n,4) \n    fig = plt.figure(figsize=(20,50))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n        l.append(fig.add_subplot(gs[i,2]))\n        l.append(fig.add_subplot(gs[i,3]))\n    k=0\n    for i in range(0,n*4,4):\n        l[i].imshow(selected_patchs[k])\n        l[i+1].plot(CDF(selected_patchs[k],1))\n        l[i+2].plot(CDF(selected_patchs[k],2))\n        l[i+3].plot(CDF(selected_patchs[k],3))\n        k=k+1\ndef show_histograms_1D(selected_patchs):\n    n=len(selected_patchs)\n    l=[]\n    gs = plt.GridSpec(n,2) \n    fig = plt.figure(figsize=(20,50))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n        \n    k=0\n    for i in range(0,n*2,2):\n        l[i].imshow(selected_patchs[k])\n        l[i+1].plot(histogram_1D(selected_patchs[k]))\n        \n        k=k+1\ndef show_CDF_1D(selected_patchs):\n    n=len(selected_patchs)\n    l=[]\n    gs = plt.GridSpec(n,2) \n    fig = plt.figure(figsize=(20,50))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n        \n    k=0\n    for i in range(0,n*2,2):\n        l[i].imshow(selected_patchs[k])\n        l[i+1].plot(CDF_1D(selected_patchs[k]))\n        \n        k=k+1\ndef position_construction(im_selected,selected_patch,selected_dimention,image):\n    #selected_patch=selected_patchs[k]\n    #selected_image=im_selected\n    #selected_dimention=selected_dimentions[k]\n    #image=im\n    mask1=np.ones(im_selected.shape,dtype=bool)\n    mask1[selected_dimention[0]:selected_dimention[0]+400,selected_dimention[1]:selected_dimention[1]+400]=False\n    im_position=np.where(mask1,image[:,:,0],0)\n    return im_position\ndef features(image):\n    a=ndi.mean(image)\n    b=ndi.median(image)\n    c=ndi.sum(image)\n    d=ndi.maximum(image)\n    e=ndi.minimum(image)\n    f=ndi.standard_deviation(image)\n    #g=ndi.variance(image)\n    return [a,b,c,d,e,f]\ndef more_features(image):\n    a=ndi.mean(image)\n    b=ndi.median(image)\n    c=ndi.sum(image)\n    d=ndi.maximum(image)\n    e=ndi.minimum(image)\n    f=ndi.standard_deviation(image)\n    glcm=greycomatrix(image,distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n    g=greycoprops(glcm,'dissimilarity')[0,0]\n    h=greycoprops(glcm,'correlation')[0,0]\n    #g=ndi.variance(image)\n    return [a,b,c,d,e,f,g,h]\ndef all_selected_features(image,image_grey_scale):\n    a1=ndi.mean(image[:,:,0])\n    b1=ndi.median(image[:,:,0])\n    c1=ndi.sum(image[:,:,0])\n    d1=ndi.standard_deviation(image[:,:,0])\n    glcm=greycomatrix(image[:,:,0],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n    e1=greycoprops(glcm,'dissimilarity')[0,0]\n    f1=greycoprops(glcm,'correlation')[0,0]\n    a2=ndi.mean(image[:,:,1])\n    b2=ndi.median(image[:,:,1])\n    c2=ndi.sum(image[:,:,1])\n    d2=ndi.standard_deviation(image[:,:,1])\n    glcm=greycomatrix(image[:,:,1],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n    e2=greycoprops(glcm,'dissimilarity')[0,0]\n    f2=greycoprops(glcm,'correlation')[0,0]\n    a3=ndi.mean(image[:,:,2])\n    b3=ndi.median(image[:,:,2])\n    c3=ndi.sum(image[:,:,2])\n    d3=ndi.standard_deviation(image[:,:,2])\n    glcm=greycomatrix(image[:,:,2],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n    e3=greycoprops(glcm,'dissimilarity')[0,0]\n    f3=greycoprops(glcm,'correlation')[0,0]\n    a4=ndi.mean(image_grey_scale)\n    b4=ndi.median(image_grey_scale)\n    c4=ndi.sum(image_grey_scale)\n    d4=ndi.standard_deviation(image_grey_scale)\n    return [a1,b1,c1,d1,e1,f1,a2,b2,c2,d2,e2,f2,a3,b3,c3,d3,e3,f3,a4,b4,c4,d4]\ndef show_features(im):\n    n=round(len(im)/2)\n    l=[]\n    gs = plt.GridSpec(n,2) \n    fig = plt.figure(figsize=(10,110))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n    k=0\n    for i in range(0,n*2,2):\n    \n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n        L=features(im[k])\n        textstr = '\\n'.join(( r'$\\mu=%.3f$' % (L[0], ),r'$\\mathrm{median}=%.3f$' % (L[1], ),r'$\\mathrm{sum}=%.3f$' % (L[2], ),r'$\\mathrm{maximum}=%.3f$' % (L[3], ),r'$\\mathrm{minimum}=%.3f$' % (L[4], ),r'$\\mathrm{std}=%.3f$' % (L[5], )))\n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i].imshow(im[k])\n        l[i].text(0.05, 0.95, textstr, transform=l[i].transAxes, fontsize=14,verticalalignment='top', bbox=props)\n\n\n        k=k+1\n\n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n\n        L=features(im[k])\n        textstr = '\\n'.join(( r'$\\mu=%.3f$' % (L[0], ),r'$\\mathrm{median}=%.3f$' % (L[1], ),r'$\\mathrm{sum}=%.3f$' % (L[2], ),r'$\\mathrm{maximum}=%.3f$' % (L[3], ),r'$\\mathrm{minimum}=%.3f$' % (L[4], ),r'$\\mathrm{std}=%.3f$' % (L[5], )))\n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i+1].imshow(im[k])\n        l[i+1].text(0.05, 0.95, textstr, transform=l[i+1].transAxes, fontsize=14,verticalalignment='top', bbox=props)\n\n\n        k=k+1\ndef show_more_features(im):\n    n=round(len(im)/2)\n    l=[]\n    gs = plt.GridSpec(n,2) \n    fig = plt.figure(figsize=(10,110))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n    k=0\n    for i in range(0,n*2,2):\n    \n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n        L=more_features(im[k])\n        textstr = '\\n'.join(( r'$\\mu=%.3f$' % (L[0], ),r'$\\mathrm{median}=%.3f$' % (L[1], ),r'$\\mathrm{sum}=%.3f$' % (L[2], ),r'$\\mathrm{maximum}=%.3f$' % (L[3], ),r'$\\mathrm{minimum}=%.3f$' % (L[4], ),r'$\\mathrm{std}=%.3f$' % (L[5], ),r'$\\mathrm{dissimilarity}=%.3f$' % (L[6], ),r'$\\mathrm{correlation}=%.3f$' % (L[7], )))\n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i].imshow(im[k])\n        l[i].text(0.05, 0.95, textstr, transform=l[i].transAxes, fontsize=14,verticalalignment='top', bbox=props)\n\n\n        k=k+1\n\n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n\n        L=more_features(im[k])\n        textstr = '\\n'.join(( r'$\\mu=%.3f$' % (L[0], ),r'$\\mathrm{median}=%.3f$' % (L[1], ),r'$\\mathrm{sum}=%.3f$' % (L[2], ),r'$\\mathrm{maximum}=%.3f$' % (L[3], ),r'$\\mathrm{minimum}=%.3f$' % (L[4], ),r'$\\mathrm{std}=%.3f$' % (L[5], ),r'$\\mathrm{dissimilarity}=%.3f$' % (L[6], ),r'$\\mathrm{correlation}=%.3f$' % (L[7], )))\n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i+1].imshow(im[k])\n        l[i+1].text(0.05, 0.95, textstr, transform=l[i+1].transAxes, fontsize=14,verticalalignment='top', bbox=props)\n\n\n        k=k+1\ndef show_all_features(im,im_grey):\n    n=round(len(im)/2)\n    l=[]\n    gs = plt.GridSpec(n,2) \n    fig = plt.figure(figsize=(10,150))\n    for i in range(n):\n        l.append(fig.add_subplot(gs[i,0]))\n        l.append(fig.add_subplot(gs[i,1]))\n    k=0\n    for i in range(0,n*2,2):\n    \n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n        L=all_selected_features(im[k],im_grey[k])\n        textstr = '\\n'.join(( r'$\\mu_{R}=%.3f$' % (L[0], ),r'$\\mathrm{median_{R}}=%.3f$' % (L[1], ),r'$\\mathrm{sum_{R}}=%.3f$' % (L[2], ),r'$\\mathrm{std_{R}}=%.3f$' % (L[3], ),r'$\\mathrm{dissimilarity_{R}}=%.3f$' % (L[4], ),r'$\\mathrm{correlation_{R}}=%.3f$' % (L[5], ),r'$\\mu_{G}=%.3f$' % (L[6], ),r'$\\mathrm{median_{G}}=%.3f$' % (L[7], ),r'$\\mathrm{sum_{G}}=%.3f$' % (L[8], ),r'$\\mathrm{std_{G}}=%.3f$' % (L[9], ),r'$\\mathrm{dissimilarity_{G}}=%.3f$' % (L[10], ),r'$\\mathrm{correlation_{G}}=%.3f$' % (L[11], ),r'$\\mu_{B}=%.3f$' % (L[12], ),r'$\\mathrm{median_{B}}=%.3f$' % (L[13], ),r'$\\mathrm{sum_{B}}=%.3f$' % (L[14], ),r'$\\mathrm{std_{B}}=%.3f$' % (L[15], ),r'$\\mathrm{dissimilarity_{B}}=%.3f$' % (L[16], ),r'$\\mathrm{correlation_{B}}=%.3f$' % (L[17], ),r'$\\mu_{grey}=%.3f$' % (L[18], ),r'$\\mathrm{median_{grey}}=%.3f$' % (L[19], ),r'$\\mathrm{sum_{grey}}=%.3f$' % (L[20], ),r'$\\mathrm{std_{grey}}=%.3f$' % (L[21], )))\n        \n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i].imshow(im[k])\n        l[i].text(0.05, 0.95, textstr, transform=l[i].transAxes, fontsize=8,verticalalignment='top', bbox=props)\n\n\n        k=k+1\n\n        #im_position=position_construction(im_selected,selected_patchs[k],selected_dimentions[k],im)\n\n\n        L=all_selected_features(im[k],im_grey[k])\n        textstr = '\\n'.join(( r'$\\mu_{R}=%.3f$' % (L[0], ),r'$\\mathrm{median_{R}}=%.3f$' % (L[1], ),r'$\\mathrm{sum_{R}}=%.3f$' % (L[2], ),r'$\\mathrm{std_{R}}=%.3f$' % (L[3], ),r'$\\mathrm{dissimilarity_{R}}=%.3f$' % (L[4], ),r'$\\mathrm{correlation_{R}}=%.3f$' % (L[5], ),r'$\\mu_{G}=%.3f$' % (L[6], ),r'$\\mathrm{median_{G}}=%.3f$' % (L[7], ),r'$\\mathrm{sum_{G}}=%.3f$' % (L[8], ),r'$\\mathrm{std_{G}}=%.3f$' % (L[9], ),r'$\\mathrm{dissimilarity_{G}}=%.3f$' % (L[10], ),r'$\\mathrm{correlation_{G}}=%.3f$' % (L[11], ),r'$\\mu_{B}=%.3f$' % (L[12], ),r'$\\mathrm{median_{B}}=%.3f$' % (L[13], ),r'$\\mathrm{sum_{B}}=%.3f$' % (L[14], ),r'$\\mathrm{std_{B}}=%.3f$' % (L[15], ),r'$\\mathrm{dissimilarity_{B}}=%.3f$' % (L[16], ),r'$\\mathrm{correlation_{B}}=%.3f$' % (L[17], ),r'$\\mu_{grey}=%.3f$' % (L[18], ),r'$\\mathrm{median_{grey}}=%.3f$' % (L[19], ),r'$\\mathrm{sum_{grey}}=%.3f$' % (L[20], ),r'$\\mathrm{std_{grey}}=%.3f$' % (L[21], )))\n        props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)\n\n\n        l[i+1].imshow(im[k])\n        l[i+1].text(0.05, 0.95, textstr, transform=l[i+1].transAxes, fontsize=8,verticalalignment='top', bbox=props)\n\n\n        k=k+1\ndef selected_patchs_in_file_name(file_name,file_mask):\n    try:\n        #print(\"noValueError\")\n        im=read_image(file_name,1)\n        im_mask=read_image(file_mask,1)\n        dimensions=dimensions_after_mask_application(im,im_mask)\n        im=read_image(file_name,0)\n        selected_patchs,selected_dimentions=extract_patchs(im_mask,im,dimensions,50,patch_length=400,patch_width=400)\n    except ValueError:\n        print(\"valueError\")\n        selected_patchs,selected_dimentions=extract_patchs_1(file_name,patch_width=400,patch_length=400,patch_number=50)\n    return selected_patchs,selected_dimentions\ndef extract_patchs_1(image,patch_width,patch_length,patch_number):\n    im=read_image(image,1)\n    _,im_mask=mask_apply_1(im)\n    dimensions=dimensions_after_mask_application(im,im_mask)\n    im=read_image(image,0)\n    pixel_coordinates=[random.randint(dimensions[0], dimensions[1]),random.randint(dimensions[2], dimensions[3])]\n    selected_patchs=[]\n    selected_dimentions=[]\n    for i in range(100000):\n        if len(selected_patchs)>=patch_number:\n            break;\n        pixel_coordinates=[random.randint(dimensions[0], dimensions[1]),random.randint(dimensions[2], dimensions[3])]\n        if  im_mask[pixel_coordinates[0]:pixel_coordinates[0]+patch_width,pixel_coordinates[1]:pixel_coordinates[1]+patch_length].all():\n            selected_patchs.append(im[pixel_coordinates[0]:pixel_coordinates[0]+patch_width,pixel_coordinates[1]:pixel_coordinates[1]+patch_length,:])\n            selected_dimentions.append((pixel_coordinates[0],pixel_coordinates[1]))\n    return selected_patchs,selected_dimentions","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_names_pictures=file_names('/kaggle/input/prostate-cancer-grade-assessment/train_images')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_names_pictures","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_names_mask=file_names('/kaggle/input/prostate-cancer-grade-assessment/train_label_masks')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_names_mask","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_names_test=file_names('../input/prostate-cancer-grade-assessment/test_images')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#file_names_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class Patch():\n    def __init__(self, filepath,patch_width,patch_length):\n        self.filepath=filepath\n        self.data=imageio.imread(filepath)\n        self.patch_width=patch_width\n        self.patch_length=patch_length\n    def show_image(self):\n        plt.imshow(self.data)\n    def mask_apply(self):\n        im_selected=np.where(self.data[:,:,0]<255,self.data[:,:,0],0)\n        return im_selected,ndi.binary_closing(self.data[:,:,0]<255,iterations=3)\n    def dimensions_after_mask_application(self):\n        #image=self.data[:,:,0]\n        im_selected,_=self.mask_apply()\n        dimensions=[]\n        for i in range(0,im_selected.shape[0],200):\n            if im_selected[i,:].any():\n                dimensions.append(i)\n                break\n        for j in range(dimensions[0],im_selected.shape[0],100):\n            if not im_selected[j,:].any():\n                dimensions.append(j)\n                break\n        for k in range(0,im_selected.shape[1],200):\n            if im_selected[:,k].any():\n                dimensions.append(k)\n                break\n        for l in range(dimensions[2],im_selected.shape[1],100):\n            if not im_selected[:,l].any():\n                dimensions.append(l)\n                break\n        return dimensions\n    def extract_patch(self):\n        _,im_mask=self.mask_apply()\n        dimensions=self.dimensions_after_mask_application()\n        for i in range(10000):\n            pixel_coordinates=[random.randint(dimensions[0], dimensions[1]),random.randint(dimensions[2], dimensions[3])]\n            if  im_mask[pixel_coordinates[0]:pixel_coordinates[0]+self.patch_width,pixel_coordinates[1]:pixel_coordinates[1]+self.patch_length].all():\n                return self.data[pixel_coordinates[0]:pixel_coordinates[0]+self.patch_width,pixel_coordinates[1]:pixel_coordinates[1]+self.patch_length,:]\n            \n        \n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class Features():\n    def __init__(self, image):\n        self.image=image\n        self.mean_1=ndi.mean(image[:,:,0])\n        self.median_1=ndi.median(image[:,:,0])\n        self.sum_1=ndi.sum(image[:,:,0])\n        self.standard_deviation_1=ndi.standard_deviation(image[:,:,0])\n        self.glcm_1=greycomatrix(image[:,:,0],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n        self.dissimilarity_1=greycoprops(self.glcm_1,'dissimilarity')[0,0]\n        self.correlation_1=greycoprops(self.glcm_1,'correlation')[0,0]\n        self.mean_2=ndi.mean(image[:,:,1])\n        self.median_2=ndi.median(image[:,:,1])\n        self.sum_2=ndi.sum(image[:,:,1])\n        self.standard_deviation_2=ndi.standard_deviation(image[:,:,1])\n        self.glcm_2=greycomatrix(image[:,:,1],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n        self.dissimilarity_2=greycoprops(self.glcm_2,'dissimilarity')[0,0]\n        self.correlation_2=greycoprops(self.glcm_2,'correlation')[0,0]\n        self.mean_3=ndi.mean(image[:,:,2])\n        self.median_3=ndi.median(image[:,:,2])\n        self.sum_3=ndi.sum(image[:,:,2])\n        self.standard_deviation_3=ndi.standard_deviation(image[:,:,2])\n        self.glcm_3=greycomatrix(image[:,:,2],distances=[5],angles=[0],levels=256,symmetric=True,normed=True)\n        self.dissimilarity_3=greycoprops(self.glcm_3,'dissimilarity')[0,0]\n        self.correlation_3=greycoprops(self.glcm_3,'correlation')[0,0]\n        self.mean_4=ndi.mean(color.rgb2gray(image))\n        self.median_4=ndi.median(color.rgb2gray(image))\n        self.sum_4=ndi.sum(color.rgb2gray(image))\n        self.standard_deviation_4=ndi.standard_deviation(color.rgb2gray(image))\n    def extract_features(self):\n        return [self.mean_1,self.median_1,self.sum_1,self.standard_deviation_1,self.dissimilarity_1,self.correlation_1,self.mean_2,self.median_2,self.sum_2,self.standard_deviation_2,self.dissimilarity_2,self.correlation_2,self.mean_3,self.median_3,self.sum_3,self.standard_deviation_3,self.dissimilarity_3,self.correlation_3,self.mean_4,self.median_4,self.sum_4,self.standard_deviation_4]\n     \n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class ImageFeatures():\n    def __init__(self,PatchNumber,filepath,patch_width,patch_length,idx):\n        self.PatchNumber=PatchNumber\n        self.filepath=filepath\n        self.patch_width=patch_width\n        self.patch_length=patch_length\n        self.idx=idx\n        \n    def extract_image_features(self):\n        features=[]\n        P=Patch(self.filepath,self.patch_width,self.patch_length)\n        for i in range(self.PatchNumber):\n            #P=Patch(self.filepath,self.patch_width,self.patch_length)\n            F=Features(P.extract_patch())\n            features.append(F.extract_features())\n        return features\n    \n    def extract_image_features_dataframe(self):\n        df = pd.DataFrame(self.extract_image_features(), columns = ['mean_1','median_1','sum_1','standard_deviation_1','dissimilarity_1','correlation_1','mean_2','median_2','sum_2','standard_deviation_2','dissimilarity_2','correlation_2','mean_3','median_3','sum_3','standard_deviation_3','dissimilarity_3','correlation_3','mean_4','median_4','sum_4','standard_deviation_4'])\n        df[\"picture_number\"]=list(np.round(np.ones(self.PatchNumber)*self.idx))\n        return df,self.idx\n    def extract_mean_image_features(self):\n        df=self.extract_image_features_dataframe()\n        \n        return [np.mean(df['mean_1']),np.mean(df['median_1']),np.mean(df['sum_1']),np.mean(df['standard_deviation_1']),np.mean(df['correlation_1']),np.mean(df['mean_2']),np.mean(df['median_2']),np.mean(df['sum_2']),np.mean(df['standard_deviation_2']),np.mean(df['dissimilarity_2']),np.mean(df['correlation_2']),np.mean(df['mean_3']),np.mean(df['median_3']),np.mean(df['sum_3']),np.mean(df['standard_deviation_3']),np.mean(df['dissimilarity_3']),np.mean(df['correlation_3']),np.mean(df['mean_4']),np.mean(df['median_4']),np.mean(df['sum_4']),np.mean(df['standard_deviation_4']),np.mean(df['mean_1'])]\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class DatasetFeatures():\n    def __init__(self,fileNames,firstIndex,lastIndex,patchNumber,patch_width,patch_length,isup_grade):\n        self.fileNames=fileNames\n        self.firstIndex=firstIndex\n        self.lastIndex=lastIndex\n        self.patchNumber=patchNumber\n        self.patch_width=patch_width\n        self.patch_length=patch_length\n        self.Y=isup_grade\n        self.index=0\n    def extract_dataset_features(self):\n        dataset_features=[]\n        for i in range(self.firstIndex,self.lastIndex):\n            p=Patch(self.fileNames[i],self.patch_width,self.patch_length)\n            im=p.extract_patch()\n            if im is not None:\n                ImageF=ImageFeatures(self.patchNumber,self.fileNames[i],self.patch_width,self.patch_length)\n                dataset_features.append(ImageF.extract_mean_image_features())\n                self.index=self.index+1\n                print(\"image number \"+str(self.index)+\" is processed\")\n                #dataset_features.append(self.Y)\n            else:\n                dataset_features.append([None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None])\n                print(\"image number \"+str(self.index)+\" is nontype\")\n        \n        return dataset_features\n    def extract_images_dataset_features_dataframe(self):\n        \n        df = pd.DataFrame(self.extract_dataset_features(), columns = ['mean_1','median_1','sum_1','standard_deviation_1','dissimilarity_1','correlation_1','mean_2','median_2','sum_2','standard_deviation_2','dissimilarity_2','correlation_2','mean_3','median_3','sum_3','standard_deviation_3','dissimilarity_3','correlation_3','mean_4','median_4','sum_4','standard_deviation_4'])\n        df[\"isup_grade\"]=self.Y[self.firstIndex:self.lastIndex]\n        return df\n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df1 = pd.read_csv(r'../input/data-prostatcancer/data.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df1[\"isup_grade\"]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"DATA = '../input/prostate-cancer-grade-assessment/test_images'\ndata=[]\nif os.path.exists(DATA):\n    file_names_picture=file_names(DATA)\n    isup_grade=np.zeros(len(file_names_pictures),dtype=np.int8)\n    imDF=pd.DataFrame()\n    for i in range(0,len(file_names_pictures)):\n        try:\n            imF=ImageFeatures(5,file_names_pictures[i],400,400,i)\n            p,idx=imF.extract_image_features_dataframe()\n            imDF = pd.concat([imDF,p],ignore_index=True)\n            print(\"image number \"+str(idx)+\" is processed\")\n        except TypeError:\n            continue\n        except IndexError:\n            continue\n    arr=df1.to_numpy()\n    min_max_scaler = preprocessing.MinMaxScaler()\n    x_scaled = min_max_scaler.fit_transform(arr[:,0:21])\n    knn = KNeighborsClassifier()\n    knn.fit(x_scaled, arr[:,22])\n    imDF=imDF.dropna(axis=0)\n    arr=imDF.to_numpy()\n    min_max_scaler = preprocessing.MinMaxScaler()\n    x_scaled = min_max_scaler.fit_transform(arr[:,0:21])\n    v=knn.predict(x_scaled)\n    result_dict_test={}\n    i=0\n    for num in set(imDF[\"picture_number\"]):\n        # Add each name to the names_by_rank dictionary using rank as the key\n        result_dict_test[num] = list(v[i:i+5])\n        i=i+5\n    L=[]\n    for idx in result_dict_test.keys(): \n        L.append((idx,Counter(result_dict_test[idx]).most_common(1)[0][0]))\n    for x in L:\n        isup_grade[round(x[0])]=round(x[1])\n    L1=[]\n    for file in file_names_pictures: \n        L1.append(file.split(\"/\")[-1].split(\".\")[-2])\n    \n    for n1,n2 in zip(L1,list(isup_grade)):\n        data.append([n1,n2])\ndf = pd.DataFrame(data, columns = ['image_id', 'isup_grade']) \ndf.to_csv('./submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}