【问题标题】:Converting coordinates to pixels with out losing points将坐标转换为像素而不会丢失点
【发布时间】:2017-12-30 11:01:08
【问题描述】:

我正在尝试将坐标从纬度/经度转换为像素,但在此过程中我丢失了分数。

我使用的代码如下:

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

df=pd.read_csv('cords.csv')
cords=df.as_matrix(columns=['x','y'])
gt=[7.6445503225, 5.4065168747250134e-06,  0.0,  45.07436634583334,  0.0, -5.406516856707135e-06]

index=np.zeros(cords.shape)
index[:,1]=((cords[:,1] - gt[3]) / gt[5]).round()
index[:,0]=((cords[:,0] - gt[0]) / gt[1]).round()
index=index.astype(int)
index[:,0]=index[:,0]-min(index[:,0])+1
index[:,1]=index[:,1]-min(index[:,1])+1
row=max(index[:,1])
col=max(index[:,0])
image=np.zeros([row+1,col+1])
for i in range(0,len(index)):
    image[index[i,1],index[i,0]]=255

如果我绘制坐标或索引点,我会得到:

如果我绘制图像,我会得到:

如您所见,将纬度/经度转换为像素数时缺少一些点。黄色是 255 值,紫色是 0 值。 怎么解决?

在这里你可以找到我使用的坐标cords.csv

在这里,您可以找到需要为每个像素设置值的坐标。 cords_valus.csv

【问题讨论】:

  • gt 在做什么?
  • 它是从纬度/经度到坐标轴坐标的转换向量。使用GDAL获得。

标签: python numpy coordinates gis coordinate-transformation


【解决方案1】:

当您的十进制坐标被四舍五入为图像的整数索引时,四舍五入过程似乎有些奇怪......可能在基础坐标中有一些周期性。无论如何,我将提供以下解决方案,让您的图像看起来不错,即使它没有找到问题的根源。在 scipy.ndimage 模块中使用图像形态学。

import scipy.ndimage as spim
from skimage.morphology import square

im = spim.binary_closing(input=image, structure=square(3))

【讨论】:

  • 谢谢,但这不是好看的问题。我需要把正确的值放在那里,而不是 255,它们被用作另一个向量。如果你需要,我可以给你正确的价值观。无论如何,Tnx 的建议。
  • 好的,把矢量数据发给我,我去看看。我的电子邮件地址是我在 gmail 的 SO 用户名。
  • 我已在问题中添加了指向文件的链接! Tnx
【解决方案2】:

我对此并不感到非常自豪,因为以这种方式使用字典键感觉有点笨拙,但它似乎有效:

import scipy as sp
import pandas as pd
import matplotlib.pyplot as plt

a = pd.DataFrame.from_csv('cords_value.csv')

x = sp.array(a['x'])
y = sp.array(a['y'])
v = sp.array(a['value'])

xdict = {x_: i for x_, i in zip(sp.unique(x), range(len(sp.unique(x))))}
ydict = {y_: i for y_, i in zip(sp.unique(y), range(len(sp.unique(y))))}

im = sp.zeros([list(xdict.values())[-1]+1, list(ydict.values())[-1]+1])
for i in range(len(v)):
    im[xdict[x[i]], ydict[y[i]]] = v[i]

plt.imshow(im, cmap=plt.cm.spectral)

我想不出另一种方法来使用浮点数(x 和 y)作为整数列表的索引(用于将值映射到图像上)。我认为结果看起来不错:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多