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) '''
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))
def test_to_gray(): pieces = pylab.imread('pymorph/data/pieces_bw.tif') assert np.all(pymorph.to_gray(pieces) == pieces[:,:,:3].max(2))
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) '''