Escolar Documentos
Profissional Documentos
Cultura Documentos
DE IMAGENS SATEITAIS
Angulo, Lady V. V.
Centro de Rádio Astronomia e Astrofísica Mackenzie, Universidade Presbiteriana Mackenzie, São Paulo.
e-mail: lady.angulovalencia@gmail.com
Resumo
Neste artigo foi utilizado a linguagem de programação python 3, através do software Anaconda 3,
associado a algumas bibliotecas adicionais como Osgeo, Numpy, GDAL, CV2 e Skimage.
O objetivo do programa realizado com as ferramentas mencionadas foi apresentar as diferentes bandas
contidas em uma imagem de satélite, obtida a partir do sensor Landsat 7, e imagens de drones, obtidas
com DJI100, e fazer combinações diferentes que permitem destacar objetos específicos da imagem,
obtendo gráficos sobre o comportamento de cada uma das bandas em um histograma de equalização, e
alcançar realce e alongamento em regiões do espectro de maior refletância.
Utilizou-se dados de fotometria obtidos pelo projeto SDSS (Sloan Digital Sky Survey) para se desenvolver
um programa de datamining capaz de classificar os objetos em estrelas ou galáxias. O algoritmo
escolhido se chama PCA (Principal Component Analysis) onde foi obtida uma taxa de sucesso em torno
de 73% com um gasto computacional extremamente baixo.
http://www.sersc.org/journals/IJSIP/vol8_no8/35.pdf
http://nbviewer.jupyter.org/github/HyperionAnalytics/PyDataNYC2014/blob/master/color_image_proc
essing.ipynb
http://www.acgeospatial.co.uk/jupyter-notebooks-and-satellite-imagery/
http://opencv-python-
tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_histograms/py_histogram_equalization/
py_histogram_equalization.html
1. INTRODUÇÃO
La importância de desarrollar um script em phyton esta dada porque puede ser uma
herramienta reusable, dinâmica, de capacidades de largo alcance y que actue bien em relación
a los datos, es decir que nos permita mejorar la velocidade de ejecución de um processo y
optimizar los recursos.
La álgebra de mapas es um álgebra simple y poderosa para ejecutar herramientas de
análisis espacial, operadores y funciones para desenvolver análisis geográfico, la fortaleza esta
en la creación de expresiones complejas.
2. DESENVOLVIMENTO
Analisis Raster:
Presentación de datos
Anadir, copiar, borrar, etc
Generar um mosaico, cortar, etc
Objeto raster
Numpy, Applyenvironment,etc.
Modelameinto y análisis raster.
Álgebra de mapas
APÊNDICE
Côdigo
import numpy as np
import struct
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from osgeo import gdal_array
from osgeo.gdalconst import *
import matplotlib.pyplot as plt
import cv2
import pyfits
from scipy import misc
from skimage import io, exposure
from IPython.display import Image
%reload_ext watermark
%watermark -v -m -p numpy, skimage, matplotlib
CPython 2.7.14
IPython 5.4.1
numpy 1.14.0
skimage 0.13.1
matplotlib 2.1.2
%matplotlib nbagg
cube = gdal.Open("CORTE_LANDSAT1.tif")
bnd1 = cube.GetRasterBand(1)
bnd2 = cube.GetRasterBand(2)
bnd3 = cube.GetRasterBand(3)
img1 = bnd1.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img2 = bnd2.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img3 = bnd3.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img = np.dstack((img1,img2,img3))
f = plt.figure()
plt.imshow(img)
plt.show()
img = np.dstack((5*img1,img2,img3))
f = plt.figure()
plt.imshow(img)
plt.show()
cube = gdal.Open("LANDSAT654_1.tif")
bnd1 = cube.GetRasterBand(1)
bnd2 = cube.GetRasterBand(2)
bnd3 = cube.GetRasterBand(3)
img6 = bnd1.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img5 = bnd2.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img4 = bnd3.ReadAsArray(0,0,cube.RasterXSize, cube.RasterYSize)
img2 = np.dstack((img6,img5,img4))
f = plt.figure()
plt.imshow(img2)
plt.show()
img2 = np.dstack((img6,img5,1.1*img4))
f = plt.figure()
plt.imshow(img2)
plt.show()
fig = plt.figure(figsize=(10, 7))
fig.set_facecolor('white')
plt.figure(figsize=(10, 3))
plt.subplot(1, 2, 1)
plt.imshow(img_rgb)
plt.subplot(1, 2, 2)
plt.imshow(img_hsv)
plt.show()
plt.figure(figsize=(10,8))
plt.subplot(311)
plt.subplots_adjust(hspace=.5)
plt.title("Hue")
plt.hist(np.ndarray.flatten(hue), bins=180)
plt.subplot(312)
plt.title("Saturation")
plt.hist(np.ndarray.flatten(sat), bins=128)
plt.subplot(313)
plt.title("Luminosity Value")
plt.hist(np.ndarray.flatten(val), bins=128)
plt.show()
hist,bins = np.histogram(img.flatten(),256,[0,256])
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max()/ cdf.max()
plt.plot(cdf_normalized, color = 'b')
plt.hist(img.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()
fig = plt.figure(figsize=(10, 7))
fig.set_facecolor('white')
cdf_m = np.ma.masked_equal(cdf,0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m,0).astype('uint8')
img = cv2.imread('DJI_0042.JPG',0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ)) #stacking images side-by-side
cv2.imwrite('res.png',res)
plt.imshow(img)
plt.show()
from skimage.filters import sobel
imgsobel = sobel(img)
plt.imshow(imgsobel,aspect="auto",cmap=plt.cm.gray)
plt.show()
imgsobel = sobel(binary)
plt.imshow(imgsobel,aspect="auto",cmap=plt.cm.gray)
plt.show()
from skimage import measure
perim=measure.perimeter(binary)
print(perim, "pixels")
plt.imshow(binary,aspect="auto",cmap=plt.cm.gray)
plt.show()