Você está na página 1de 14

Universidade Presbiteriana Mackenzie

CRAAM – Ciências e Aplicações Geoespaciais

Trabalho de Astro Informática I

Prof. Dr. Luciano Silva

Nome: Lady Victoria Angulo Valencia. TIA: 71815163

São Paulo, 16 de maio de 2018


PYTHON APLICADO A PROCESSAMENTO

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

Palavras chave: Python, Landsat7, Imagens de Satélite.

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.

As imagens de satélite de sensoriamento remoto estão desempenhando papel


importante em muitas aplicações, como estudos de geociências, astronomia e sistemas de
informação geográfica. Na aquisição de dados de sensoriamento remoto, um material refletiria
uma quantidade tremenda de energia em um determinado comprimento de onda, enquanto
outro material refletiria muito menos energia no mesmo comprimento de onda.

Quantidades semelhantes de fluxo radiante refletidas por diferentes materiais ao


longo da porção visível, infravermelha próxima e infravermelho médio do espectro
eletromagnético, resultando em uma imagem de baixo contraste. Contraste é um dos factores
de qualidade mais importantes nas imagens de satélite e é criado pela diferença de luminância
reflectida a partir de duas superfícies adjacentes. O aprimoramento do contraste é um fator
significativo de melhoria da qualidade no processamento digital de imagens. O principal
direcionamento do aprimoramento do contraste é destacar os detalhes ocultos na imagem ou
aumentar o contraste em uma imagem de baixo contraste. Em um intervalo particular, se o
contraste de uma imagem é altamente concentrado, a informação pode ser perdida nas áreas
que são excessiva e uniformemente concentradas [1]. O objetivo principal é melhorar a
imagem, a fim de representar todos os recursos de informação na imagem de entrada, o que é
mais essencial para a aplicação. Várias técnicas foram desenvolvidas para superar essa
desvantagem, como a equalização geral do histograma (EHG) e a equalização do histograma
local.

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

compiler : MSC v.1500 32 bit (Intel)


system : Windows
release : 7
machine : AMD64
processor : AMD64 Family 16 Model 4 Stepping 3, AuthenticAMD
CPU cores : 4
interpreter: 32bit

%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')

for color, channel in zip('rgb', np.rollaxis(img2, axis=-1)):


counts, centers = exposure.histogram(channel)
plt.plot(centers[1::], counts[1::], color=color)
print max(counts[1::])
plt.show()

def color_image_show(img2, title):


fig = plt.figure(figsize=(10, 10))
fig.set_facecolor('white')
plt.imshow(img2/255)
plt.title(title)
plt.show()

img_ha = np.empty(img.shape, dtype='float32')


lims = [(81,212), (86, 228), (110,200)]
for lim, channel in zip(lims, range(3)):
print lim, channel
img_ha[:, :, channel] = exposure.rescale_intensity(img[:, :, channel], lim)

color_image_show(img_ha, '4-3-2 image, histogram equilized')


import cv2
from matplotlib import pyplot as plt
import numpy as np
from skimage import io, exposure
%matplotlib inline
img = cv2.imread('DJI_0042.JPG')
plt.imshow(img)
plt.show()
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.show()

img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) ## convert to HSV

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()

hue, sat, val = img_hsv[:,:,0], img_hsv[:,:,1], img_hsv[:,:,2]

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')

for color, channel in zip('rgb', np.rollaxis(img, axis=-1)):


counts, centers = exposure.histogram(channel)
plt.plot(centers[1::], counts[1::], color=color)
print max(counts[1::])
plt.show()

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()

from skimage.filters import threshold_otsu


thresh = threshold_otsu(img)
print(thresh)
binary = img > thresh
plt.imshow(binary,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()

Você também pode gostar