{"cells": [{"execution_count": null, "metadata": {"_uuid": "01bc978be64d03dfa11fd01df92471e7b5d60368", "_cell_guid": "2ee1911a-123e-4b55-b818-2882969332fa", "_execution_state": "idle"}, "cell_type": "markdown", "source": "After long time while reboosting my poor brain :) to analyse the data the following solution be a try\n\n1. As per the data it looks like we have a training set of images with labels data in a CSV file\n2. For each training images we have a groud truth mask image\n3. Earth Mover's Distance(EMD) algorithm probably a good algortihm to solve this kind of issues as its best suited by adjusting thresholds\n4. Before starting the EMD its best to enhance the image(pre cleanup) for processing using Histogram Equalization\n5. EMD will segment the car object from each training image with a specific hard coded threshold value\n6. As its hard coded threshold its not be a good result, But our Network will solve this likewise below\n7. For each training image we have a masked image , So we have to estimate how much masked image eqauate with the EMD Segmented image\n8. Most Probably in this case my preference is Normalized Probabilistic Rand (NPR) index evaluation method which can give best result\n9. Now its time to readjust the threshold to achieve a good NPR index\n10. Once its done ,Now we move to the features extraction to make the test image best fit with the network\n11. FAST and BRISK be a good one for this case\n12. Now we have features from images , labels , threshold of EMD and NPR index\n13. To get a better result we can go with probability distribution of the above values each and do a sampling and to make a result for values in the fine gap,eg if the threshold is 1 and 3 ,but there is no image having 2 as the training set is small, we can apply that blindly and approximate the other features ,NPR index and labels value accordingly , But its a big process\n14. Now our traning set is good, Its time to make a decision tree\n15. Uisng Gradient Descent is the best option to go through each tree and test the image\n16. The best suited vlaue of labels and features give you the chance of using their threshold value , The best suit is based on gradient descent\n17. Applying the fine tuned thresolded EMD algortihm for the test image will give a good result if my brain still working correctly :)\n18. I am little lack with the submission file ,soon how to submit be here\n\neach step in each box of code ,Not guarantee to complete soon :)\n\n", "outputs": []}, {"outputs": [], "metadata": {"_uuid": "1ba819e2351882cd8ab4028a1a385a0f4de385d5", "_cell_guid": "0621af0d-3437-4b67-9e7f-6154b21915a8", "trusted": true}, "cell_type": "code", "source": "import pandas as pd\nimport numpy as np\nfrom PIL import Image, ImageDraw, ImageFilter\nfrom PIL import ImageChops, ImageStat\nimport cv2, glob, scipy\nfrom scipy import ndimage\n\ntrain = sorted(glob.glob('../input/train/*.jpg'))\nmasks = sorted(glob.glob('../input/train_masks/*.gif'))\ntest = sorted(glob.glob('../input/test/*.jpg'))\nprint(len(train), len(masks), len(test))\n\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport plotly.plotly as py\n%matplotlib inline\nplt.rcParams['figure.figsize'] = (10.0, 10.0)\n\nim = Image.open(train[1]).convert('LA');\n#plt.imshow(im);\n'''\nw, h = im.size  \ncolors = im.getcolors(w*h)\n\ndef hexencode(rgb):\n    r=rgb[0]\n    g=rgb[1]\n    b=rgb[2]\n    return '#%02x%02x%02x' % (r,g,b)\n\nfor idx, c in enumerate(colors):\n    plt.bar(idx, c[0], color=hexencode(c[1]))\n\nplt.show()*/\n'''\nnum_im = np.array(im);\nplt.hist(num_im.ravel(), bins=256, range=(0, 255))\nplt.title('Histogram for gray scale picture')\nplt.show()\n\n# Histogram Equalization\n\n\nhist,bins = np.histogram(num_im.flatten(),256,[0,256])\n\ncdf = hist.cumsum()\ncdf_normalized = cdf * hist.max()/ cdf.max()\n\nplt.plot(cdf_normalized, color = 'b')\nplt.hist(num_im.flatten(),256,[0,256], color = 'r')\nplt.xlim([0,256])\nplt.legend(('cdf','histogram'), loc = 'upper left')\nplt.show()\n\ncdf_m = np.ma.masked_equal(cdf,0)\ncdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())\ncdf = np.ma.filled(cdf_m,0).astype('uint8')\n\nimg2 = cdf[num_im]\n\nplt.hist(img2.flatten(),256,[0,256], color = 'r')\n\nplt.figure()\nplt.imshow(im) \nplt.show()\nhistEqualizedImage = Image.fromarray(img2)\nplt.figure()\nplt.imshow(histEqualizedImage) \nplt.show() \n\nfrom collections import Counter\n  \ndef Thresholding_Otsu(img):\n    nbins = 256  # or np.max(img)-np.min(img) for images with non-regular pixel values\n    pixel_counts = Counter(img.ravel())\n    counts = np.array([0 for x in range(nbins)])\n    for c in sorted(pixel_counts):\n        counts[c] = pixel_counts[c]\n    p = counts / sum(counts)\n    sigma_b = np.zeros((nbins, 1))\n    for t in range(nbins):\n        q_L = sum(p[:t])\n        q_H = sum(p[t:])\n        if q_L == 0 or q_H == 0:\n            continue\n\n        miu_L = sum(np.dot(p[:t], np.transpose(np.matrix([i for i in\n                    range(t)])))) / q_L\n        miu_H = sum(np.dot(p[t:], np.transpose(np.matrix([i for i in\n                    range(t, nbins)])))) / q_H\n        sigma_b[t] = q_L * q_H * (miu_L - miu_H) ** 2\n\n    return np.argmax(sigma_b)\n\notsuThresholdedImageArray = Thresholding_Otsu(img2);\n#plt.plot(otsuThresholdedImageArray)\nprint(otsuThresholdedImageArray)\n#otsuThresholdedImage = Image.fromarray(otsuThresholdedImageArray)\n#plt.figure()\n#plt.imshow(otsuThresholdedImage) \n#plt.show() \n", "execution_count": null}, {"outputs": [], "metadata": {"_uuid": "db953c0831dc8b9125fe106e4effff482138fb49", "_cell_guid": "819a0e4a-5b0a-4b4a-86fd-7836ec419d90", "trusted": true, "collapsed": true, "_execution_state": "idle"}, "cell_type": "code", "source": "# Autogenerated with SMOP version \n# main.py EMDSegmentation.m\n\nfrom __future__ import division\ntry:\n    from runtime import *\nexcept ImportError:\n    from smop.runtime import *\n\nclc\nclose(char('all'))\nclear(char('all'))\nAdj=1\nName,Path=uigetfile(char('*.bmp'),char('Browse BMP Image'),nargout=2)\nFileName=strcat(Path,Name)\nDataArray,_map=imread(FileName,nargout=2)\nDataArrayBackup=copy_(DataArray)\nfigure\nimshow(DataArray,_map)\ntitle(char('Original Image'))\nImH,ImW=size(DataArray,nargout=2)\nDataArray=double(DataArray)\nStartTime=copy_(cputime)\nHistogramArray=zeros(1,256)\nHistogramArray=uint32(HistogramArray)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        HistogramArray[1,DataArray(i + Adj,j + Adj) + Adj]=HistogramArray(1,DataArray(i + Adj,j + Adj) + Adj) + 1\nfigure\nbar(HistogramArray)\ntitle(char('Histogram of Original image'))\nBlockSize=15\nOptimumThreshold=128\nPMin=0.0\nP2=20 / 100.0\nPMin=P2 * ImH * ImW\nSumRange1=0.0\nfor i in arange_(0,OptimumThreshold).reshape(-1):\n    SumRange1=SumRange1 + HistogramArray(1,i + Adj)\nSumRange2=0.0\nfor i in arange_(255,OptimumThreshold + 1,- 1).reshape(-1):\n    SumRange2=SumRange2 + HistogramArray(1,i + Adj)\nSeedXj=0\nSeedXr=0\nif (SumRange1 < PMin or SumRange2 < PMin):\n    DataArray=histeq(uint8(DataArray))\n    figure\n    imshow(uint8(DataArray))\n    title(char('Hist Equalised image'))\n    for i in arange_(0,256 - 1).reshape(-1):\n        HistogramArray[1,i + Adj]=0\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            HistogramArray[1,DataArray(i + Adj,j + Adj) + Adj]=HistogramArray(1,DataArray(i + Adj,j + Adj) + Adj) + 1\n    SeedXj=0\n    SumRange1=0.0\n    for i in arange_(0,OptimumThreshold).reshape(-1):\n        SumRange1=SumRange1 + HistogramArray(1,i + Adj)\n        if (SumRange1 > (PMin)):\n            SeedXj=copy_(i)\n            break\n    SumRange2=0.0\n    SeedXr=0\n    for i in arange_(255,OptimumThreshold + 1,- 1).reshape(-1):\n        SumRange2=SumRange2 + HistogramArray(1,i + Adj)\n        if (SumRange2 > (PMin)):\n            SeedXr=copy_(i)\n            break\nelse:\n    DataArray=copy_(DataArray)\n    figure\n    imshow(uint8(DataArray))\n    title(char('Non Equalised image'))\n    for i in arange_(0,256 - 1).reshape(-1):\n        HistogramArray[1,i + Adj]=0\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            HistogramArray[1,DataArray(i + Adj,j + Adj) + Adj]=HistogramArray(1,DataArray(i + Adj,j + Adj) + Adj) + 1\n    SeedXj=0\n    SumRange1=0.0\n    for i in arange_(0,OptimumThreshold).reshape(-1):\n        SumRange1=SumRange1 + HistogramArray(1,i + Adj)\n        if (SumRange1 > (PMin)):\n            SeedXj=copy_(i)\n            break\n    SeedXr=0\n    SumRange2=0.0\n    for i in arange_(255,OptimumThreshold + 1,- 1).reshape(-1):\n        SumRange2=SumRange2 + HistogramArray(1,i + Adj)\n        if (SumRange2 > (PMin)):\n            SeedXr=copy_(i)\n            break\nDataArrayBackup=copy_(DataArray)\nDataArrayBackup=double(DataArrayBackup)\nBackupSeedXr=copy_(SeedXr)\nBackupSeedXj=copy_(SeedXj)\nSeedXMin=0\nfor i in arange_(0,255).reshape(-1):\n    if (HistogramArray(1,i + Adj) > 0):\n        SeedXMin=copy_(i)\n        break\nSeedXMax=0\nfor i in arange_(255,0,- 1).reshape(-1):\n    if (HistogramArray(1,i + Adj) > 0):\n        SeedXMax=copy_(i)\n        break\na=0\nc=0\nb=0\nDataArray=double(DataArray)\np=copy_(SeedXMin)\nq=copy_(SeedXMax)\nDenominatorSum=0.0\nNumeratorSum=0.0\nfor m in arange_(p,q).reshape(-1):\n    NumeratorSum=NumeratorSum + m * HistogramArray(1,m + Adj)\n    DenominatorSum=DenominatorSum + HistogramArray(1,m + Adj)\nb=NumeratorSum / DenominatorSum\nMaxValue=0.0\nif (_abs(b - SeedXMin) < _abs(SeedXMax - b)):\n    MaxValue=_abs(b - SeedXMin)\nelse:\n    MaxValue=_abs(SeedXMax - b)\nc=b + MaxValue\na=(2 * b) - c\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (DataArray(i + Adj,j + Adj) >= SeedXj):\n            DataArray[i + Adj,j + Adj]=DataArray(i + Adj,j + Adj)\n        else:\n            DataArray[i + Adj,j + Adj]=0\nMewA=zeros(ImH,ImW)\nMewA=double(MewA)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (DataArray(i + Adj,j + Adj) < a):\n            MewA[i + Adj,j + Adj]=0\n        else:\n            if (DataArray(i + Adj,j + Adj) >= a and DataArray(i + Adj,j + Adj) < b):\n                MewA[i + Adj,j + Adj]=(((DataArray(i + Adj,j + Adj) - double(a)) / (double(c) - double(a))) ** 2) * 2.0\n            else:\n                if (DataArray(i + Adj,j + Adj) >= b and DataArray(i + Adj,j + Adj) < c):\n                    MewA[i + Adj,j + Adj]=1.0 - (((DataArray(i + Adj,j + Adj) - double(a)) / (double(c) - double(a))) ** 2) * 2.0\n                else:\n                    MewA[i + Adj,j + Adj]=1.0\nfigure\nimshow(uint8(MewA * 255))\ntitle(char('MewA In Bright Object Image'))\nMewA_star=zeros(ImH,ImW)\nMewA_star=double(MewA_star)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (MewA(i + Adj,j + Adj) < 0.5):\n            MewA_star[i + Adj,j + Adj]=0.0\n        else:\n            MewA_star[i + Adj,j + Adj]=1.0\nMewAStarBrightObjectArray=zeros(ImH,ImW)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        MewAStarBrightObjectArray[i + Adj,j + Adj]=MewA_star(i + Adj,j + Adj)\nfigure\nimshow(uint8(MewA_star * 255))\ntitle(char('MewA_star In Bright Object Image'))\nSumValue=0.0\nSumValue=double(SumValue)\nChy_BrighterObject=0.0\nChy_BrighterObject=double(Chy_BrighterObject)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        SumValue=SumValue + (MewA(i + Adj,j + Adj) - MewA_star(i + Adj,j + Adj)) ** 2\nChy_BrighterObject=(sqrt(SumValue) * 2.0) / sqrt(ImH * ImW)\ndisp(char('Chy_BrighterObject is ='))\ndisp(Chy_BrighterObject)\nChy_BrighterObject_ForSingleElementArray=zeros(ImH,ImW)\nChy_BrighterObject_ForSingleElementArray=double(Chy_BrighterObject_ForSingleElementArray)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        Chy_BrighterObject_ForSingleElementArray[i + Adj,j + Adj]=2 * (sqrt((MewA(i + Adj,j + Adj) - MewA_star(i + Adj,j + Adj)) ** 2)) / sqrt(1)\nfigure\nimshow(uint8((Chy_BrighterObject_ForSingleElementArray / _max(_max(Chy_BrighterObject_ForSingleElementArray))) * 255))\ntitle(char('Chy_BrighterObject_ForSingleElementArray'))\nfigure\nbar(imhist(uint8((Chy_BrighterObject_ForSingleElementArray / _max(_max(Chy_BrighterObject_ForSingleElementArray))) * 255)))\ntitle(char('Histogram for Chy_BrighterObject'))\nSeedXMin=0\nfor i in arange_(0,255).reshape(-1):\n    if (HistogramArray(1,i + Adj) > 0):\n        SeedXMin=copy_(i)\n        break\nSeedXMax=0\nfor i in arange_(255,0,- 1).reshape(-1):\n    if (HistogramArray(1,i + Adj) > 0):\n        SeedXMax=copy_(i)\n        break\na=0\nc=0\nb=0\nDataArray=double(DataArray)\np=copy_(SeedXMin)\nq=copy_(SeedXMax)\nDenominatorSum=0.0\nNumeratorSum=0.0\nfor m in arange_(p,q).reshape(-1):\n    NumeratorSum=NumeratorSum + m * HistogramArray(1,m + Adj)\n    DenominatorSum=DenominatorSum + HistogramArray(1,m + Adj)\nb=NumeratorSum / DenominatorSum\nMaxValue=0.0\nif (_abs(b - SeedXMin) < _abs(SeedXMax - b)):\n    MaxValue=_abs(b - SeedXMin)\nelse:\n    MaxValue=_abs(SeedXMax - b)\nc=b + MaxValue\na=(2 * b) - c\nDataArray=copy_(DataArrayBackup)\nDataArray=double(DataArray)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (DataArray(i + Adj,j + Adj) < SeedXr):\n            DataArray[i + Adj,j + Adj]=DataArray(i + Adj,j + Adj)\n        else:\n            DataArray[i + Adj,j + Adj]=255\nMewA=zeros(ImH,ImW)\nMewA=double(MewA)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (DataArray(i + Adj,j + Adj) < a):\n            MewA[i + Adj,j + Adj]=1\n        else:\n            if (DataArray(i + Adj,j + Adj) >= a and DataArray(i + Adj,j + Adj) < b):\n                MewA[i + Adj,j + Adj]=1.0 - (((DataArray(i + Adj,j + Adj) - double(a)) / (double(c) - double(a))) ** 2) * 2.0\n            else:\n                if (DataArray(i + Adj,j + Adj) >= b and DataArray(i + Adj,j + Adj) < c):\n                    MewA[i + Adj,j + Adj]=(((DataArray(i + Adj,j + Adj) - double(a)) / (double(c) - double(a))) ** 2) * 2.0\n                else:\n                    MewA[i + Adj,j + Adj]=0.0\nfigure\nimshow(uint8(MewA * 255))\ntitle(char('MewA image In Dark Object Image'))\nMewA_star=zeros(ImH,ImW)\nMewA_star=double(MewA_star)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (MewA(i + Adj,j + Adj) < 0.5):\n            MewA_star[i + Adj,j + Adj]=1.0\n        else:\n            MewA_star[i + Adj,j + Adj]=0.0\nMewAStarDarkObjectArray=zeros(ImH,ImW)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        MewAStarDarkObjectArray[i + Adj,j + Adj]=MewA_star(i + Adj,j + Adj)\nfigure\nimshow(uint8(MewA_star * 255))\ntitle(char('MewA_star In Dark Object Image'))\nSumValue=0.0\nSumValue=double(SumValue)\nChy_DarkerObject=0.0\nChy_DarkerObject=double(Chy_DarkerObject)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        SumValue=SumValue + (MewA(i + Adj,j + Adj) - MewA_star(i + Adj,j + Adj)) ** 2\nChy_DarkerObject=(sqrt(SumValue) * 2.0) / sqrt(ImH * ImW)\ndisp(char('Chy_DarkerObject ='))\ndisp(Chy_DarkerObject)\nChy_DarkerObject_ForSingleElementArray=zeros(ImH,ImW)\nChy_DarkerObject_ForSingleElementArray=double(Chy_DarkerObject_ForSingleElementArray)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        Chy_DarkerObject_ForSingleElementArray[i + Adj,j + Adj]=2 * (sqrt((MewA(i + Adj,j + Adj) - MewA_star(i + Adj,j + Adj)) ** 2)) / sqrt(1)\nfigure\nimshow(uint8((Chy_DarkerObject_ForSingleElementArray / _max(_max(Chy_DarkerObject_ForSingleElementArray))) * 255))\ntitle(char('Chy_DarkerObject_ForSingleElementArray'))\nfigure\nbar(imhist(uint8((Chy_DarkerObject_ForSingleElementArray / _max(_max(Chy_DarkerObject_ForSingleElementArray))) * 255)))\ntitle(char('Histogram for Chy_DarkerObject'))\nAlphaValue=0.0\nAlphaValue=double(AlphaValue)\nAlphaValue=(Chy_BrighterObject / (Chy_DarkerObject))\nAlphaValue=1\nSegmentedImage=zeros(ImH,ImW)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (DataArray(i + Adj,j + Adj) <= SeedXj):\n            SegmentedImage[i + Adj,j + Adj]=0\n        else:\n            if (DataArray(i + Adj,j + Adj) >= SeedXr):\n                SegmentedImage[i + Adj,j + Adj]=1\n            else:\n                if (Chy_BrighterObject_ForSingleElementArray(i + Adj,j + Adj) < (AlphaValue * Chy_DarkerObject_ForSingleElementArray(i + Adj,j + Adj))):\n                    SegmentedImage[i + Adj,j + Adj]=1\n                else:\n                    SegmentedImage[i + Adj,j + Adj]=0\nfigure\nimshow(SegmentedImage)\ntitle(char('SegmentedImage'))\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (MewAStarBrightObjectArray(i + Adj,j + Adj) == 1):\n            SegmentedImage[i + Adj,j + Adj]=1\nfor i in arange_(1,ImH - 2).reshape(-1):\n    for j in arange_(1,ImW - 2).reshape(-1):\n        if (MewAStarDarkObjectArray(i + Adj,j + Adj) == 1 and MewAStarDarkObjectArray(i - 1 + Adj,j - 1 + Adj) == 0 and MewAStarDarkObjectArray(i - 1 + Adj,j + 0 + Adj) == 0 and MewAStarDarkObjectArray(i - 1 + Adj,j + 1 + Adj) == 0 and MewAStarDarkObjectArray(i + 0 + Adj,j - 1 + Adj) == 0 and MewAStarDarkObjectArray(i + 0 + Adj,j + 1 + Adj) == 0 and MewAStarDarkObjectArray(i + 1 + Adj,j - 1 + Adj) == 0 and MewAStarDarkObjectArray(i + 1 + Adj,j + 0 + Adj) == 0 and MewAStarDarkObjectArray(i + 1 + Adj,j + 1 + Adj) == 0):\n            SegmentedImage[i + Adj,j + Adj]=1\nfigure\nimshow(SegmentedImage * 255)\ntitle(char('Filtered SegmentedImage'))\nDataArray=copy_(DataArrayBackup)\nMaxDiscrepancySementedImage=copy_(SegmentedImage)\nBlockSize=15\nTempForegroundCount=0.0\nTempForegroundCount=double(TempForegroundCount)\nTempBackgroundCount=0.0\nTempBackgroundCount=double(TempBackgroundCount)\nfor i in arange_(0,ImH - 1 - BlockSize,BlockSize).reshape(-1):\n    for j in arange_(0,ImW - 1 - BlockSize,BlockSize).reshape(-1):\n        if (MaxDiscrepancySementedImage(i + Adj,j + Adj) == 1):\n            TempForegroundCount=TempForegroundCount + 1\n        else:\n            TempBackgroundCount=TempBackgroundCount + 1\nif (TempForegroundCount > TempBackgroundCount):\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            MaxDiscrepancySementedImage[i + Adj,j + Adj]=(1 - MaxDiscrepancySementedImage(i + Adj,j + Adj))\n    for i in arange_(0,BlockSize - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            MaxDiscrepancySementedImage[i + Adj,j + Adj]=0\n    for i in arange_(ImH - 1 - BlockSize - 1,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            MaxDiscrepancySementedImage[i + Adj,j + Adj]=0\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,BlockSize - 1).reshape(-1):\n            MaxDiscrepancySementedImage[i + Adj,j + Adj]=0\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(ImW - 1,ImW - 1 - BlockSize - 1,- 1).reshape(-1):\n            MaxDiscrepancySementedImage[i + Adj,j + Adj]=0\nEdgeImage=edge(MaxDiscrepancySementedImage,char('canny'))\nfigure\nimshow(EdgeImage)\ntitle(char('EdgeImage in Initial trial stage'))\nMarkedImage=copy_(DataArray)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (EdgeImage(i + Adj,j + Adj) == 1):\n            MarkedImage[i + Adj,j + Adj]=255\nfigure\nimshow(uint8(MarkedImage))\ntitle(char('MarkedImage in initial trial stage'))\nBinaryMarkedImageBackup=zeros(ImH,ImW)\nSegmentedImage=zeros(ImH,ImW)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        SegmentedImage[i + Adj,j + Adj]=MaxDiscrepancySementedImage(i + Adj,j + Adj)\nBlockSize1=copy_(BlockSize)\nfor itt in arange_(0,1).reshape(-1):\n    InsideCumSum=zeros(1,256)\n    InsideCumSum=double(InsideCumSum)\n    OutsideCumSum=zeros(1,256)\n    OutsideCumSum=double(OutsideCumSum)\n    InsideHistogram=zeros(1,256)\n    InsideHistogram=double(InsideHistogram)\n    OutsideHistogram=zeros(1,256)\n    OutsideHistogram=double(OutsideHistogram)\n    InsideCount=0\n    InsideCount=double(InsideCount)\n    OutsideCount=0\n    OutsideCount=double(OutsideCount)\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            if (SegmentedImage(i + Adj,j + Adj) == 1):\n                InsideHistogram[1,DataArray(i + Adj,j + Adj) + Adj]=InsideHistogram(1,DataArray(i + Adj,j + Adj) + Adj) + 1\n                InsideCount=InsideCount + 1\n            else:\n                OutsideHistogram[1,DataArray(i + Adj,j + Adj) + Adj]=OutsideHistogram(1,DataArray(i + Adj,j + Adj) + Adj) + 1\n                OutsideCount=OutsideCount + 1\n    InsideCumSum=cumsum(InsideHistogram)\n    OutsideCumSum=cumsum(OutsideHistogram)\n    InsideCumSum=(InsideCumSum / InsideCount)\n    OutsideCumSum=(OutsideCumSum / OutsideCount)\n    BlockSize=9\n    BlockHist=zeros(1,256)\n    BlockHist=double(BlockHist)\n    FinalMarkedImage=zeros(ImH,ImW)\n    FinalMarkedImage[arange_(),arange_()]=0\n    ForegroundDist=0.0\n    ForegroundDist=double(ForegroundDist)\n    BackgroundDist=0.0\n    BackgroundDist=double(BackgroundDist)\n    for i in arange_(0 + fix(BlockSize / 2),ImH - 1 - fix(BlockSize / 2)).reshape(-1):\n        for j in arange_(0 + fix(BlockSize / 2),ImW - 1 - fix(BlockSize / 2)).reshape(-1):\n            BlockHist[arange_(),arange_()]=0.0\n            for k in arange_(- fix(BlockSize / 2),fix(BlockSize / 2)).reshape(-1):\n                for L in arange_(- fix(BlockSize / 2),fix(BlockSize / 2)).reshape(-1):\n                    BlockHist[1,DataArray(i + k + Adj,j + L + Adj) + Adj]=BlockHist(1,DataArray(i + k + Adj,j + L + Adj) + Adj) + 1\n            BlockCumSum=cumsum(BlockHist) / (BlockSize * BlockSize)\n            ForegroundDist=0.0\n            BackgroundDist=0.0\n            for ii in arange_(0,256 - 1).reshape(-1):\n                ForegroundDist=ForegroundDist + _abs(BlockCumSum(1,ii + Adj) - InsideCumSum(1,ii + Adj))\n                BackgroundDist=BackgroundDist + _abs(BlockCumSum(1,ii + Adj) - OutsideCumSum(1,ii + Adj))\n            if (ForegroundDist < BackgroundDist):\n                FinalMarkedImage[i + Adj,j + Adj]=1\n            else:\n                FinalMarkedImage[i + Adj,j + Adj]=0\n    figure\n    imshow(uint8(FinalMarkedImage * 255))\n    title(char('Partial  Refinement Image'))\n    BinaryMarkedImageBackup=copy_(FinalMarkedImage)\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            SegmentedImage[i + Adj,j + Adj]=FinalMarkedImage(i + Adj,j + Adj)\n    EdgeImage=edge(FinalMarkedImage,char('canny'))\n    figure\n    imshow(uint8(EdgeImage * 255))\n    title(char('EdgeImage refinement process'))\n    MarkedImage=copy_(DataArray)\n    for i in arange_(0,ImH - 1).reshape(-1):\n        for j in arange_(0,ImW - 1).reshape(-1):\n            if (EdgeImage(i + Adj,j + Adj) == 1):\n                MarkedImage[i + Adj,j + Adj]=255\n    figure\n    imshow(uint8(MarkedImage))\n    title(char('Refinement process MarkedImage'))\nfigure\nimshow(uint8(MarkedImage))\ntitle(char('Final Segmented Image'))\nNoOfPixelsInBackgroundObject=0.0\nOutputImage1=zeros(ImH,ImW)\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (BinaryMarkedImageBackup(i + Adj,j + Adj) == 0):\n            OutputImage1[i + Adj,j + Adj]=DataArrayBackup(i + Adj,j + Adj)\n            NoOfPixelsInBackgroundObject=NoOfPixelsInBackgroundObject + 1\nfigure\nimshow(uint8(OutputImage1))\ntitle(char('Background Object'))\ndisp(char('NoOfPixelsInBackgroundObject='))\ndisp(NoOfPixelsInBackgroundObject)\nOutputImage2=zeros(ImH,ImW)\nNoOfPixelsInForegroundObject=0.0\nfor i in arange_(0,ImH - 1).reshape(-1):\n    for j in arange_(0,ImW - 1).reshape(-1):\n        if (BinaryMarkedImageBackup(i + Adj,j + Adj) == 1):\n            OutputImage2[i + Adj,j + Adj]=DataArrayBackup(i + Adj,j + Adj)\n            NoOfPixelsInForegroundObject=NoOfPixelsInForegroundObject + 1\nfigure\nimshow(uint8(OutputImage2))\ntitle(char('Foreground Object'))\ndisp(char('NoOfPixelsInForegroundObject='))\ndisp(NoOfPixelsInForegroundObject)\nTimeTaken=cputime() - StartTime\ndisp(char('TimeTaken for EMD method'))\ndisp(TimeTaken)\n", "execution_count": null}], "nbformat": 4, "metadata": {"language_info": {"version": "3.6.1", "mimetype": "text/x-python", "file_extension": ".py", "nbconvert_exporter": "python", "codemirror_mode": {"version": 3, "name": "ipython"}, "pygments_lexer": "ipython3", "name": "python"}, "kernelspec": {"display_name": "Python 3", "name": "python3", "language": "python"}}, "nbformat_minor": 1}