【问题标题】:R: How is it possible to export from R an image from a raster layer while maintaining image resolution?R:如何在保持图像分辨率的同时从 R 导出光栅层的图像?
【发布时间】:2018-06-20 16:39:44
【问题描述】:

我一直在尝试在绘制后将根据 Lambert Conformal Conic 投影(分辨率为 1000 m x 1000 m)投影的地理栅格图层导出为图像文件(例如,作为 *.eps)它有一些重叠的点(这很简单),但是在导出后打开图像时,很明显它的分辨率比前面提到的要低。

我一直在使用可从以下位置下载的 24 个生物气候层:https://sites.ualberta.ca/~ahamann/data/climatewna.html。以下是其中一个图层的示例(保存为 *.tif)及其分辨率:

以下是我一直在运行的相关脚本部分:

> projection <- raster("prediction.grd")
> projection

class       : RasterLayer 
dimensions  : 3132, 2359, 7388388  (nrow, ncol, ncell)
resolution  : 1000, 1000  (x, y)
extent      : -3594000, -1235000, 4703000, 7835000  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : C:\Users\User\Documents\Project\prediction.grd 
names       : layer 
values      : 7.006775e-12, 0.001495079  (min, max)

> plot(projection, col = colorPalette(14, "jc"), colNA = 'black', axes = FALSE); 
> points(train_locality_points, col='white', pch=15, cex=0.2)

在运行此代码之后,我已经着手导出通过 R Studio 的“导出”下拉菜单生成的绘图,以将其保存为带有扩展名的图像,该扩展名可以在 R 之外而不是文件中查看以其原始扩展名或类似的东西。我可以打开保存的图像,但它的质量显然与上面所说的图层分辨率不同。

下面的图片是我以刚才描述的方式保存的。为了说明我遇到的麻烦,温哥华岛(即在其南端聚集了许多白点的大岛)长约 500 公里,如果分辨率为 1 公里,这应该对应于图像中的约 500 像素栅格层为 1 公里。在这张图片中,岛屿的长度大约是这个数字的五分之一(......是的,我数过了)。

对于如何解决此问题的任何帮助,我将不胜感激。感谢您抽出宝贵时间阅读并考虑这个问题。

【问题讨论】:

  • 你能用png(filename="&lt;something&gt;", width=3132, height= 2359, units="px"); &lt;plotting code&gt;; dev.off()吗?
  • @BenBolker:我刚刚尝试过,但最终图像的分辨率与以前相同,质量很差。我已经编辑了问题以包含我期望生成的分辨率图像(因为它是“prediction.grd”所基于的层)和我最终澄清的图像。
  • 那张图片是 108x157 像素,所以看起来它不是用png('file.png', height= 2359, width=3132); plot(projection); dev.off() 创建的(请注意,Ben 的高度和宽度颠倒了)。
  • @RobertHijmans:它是按照 Ben 描述的方式生成的,但它只是最初创建的整体图像的一部分。我裁剪了它和上面的 *.tif 图像,以便可以更容易地看到具有大量沿海结构的特定区域。如果您认为这会有所帮助,我可以发布两个原件。
  • 在这种情况下,要考虑的另一件事是在 plot 中使用 maxpixels 参数。例如。 plot(projection, maxpixels=ncell(projection))

标签: r image resolution raster projection


【解决方案1】:

要获得与 RasterLayer r 相同分辨率的图像,您可以这样做

png('file.png', height=nrow(r), width=ncol(r)) 
plot(r, maxpixels=ncell(r))
dev.off()

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 2015-11-23
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2020-03-06
    相关资源
    最近更新 更多