Example #1
0
    def segment(self, widget):  # running converting and indexing bash script

        #img = mahotas.imread('thyroid.png', as_grey=True)
        #img = img.astype(np.uint8)

        ##segmented = mahotas.otsu(photo)
        ##f = segmented.astype(np.uint8)
        ### mahotas.imsave('segmented.png')

        ##mahotas.imsave('.png')
        ## savefig(segmented)
        #T_otsu = mahotas.thresholding.otsu(img)
        #seeds,_ = mahotas.label(img > T_otsu)
        #labeled = mahotas.cwatershed(img.max() - img, seeds)
        #pylab.imshow(labeled)
        #pylab.savefig('seeds.png')
        ##imshow(photo > segmented)
        #gray()

        dna = mahotas.imread('thyroid.png')
        dna = dna.astype(np.uint8)
        dna = dna.squeeze()
        dna = pymorph.to_gray(dna)
        #print dna.shape
        #print dna.dtype
        #print dna.max()
        #print dna.min()
        #dnaf = mahotas.gaussian_filter(dna, 8)
        #T = mahotas.thresholding.otsu(dnaf)
        #labeled, nr_objects = ndimage.label(dnaf > T)
        #print nr_objects
        #pylab.imshow(labeled)
        #pylab.jet()
        #pylab.show()

        T = mahotas.thresholding.otsu(dna)
        pylab.imshow(dna > T)
        gray()
        pylab.savefig('Segmentation_Results.png')

        pylab.show()

        show()
def tentDetection_wt_mm(strInputFile, maxTentArea, strOutputFile, strShape='box', iThresh_coeff=0):
    import pywt
    import pymorph as pymm
    
    objImg = osgeo.gdal.Open(strInputFile, GA_ReadOnly)
    nRasterCount = objImg.RasterCount
    poDataset = objImg.ReadAsArray().astype(np.float)
    geotransform = objImg.GetGeoTransform()
    pixelWidth = np.fabs(geotransform[1])
    pixelHeight = np.fabs(geotransform[5])
    resolution = pixelWidth * pixelHeight
    # NoDataValue = objImg.GetRasterBand(1).GetNoDataValue()
    
    # gray scale image
    if (nRasterCount == 1):  
        objnImg = pymm.to_int32(poDataset)
    # RGB image   
    elif(nRasterCount == 3):
        objnImg = pymm.to_gray(poDataset) 
    else:
        print 'it only supports gray-scale or RGB image'
        sys.exit(1)
        
    # determine the structure element
    iNum = int(np.sqrt(maxTentArea) / resolution) + 1
    if (strShape == 'box'):
        objStructureElement = pymm.sebox(iNum)
    elif (strShape == 'cross'):
        objStructureElement = pymm.secross(iNum)
    else:
        objStructureElement = pymm.sedisk(iNum)
          
    # decomposition until 1 level
    wp = pywt.WaveletPacket2D(data=objnImg, wavelet='db4', mode='sym', maxlevel=1)
    # iMaxLevel = wp.maxlevel()
    # top-hat
    wp['h'].data = pymm.openrecth(pymm.to_int32(wp['h'].data), objStructureElement, objStructureElement)
    wp['v'].data = pymm.openrecth(pymm.to_int32(wp['v'].data), objStructureElement, objStructureElement) 
    wp['d'].data = pymm.openrecth(pymm.to_int32(wp['d'].data), objStructureElement, objStructureElement)
    wp['a'].data = 0.5 * wp['a'].data
    # reconstruction 
    wp.reconstruct(update=True)
    
    # top-hat for reconstructed image
    objtophat = pymm.openrecth(pymm.to_int32(wp.data), objStructureElement, objStructureElement)
    
    # y = mean + k*std
    (minValue, maxValue, meanValue, stdValue) = objImg.GetRasterBand(1).GetStatistics(0, 1)
    
    if (nRasterCount == 3):
       (minValue2, maxValue2, meanValue2, stdValue2) = objImg.GetRasterBand(2).GetStatistics(0, 1)
       (minValue3, maxValue3, meanValue3, stdValue3) = objImg.GetRasterBand(3).GetStatistics(0, 1)
       meanValue = 0.2989 * meanValue + 0.5870 * meanValue2 + 0.1140 * meanValue3
       maxValue = 0.2989 * maxValue + 0.5870 * maxValue2 + 0.1140 * maxValue3
    
    # meanValue = 438
    # maxValue = 2047

    threshad = meanValue + iThresh_coeff * stdValue
    
    objTent = pymm.threshad(objtophat, stdValue, maxValue)
            
    data_list = []
    data_list.append(objTent)
   
    WriteOutputImage(strOutputFile, 1, data_list, 0, 0, 0, strInputFile)
