framework-chl-temp / ImageProcessing.py
ImageProcessing.py
Raw
from fnmatch import fnmatch
import cv2 as cv
import netCDF4 as nc
import numpy as np
from os import system
import os
import glob
from osgeo import gdal
from NetCDFModule import NetCDFModule

class ImageProcessing(NetCDFModule):
	def __init__(self):
		self.raster=None
		self.satelliteImages=[]
		self.ModisNorm=[]
		self.fullMask=None
		self.names_images=[]
	def loadTifFile(self,fn):
		os.chdir(fn)
		os.getcwd() 
		lista=glob.glob("*.tif")
		for imagen in lista:
			path=fn+'\\'+imagen
			self.names_images.append(imagen)
			self.raster = gdal.Open(path)
			self.image = self.raster.ReadAsArray()
			self.satelliteImages.append(self.image)
	def createCloudMask(self,cloudIMaskList,path):
		print('cloudIMaskList',cloudIMaskList)
		cont=np.ones(cloudIMaskList[0].shape)
		for im in cloudIMaskList:
			cont=cont*im
		NoDataValue=-999
		driver = gdal.GetDriverByName("GTiff")
		outFileName=path+'fullCloudMask.tif'
		outdata = driver.Create(outFileName,cont.shape[1], cont.shape[0], 1, gdal.GDT_Float32)
		outdata.SetGeoTransform(self.raster.GetGeoTransform())
		outdata.SetProjection(self.raster.GetProjection())
		outdata.GetRasterBand(1).WriteArray(cont)
		outdata.GetRasterBand(1).SetNoDataValue(NoDataValue)
		outdata.FlushCache()
	def applyCloudMask(self,path_to_MODISImages,path_to_TifCloudMask,path_dest):
		path_dest=path_dest+"modis_norm" #modis a las cuales se les aplicó la máscara de nubes
		if not os.path.isdir(path_dest):
			os.makedirs(path_dest)
		os.chdir(path_dest)
		os.getcwd()
		self.satelliteImages=[]
		self.names_images=[]
		self.loadTifFile(path_to_MODISImages)
		rasterFullCloud = gdal.Open(path_to_TifCloudMask)
		CloudMask = rasterFullCloud.ReadAsArray()
		for imodis in self.satelliteImages:
			imodis_norm=imodis*CloudMask
			self.ModisNorm.append(imodis_norm)
		NoDataValue=-999
		driver = gdal.GetDriverByName("GTiff")

		#########################################Warning: Parámetro absoluto cambiar##############################
		# path_to_ref_im="D:\\UNICOMFACAUCA_2022_II\\trabajos-de-grado\\CarlosSebastian\\code\\framework\\ref_im.tif"
		path_to_ref_im = "C:\\Users\\Personal\\Documents\\framework\\ref_im.tif"
		ref_raster = gdal.Open(path_to_ref_im)
		#########################################Warning: Parámetro absoluto cambiar##############################

		keyword="norm"
		for i in range(len(self.ModisNorm)):
			outFileName=path_dest+'\\'+keyword+'_'+self.names_images[i]
			outdata = driver.Create(outFileName,self.ModisNorm[i].shape[1], self.ModisNorm[i].shape[0], 1, gdal.GDT_Float32)
			outdata.SetGeoTransform(ref_raster.GetGeoTransform())
			outdata.SetProjection(ref_raster.GetProjection())
			outdata.GetRasterBand(1).WriteArray(self.ModisNorm[i])
			outdata.GetRasterBand(1).SetNoDataValue(NoDataValue)
			outdata.FlushCache()