Exemplo n.º 1
0
def kmea(colorArray, iterations, fileName):
    print 'Kmeans'

    print colorArray
    print iterations
    print fileName
    dataset = tifwork.openTIF(fileName)

    (cols, rows, bands, bandArr) = tifwork.detailsTIF(dataset)

    bandArr = tifwork.getBand(dataset, bands, bandArr)

    imageArray = np.array(bandArr, dtype=float)

    clusters = len(colorArray)
    print 'clusters = ', clusters
    #iterations = 3

    (clusterNumber, colorArr) = kmeans(imageArray, clusters, iterations)

    #print colorArray.shape
    #print clusterNumber

    clusteredArray = np.zeros((rows, cols, 3))

    for i in range(clusters):
        index = clusterNumber == i
        clusteredArray[index] = colorArray[i]

    scipy.misc.imsave('kMeans.jpg', clusteredArray)

    imageGUI.imdisplay('kMeans.jpg', 'Kmeans-Image')
    print 'kmeans done'
Exemplo n.º 2
0
def kmeans(X,
           max_clusters=10,
           max_iterations=20,
           distance='euclidean',
           **kwargs):

    # input processing ########################################################################
    X, distance = _how_spectral_library_expects_data_and_distance(X, distance)

    # do the clustering (call spectral.kmeans)
    clus_idx, clus_centers = spectral.kmeans(X,
                                             nclusters=max_clusters,
                                             max_iterations=max_iterations,
                                             distance=distance,
                                             **kwargs)

    return _how_I_like_clus_idx_and_clus_centers(clus_idx, clus_centers)
Exemplo n.º 3
0
#Adjust (either zero-pad or cut) classification array to work with source raster
(cx, cy) = maskar.shape
if src_raster_num_bands > classification_images_num_bands:
    zerar = np.zeros((cx, cy))
    diff = src_raster_num_bands - classification_images_num_bands
    for i in range(diff):
        classar = np.dstack((classar, zerar))

#Create training class and model
trcls = sp.create_training_classes(classar, maskar)
gmlc = sp.GaussianClassifier(trcls)
mldc = sp.MahalanobisDistanceClassifier(trcls)

#Classify image and display results
(kclmap, c) = sp.kmeans(barall, 12, 30)  #unsupervised
gclmap = gmlc.classify_image(barall)  #supervised
mclmap = mldc.classify_image(barall)  #supervised


#Define classification colors for array conversion
def num2colR(arg):
    switcher = {
        1: 255,
        2: 0,
        3: 255,
        4: 255,
        5: 255,
        6: 0,
        7: 0,
        8: 0,
import matplotlib.pyplot as plt
import numpy as np
import spectral as spy
from scipy.io import loadmat

if __name__ == '__main__':
    data = loadmat('Indian_pines_corrected.mat')
    data = data['indian_pines_corrected']

    gt = loadmat('Indian_pines_gt.mat')
    gt = gt['indian_pines_gt']
    
    ntopics = 17   # number of topics to generate
    (kmeans_classes, c) = spy.kmeans(data, nclusters=ntopics, max_iterations=100)
    kmeans_classes += 1
        
    
    fig = plt.figure(figsize=(12,6))
    p = plt.subplot(2, 1, 1)
    v = spy.imshow(classes=gt, fignum=fig.number)
    p.set_title('Ground Truth')
    
    p = plt.subplot(2, 1, 2)
    v = spy.imshow(classes=kmeans_classes , fignum=fig.number)
    p.set_title('k-means classes');
    plt.show(v)
 def perform_kmeans_clustering(self, filePath):
     img = open_image(filePath).load()
     (self.kmeans_map, self.kmeans_clusters) = kmeans(img, self.numClusters, self.numIterations)
Exemplo n.º 6
0
print 'Pixel Size: ',data_f.GetGeoTransform()[1],',',data_f.GetGeoTransform()[5]

#Create training class and model
tclass = sp.create_training_classes(tdata, tmask)
gmlc = sp.GaussianClassifier(tclass)
mldc = sp.MahalanobisDistanceClassifier(tclass)

# Read in data raster
data = np.zeros((data_f.RasterYSize, data_f.RasterXSize, data_nband))
for i in range(len(trefs)):
  for j in range(data_nband):
    data[:, :, j] = data_f.GetRasterBand(j+1).ReadAsArray()

#Classify image and display results
print("K-Means")
(kclmap,c) = sp.kmeans(data,kmeans_clusters,kmeans_iterations) #unsupervised
print("Gaussian")
gclmap = gmlc.classify_image(data) #supervised
print("Mahalanobis")
mclmap = mldc.classify_image(data) #supervised

#Define classification colors for array conversion
rlut = np.array([0, 255, 0,   255, 255, 255, 0,   0,   0, 100, 255, 255, 100])
glut = np.array([0, 255, 255, 0,   255, 0,   255, 0,   0, 255, 100, 255, 100])
blut = np.array([0, 255, 255, 255, 0,   0,   0,   255, 0, 255, 255, 100, 255])

#Convert kmeans array
print 'Kmeans Unsupervised Classification .tif Generation'
r = rlut[kclmap].astype('uint8')
g = glut[kclmap].astype('uint8')
b = blut[kclmap].astype('uint8')
folder = r"D:\osgeopy-data\Landsat\Utah"
raster_fns = ["LE70380322000181EDC02_60m.tif", "LE70380322000181EDC02_TIR_60m.tif"]
out_fn = "kmeans_prediction_60m.tif"

# Function from list 10.10.
def stack_bands(filenames):
    """Returns a 3D array containing all band data from all files."""
    bands = []
    for fn in raster_fns:
        ds = gdal.Open(fn)
        for i in range(1, ds.RasterCount + 1):
            bands.append(ds.GetRasterBand(i).ReadAsArray())
    return np.dstack(bands)


# Stack the bands and run the analysis.
os.chdir(folder)
data = pb.stack_bands(raster_fns)
classes, centers = spectral.kmeans(data)

# Save the output.
ds = gdal.Open(raster_fns[0])
out_ds = pb.make_raster(ds, out_fn, classes, gdal.GDT_Byte)
levels = pb.compute_overview_levels(out_ds.GetRasterBand(1))
out_ds.BuildOverviews("NEAREST", levels)
out_ds.FlushCache()
out_ds.GetRasterBand(1).ComputeStatistics(False)

del out_ds, ds
Exemplo n.º 8
0
    'LE70380322000181EDC02_60m.tif', 'LE70380322000181EDC02_TIR_60m.tif'
]
out_fn = 'kmeans_prediction_60m.tif'