def tentDetection_MM(strInputFile, maxTentArea, strOutputFile, strShape='box', iThresh_coeff=0):
    
    # five step to do this
    # 1. opening-determine the square structure element (6-60 m2/resolution)
    # 2. opening by reconstruction
    # 3. top-hat by reconstruction
    # 4. lower threshold
    # 5. double threshold
    import pymorph as pymm
        
    objImg = osgeo.gdal.Open(strInputFile, GA_ReadOnly)
    nRasterCount = objImg.RasterCount
    poDataset = objImg.ReadAsArray().astype(np.float)
    geotransform = objImg.GetGeoTransform()
    pixelWidth = np.fabs(geotransform[1])
    pixelHeight = np.fabs(geotransform[5])
    resolution = pixelWidth * pixelHeight
    # NoDataValue = objImg.GetRasterBand(1).GetNoDataValue()
    
    # gray scale image
    if (nRasterCount == 1):  
        objnImg = pymm.to_int32(poDataset)
    # RGB image   
    elif(nRasterCount == 3):
        objnImg = pymm.to_gray(poDataset) 
    else:
        print 'it only supports gray-scale or RGB image'
        sys.exit(1)
        
    # determine the structure element
    iNum = int(np.sqrt(maxTentArea) / resolution) + 1
    if (strShape == 'box'):
        objStructureElement = pymm.sebox(iNum)
    elif (strShape == 'cross'):
        objStructureElement = pymm.secross(iNum)
    else:
        objStructureElement = pymm.sedisk(iNum)
          
    # opening
    objOpen = pymm.open(objnImg, objStructureElement)
                   
    # opening by reconstruction
    objOpenRec = pymm.openrec(objOpen, objStructureElement, objStructureElement)
        
    objtophat = pymm.openrecth(objnImg, objStructureElement, objStructureElement)
    # objtophat = pymm.subm(objnImg, objOpenRec)
              
    # objTent = pymm.threshad(objtophat, 0.25 * objnImg, 0.40 * objnImg)
    # y = mean + k*std
    (minValue, maxValue, meanValue, stdValue) = objImg.GetRasterBand(1).GetStatistics(0, 1)
    
    if (nRasterCount == 3):
       (minValue2, maxValue2, meanValue2, stdValue2) = objImg.GetRasterBand(2).GetStatistics(0, 1)
       (minValue3, maxValue3, meanValue3, stdValue3) = objImg.GetRasterBand(3).GetStatistics(0, 1)
       meanValue = 0.2989 * meanValue + 0.5870 * meanValue2 + 0.1140 * meanValue3
       maxValue = 0.2989 * maxValue + 0.5870 * maxValue2 + 0.1140 * maxValue3
       
    # meanValue = 438
    # maxValue = 2047
    threshad = meanValue + iThresh_coeff * stdValue
    
    objTent = pymm.threshad(objtophat, threshad, maxValue)
            
    data_list = []
    data_list.append(objTent)
   
    WriteOutputImage(strOutputFile, 1, data_list, 0, 0, 0, strInputFile)

    '''
Example #4
0
def test_2d():
    img = pylab.imread('pymorph/data/fabric.tif')
    assert img.shape == pymorph.to_gray(img).shape
    assert np.all(img == pymorph.to_gray(img))
Example #5
0
def test_to_gray():
    pieces = pylab.imread('pymorph/data/pieces_bw.tif')
    assert np.all(pymorph.to_gray(pieces) == pieces[:,:,:3].max(2))
Example #6
0
def tentDetection_wt_mm(strInputFile,
                        maxTentArea,
                        strOutputFile,
                        strShape='box',
                        iThresh_coeff=0):
    import pywt
    import pymorph as pymm

    objImg = osgeo.gdal.Open(strInputFile, GA_ReadOnly)
    nRasterCount = objImg.RasterCount
    poDataset = objImg.ReadAsArray().astype(np.float)
    geotransform = objImg.GetGeoTransform()
    pixelWidth = np.fabs(geotransform[1])
    pixelHeight = np.fabs(geotransform[5])
    resolution = pixelWidth * pixelHeight
    # NoDataValue = objImg.GetRasterBand(1).GetNoDataValue()

    # gray scale image
    if (nRasterCount == 1):
        objnImg = pymm.to_int32(poDataset)
    # RGB image
    elif (nRasterCount == 3):
        objnImg = pymm.to_gray(poDataset)
    else:
        print 'it only supports gray-scale or RGB image'
        sys.exit(1)

    # determine the structure element
    iNum = int(np.sqrt(maxTentArea) / resolution) + 1
    if (strShape == 'box'):
        objStructureElement = pymm.sebox(iNum)
    elif (strShape == 'cross'):
        objStructureElement = pymm.secross(iNum)
    else:
        objStructureElement = pymm.sedisk(iNum)

    # decomposition until 1 level
    wp = pywt.WaveletPacket2D(data=objnImg,
                              wavelet='db4',
                              mode='sym',
                              maxlevel=1)
    # iMaxLevel = wp.maxlevel()
    # top-hat
    wp['h'].data = pymm.openrecth(pymm.to_int32(wp['h'].data),
                                  objStructureElement, objStructureElement)
    wp['v'].data = pymm.openrecth(pymm.to_int32(wp['v'].data),
                                  objStructureElement, objStructureElement)
    wp['d'].data = pymm.openrecth(pymm.to_int32(wp['d'].data),
                                  objStructureElement, objStructureElement)
    wp['a'].data = 0.5 * wp['a'].data
    # reconstruction
    wp.reconstruct(update=True)

    # top-hat for reconstructed image
    objtophat = pymm.openrecth(pymm.to_int32(wp.data), objStructureElement,
                               objStructureElement)

    # y = mean + k*std
    (minValue, maxValue, meanValue,
     stdValue) = objImg.GetRasterBand(1).GetStatistics(0, 1)

    if (nRasterCount == 3):
        (minValue2, maxValue2, meanValue2,
         stdValue2) = objImg.GetRasterBand(2).GetStatistics(0, 1)
        (minValue3, maxValue3, meanValue3,
         stdValue3) = objImg.GetRasterBand(3).GetStatistics(0, 1)
        meanValue = 0.2989 * meanValue + 0.5870 * meanValue2 + 0.1140 * meanValue3
        maxValue = 0.2989 * maxValue + 0.5870 * maxValue2 + 0.1140 * maxValue3

    # meanValue = 438
    # maxValue = 2047

    threshad = meanValue + iThresh_coeff * stdValue

    objTent = pymm.threshad(objtophat, stdValue, maxValue)

    data_list = []
    data_list.append(objTent)

    WriteOutputImage(strOutputFile, 1, data_list, 0, 0, 0, strInputFile)
Example #7
0
def tentDetection_MM(strInputFile,
                     maxTentArea,
                     strOutputFile,
                     strShape='box',
                     iThresh_coeff=0):

    # five step to do this
    # 1. opening-determine the square structure element (6-60 m2/resolution)
    # 2. opening by reconstruction
    # 3. top-hat by reconstruction
    # 4. lower threshold
    # 5. double threshold
    import pymorph as pymm

    objImg = osgeo.gdal.Open(strInputFile, GA_ReadOnly)
    nRasterCount = objImg.RasterCount
    poDataset = objImg.ReadAsArray().astype(np.float)
    geotransform = objImg.GetGeoTransform()
    pixelWidth = np.fabs(geotransform[1])
    pixelHeight = np.fabs(geotransform[5])
    resolution = pixelWidth * pixelHeight
    # NoDataValue = objImg.GetRasterBand(1).GetNoDataValue()

    # gray scale image
    if (nRasterCount == 1):
        objnImg = pymm.to_int32(poDataset)
    # RGB image
    elif (nRasterCount == 3):
        objnImg = pymm.to_gray(poDataset)
    else:
        print 'it only supports gray-scale or RGB image'
        sys.exit(1)

    # determine the structure element
    iNum = int(np.sqrt(maxTentArea) / resolution) + 1
    if (strShape == 'box'):
        objStructureElement = pymm.sebox(iNum)
    elif (strShape == 'cross'):
        objStructureElement = pymm.secross(iNum)
    else:
        objStructureElement = pymm.sedisk(iNum)

    # opening
    objOpen = pymm.open(objnImg, objStructureElement)

    # opening by reconstruction
    objOpenRec = pymm.openrec(objOpen, objStructureElement,
                              objStructureElement)

    objtophat = pymm.openrecth(objnImg, objStructureElement,
                               objStructureElement)
    # objtophat = pymm.subm(objnImg, objOpenRec)

    # objTent = pymm.threshad(objtophat, 0.25 * objnImg, 0.40 * objnImg)
    # y = mean + k*std
    (minValue, maxValue, meanValue,
     stdValue) = objImg.GetRasterBand(1).GetStatistics(0, 1)

    if (nRasterCount == 3):
        (minValue2, maxValue2, meanValue2,
         stdValue2) = objImg.GetRasterBand(2).GetStatistics(0, 1)
        (minValue3, maxValue3, meanValue3,
         stdValue3) = objImg.GetRasterBand(3).GetStatistics(0, 1)
        meanValue = 0.2989 * meanValue + 0.5870 * meanValue2 + 0.1140 * meanValue3
        maxValue = 0.2989 * maxValue + 0.5870 * maxValue2 + 0.1140 * maxValue3

    # meanValue = 438
    # maxValue = 2047
    threshad = meanValue + iThresh_coeff * stdValue

    objTent = pymm.threshad(objtophat, threshad, maxValue)

    data_list = []
    data_list.append(objTent)

    WriteOutputImage(strOutputFile, 1, data_list, 0, 0, 0, strInputFile)
    '''