如何解决RGB TIF到GeoTIF并删除背景色
我已经使用matplotlib python三角函数创建了tif图像,现在需要将tif更改为带有epsg4326投影的goetiff,并移除背景,仅需要补丁。
我面临什么困难: 1-投影变化发生不正确。 2像素值应为z参数值。 3-仅是我不想的整个拉特朗区域的片段。
代码:- 1-用于在下面创建matplotlib三角tiff代码
#MAKING TIFF FILE USING TRIANGULARION MATPLOTLIB.
import matplotlib.tri as mtri
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def plot():
x=np.random.uniform(70,94,74)
y=np.random.uniform(8,22,74)
# A selected triangulation of the points.
triangles = np.asarray([
[67,66,1],[65,2,66],[1,2],[64,65],[63,3,64],[60,59,57],[2,64,3],[3,63,4],[0,67,[62,4,63],[57,56],[59,58,[61,60,69],69,60],[4,62,68],[6,5,9],68,62],[69,61],[9,70],8,7],70,5],[8,6,[56,56,52],[70,10,[54,53,55],55,53],[68,[52,[11,12],71,13,[10,13],[51,50,[13,71],[12,[71,52,50],14,[50,49,[49,48,[14,16,15],48],[17,19,18],20,19],[48,14],47,16],[47,46,[16,45],[23,24],[21,24,22],[20,17,25,[27,26,28],72,21],[25,21,72],[45,20],28,26],[44,73,[72,45,73],[28,29],[29,31],[43,44],[73,43,40],39],31,25],[42,40,43],[31,30,[39,41,33,[32,33],38,[33,38],34],[37,35,[34,35],[35,37,36]])
z = np.random.uniform(0.5,74)
triang = mtri.Triangulation(x,y,triangles=triangles)
print("type(triang):",triang)
print("type(z):",type(z))
ax=plt.tripcolor(triang,z,vmin=0,vmax=2)
ax
plt.savefig("ax.tif")
plt.show(ax)
plot()
2-用tif投影制作Geotiff
from osgeo import gdal,osr
import numpy,gdal
ds = gdal.Open('ax.tif')
band = ds.GetRasterBand(1)
myarray = numpy.array(band.ReadAsArray())
convert=lambda x:x*(0.0124796)
myarray=convert(myarray)
#print("myarray:",myarray)
selection = numpy.logical_or(myarray >= 3.5,myarray <= 7)
new_array = [ [0 for i in range(band.XSize)] for j in range(band.YSize)]
for i,item in enumerate(myarray):
for j,element in enumerate(item):
if selection[i][j] == True:
new_array[i][j] = myarray[i][j]
else:
new_array[i][j] = -999
if new_array[i][j]==3.182298:
new_array[i][j] = -999
geotransform = ds.GetGeoTransform()
wkt = ds.GetProjection()
# Create gtif file
driver = gdal.GetDriverByName("GTiff")
output_file = "ax_geotiff.tif"
dst_ds = driver.Create(output_file,band.XSize,band.YSize,1,gdal.GDT_Float64)
new_array = numpy.array(new_array)
print(type(new_array[i]))
#new_array[i]=new_array.max())
#transformed_arr = np.where(arr<5,arr*10,0)
#new_array=numpy.where(new_array[i]==new_array.max(),-999,new_array)
print("new_array:",new_array)
#writting output raster
dst_ds.GetRasterBand(1).WriteArray( new_array )
#setting nodata value
dst_ds.GetRasterBand(1).SetNoDataValue(-999)
#setting extension of output raster
# top left x,w-e pixel resolution,rotation,top left y,n-s pixel resolution
dst_ds.SetGeoTransform(geotransform)
# setting spatial reference of output raster
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
#srs = osr.SpatialReference()
#srs.ImportFromWkt(wkt)
dst_ds.SetProjection( srs.ExportToWkt() )
#Close output raster dataset
ds = None
dst_ds = None
print(numpy.unique(new_array))
3-绘制Geotiff
#CHECKING THE TIFF FILE / ANALYSING THE TIFF FILE DATA AND PLOT.
#tttraster_geotiff
import gdal
%matplotlib inline
import rasterio
from matplotlib import pyplot
import numpy
ds = gdal.Open('ax_geotiff.tif')
band = ds.GetRasterBand(1)
myarray = numpy.array(band.ReadAsArray())
print(myarray)
pyplot.imshow(myarray,cmap='pink')
pyplot.show()
##上面是我正在使用的示例数据和代码,但是我没有得到正确的epsg 4326投影,如果我选择cmap ='jet',则我的背景色为geottiff蓝色,即将出现,即geotiff图的蓝色很大一部分表示z参数的mav值,如果我更改为np.nan则为蓝色,则ia看不到其他颜色,
那么我必须做的所有修改都是- 1-正确的投影 2-仅删除蓝色作为难处理的颜色。enter image description here enter image description here 3-想要删除那种红色(z变量的最大值),只有我想要的地图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。