# Function from list 10.10.
def stack_bands(filenames):
    """Returns a 3D array containing all band data from all files."""
    bands = []
    for fn in raster_fns:
        ds = gdal.Open(fn)
        for i in range(1, ds.RasterCount + 1):
            bands.append(ds.GetRasterBand(i).ReadAsArray())
    return np.dstack(bands)


# Stack the bands and run the analysis.
os.chdir(folder)
data = pb.stack_bands(raster_fns)
classes, centers = spectral.kmeans(data)

# Save the output.
ds = gdal.Open(raster_fns[0])
out_ds = pb.make_raster(ds, out_fn, classes, gdal.GDT_Byte)
levels = pb.compute_overview_levels(out_ds.GetRasterBand(1))
out_ds.BuildOverviews('NEAREST', levels)
out_ds.FlushCache()
out_ds.GetRasterBand(1).ComputeStatistics(False)

del out_ds, ds
Exemplo n.º 9
0
)[5]

#Create training class and model
tclass = sp.create_training_classes(tdata, tmask)
gmlc = sp.GaussianClassifier(tclass)
mldc = sp.MahalanobisDistanceClassifier(tclass)

# Read in data raster
data = np.zeros((data_f.RasterYSize, data_f.RasterXSize, data_nband))
for i in range(len(trefs)):
    for j in range(data_nband):
        data[:, :, j] = data_f.GetRasterBand(j + 1).ReadAsArray()

#Classify image and display results
print("K-Means")
(kclmap, c) = sp.kmeans(data, kmeans_clusters,
                        kmeans_iterations)  #unsupervised
print("Gaussian")
gclmap = gmlc.classify_image(data)  #supervised
print("Mahalanobis")
mclmap = mldc.classify_image(data)  #supervised

#Define classification colors for array conversion
rlut = np.array([0, 255, 0, 255, 255, 255, 0, 0, 0, 100, 255, 255, 100])
glut = np.array([0, 255, 255, 0, 255, 0, 255, 0, 0, 255, 100, 255, 100])
blut = np.array([0, 255, 255, 255, 0, 0, 0, 255, 0, 255, 255, 100, 255])

#Convert kmeans array
print 'Kmeans Unsupervised Classification .tif Generation'
r = rlut[kclmap].astype('uint8')
g = glut[kclmap].astype('uint8')
b = blut[kclmap].astype('uint8')
Exemplo n.º 10
0
def kmeans_spy(img):
    time1 = timer()
    (m, n) = spy.kmeans(img, 3, 10)  # spectral /spy (data, clusters, iters)
    time2 = timer()
    print('kmeans time: ', time2 - time1)
    return m
Exemplo n.º 11
0
import matplotlib.pyplot as plt
import numpy as np
import spectral
from task_2c import atmospheric_correction
from task_2b import OBPG_algorithm

# vegetation: [417, 137]
# ocean     : [20, 20]

HICO_original, HICO_noisy, hico_wl, seawater_Rs = get_info('data/HICO.mat')
land_mask = plt.imread('data/land_mask.png')[:, :, 0] == 0
deep_water_Rrs = np.loadtxt('data/deep_water_Rrs.txt')
shallow_water_Rrs = np.loadtxt('data/shallow_water_Rrs.txt')
valid_bands_Rrs = np.loadtxt('data/valid_bands_Rrs.txt')

(m, c) = spectral.kmeans(HICO_original, 6, 30)

I = pseudo_RGB_img(HICO_original, hico_wl)

land = np.empty_like(land_mask)
for i in range(m.shape[0]):
    for j in range(m.shape[1]):
        if m[i][j] != 0:
            land[i][j] = True
        else:
            land[i][j] = False

I[land] = 0
plt.imshow(I)

# Plot a RGB pseudo img