R光栅包将图像分割成多个

2023-11-23

我有一个如下图。它是2579*2388像素。假设它的左下角位于 0,0。我想从该图像创建多个图像,如下所示并将它们保存在工作文件夹中。每个图像的大小为 100*100 像素。每个图像将通过其左下角坐标保存。

  1. 第一张图像的左下角位于 0,0。右上 手角将位于 100,100,图像将另存为 0-0.jpg
  2. 第二个的左下角位于 10,0。右手上方 角点位于 110,100,图像将保存为 10-0.jpg
  3. 一旦底行完成,Y 坐标将移动 10。 第二行的情况下,第一张图像将位于 0,10 处,并且该图像 将保存为 0-10.jpg

最快的方法是什么?有没有 R 包可以非常快地做到这一点?

据我所知,在当前图像的情况下,它会将其分割成大约 257*238 的图像。但我有足够的磁盘空间,我需要每个图像来执行文本检测。

enter image description here


这里使用“raster”包的另一种方法。该函数在空间上聚合要切割的栅格,聚合的栅格单元将转换为多边形,然后使用每个多边形的范围来裁剪输入栅格。

我确信有复杂而紧凑的方法可以做到这一点,但这种方法对我来说很有效,而且我发现它也很直观。我希望你也觉得它很有用。请注意,下面的第 4 部分和第 5 部分仅用于测试,它们不是功能的一部分。

enter image description here

第 1 部分:加载并绘制样本栅格数据

logo <- raster(system.file("external/rlogo.grd", package="raster"))
plot(logo,axes=F,legend=F,bty="n",box=FALSE)

第 2 部分:函数本身:

# The function spatially aggregates the original raster
# it turns each aggregated cell into a polygon
# then the extent of each polygon is used to crop
# the original raster.
# The function returns a list with all the pieces
# in case you want to keep them in the memory. 
# it saves and plots each piece
# The arguments are:
# raster = raster to be chopped            (raster object)
# ppside = pieces per side                 (integer)
# save   = write raster                    (TRUE or FALSE)
# plot   = do you want to plot the output? (TRUE or FALSE)
SplitRas <- function(raster,ppside,save,plot){
  h        <- ceiling(ncol(raster)/ppside)
  v        <- ceiling(nrow(raster)/ppside)
  agg      <- aggregate(raster,fact=c(h,v))
  agg[]    <- 1:ncell(agg)
  agg_poly <- rasterToPolygons(agg)
  names(agg_poly) <- "polis"
  r_list <- list()
  for(i in 1:ncell(agg)){
    e1          <- extent(agg_poly[agg_poly$polis==i,])
    r_list[[i]] <- crop(raster,e1)
  }
  if(save==T){
    for(i in 1:length(r_list)){
      writeRaster(r_list[[i]],filename=paste("SplitRas",i,sep=""),
                  format="GTiff",datatype="FLT4S",overwrite=TRUE)  
    }
  }
  if(plot==T){
    par(mfrow=c(ppside,ppside))
    for(i in 1:length(r_list)){
      plot(r_list[[i]],axes=F,legend=F,bty="n",box=FALSE)  
    }
  }
  return(r_list)
}

第三部分:测试功能

SplitRas(raster=logo,ppside=3,save=TRUE,plot=TRUE)
# in this example we chopped the raster in 3 pieces per side
# so 9 pieces in total
# now the raster pieces should be ready 
# to be processed in the default directory
# A feature I like about this function is that it plots
# the pieces in the original order. 

第 4 部分:在每个部分上运行代码并将它们保存回目录中

# notice if you cropped a rasterbrick 
# use "brick" instead of "raster" to read
# the piece back in R
list2 <- list()
for(i in 1:9){ # change this 9 depending on your number of pieces
  rx <- raster(paste("SplitRas",i,".tif",sep=""))
  # piece_processed <- HERE YOU RUN YOUR CODE
  writeRaster(piece_processed,filename=paste("SplitRas",i,sep=""),
              format="GTiff",datatype="FLT4S",overwrite=TRUE)
}
# once a code has been ran on those pieces
# we save them back in the directory 
# with the same name for convenience

第五部分:让我们把各个部分重新组合起来

# read each piece back in R
list2 <- list()
for(i in 1:9){ # change this 9 depending on your number of pieces
  rx <- raster(paste("SplitRas",i,".tif",sep=""))
  list2[[i]] <- rx
}
# mosaic them, plot mosaic & save output
list2$fun   <- max
rast.mosaic <- do.call(mosaic,list2)
plot(rast.mosaic,axes=F,legend=F,bty="n",box=FALSE)
writeRaster(rast.mosaic,filename=paste("Mosaicked_ras",sep=""),
            format="GTiff",datatype="FLT4S",overwrite=TRUE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R光栅包将图像分割成多个 的相关文章

  • 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

    我用 PIL 创建一个图像 我需要填充空白区域 显示为黑色 我可以轻松地用静态颜色填充它 但我想做的是用附近的颜色填充像素 例如 边框之后的第一个像素可能是填充像素的高斯模糊 或者可能是中描述的推拉型算法Lumigraph Gortler
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • Java - 调整图像大小而不损失质量

    我有 10 000 张照片需要调整大小 因此我有一个 Java 程序来执行此操作 不幸的是 图像的质量损失很大 而且我无法访问未压缩的图像 import java awt Graphics import java awt AlphaComp
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • R 中的快速 QR 分解

    我有大量矩阵 需要对其执行 QR 分解并存储生成的 Q 矩阵 进行归一化 以便 R 矩阵在其对角线上具有正数 除了使用之外还有其他方法吗qr 功能 这是工作示例 system time Parameters for the matrix t
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use

随机推荐

  • 如何在Python中将带有不带引号的键的字符串转换为字典

    我有一根绳子 a b c d e 请注意 字典条目的键未加引号 因此一个简单的eval a b c d e 如建议的上一个问题不起作用 将此字符串转换为字典的最方便的方法是什么 a b c d e 如果这是来自可信来源 不要将其用于一般用户
  • 如何从通知深层链接到 SwiftUI 中的屏幕?

    我正在尝试在我的应用程序中设置深层链接 我已经设置了应用程序以及推送通知 但是 我无法完成 AppDelegate 接收用户单击我想要深层链接到的屏幕的通知的最终链接 我基本上想从 AppDelegate 调用 viewRouter goT
  • Lifecycle @OnLifecycleEvent() 已弃用,您应该使用 LifecycleEventObserver 或 DefaultLifecycleObserver [重复]

    这个问题在这里已经有答案了 答案在底部 我认为这对你有用 生命周期事件观察者 Firstly 你应该实现这个 dependencies implementation androidx lifecycle lifecycle extensio
  • 错误:项目文件必须在引用列表中包含 .NET Framework 程序集“WindowsBase、PresentationCore、PresentationFramework”

    我在带有 C 的 Windows 窗体应用程序中使用 WPF 跟进问题 将一组实线 虚线笔添加到组合框 Error 项目文件必须在引用列表中包含 NET Framework 程序集 WindowsBase PresentationCore
  • MongoDB中聚合方法的返回类型是什么?

    我试图根据 mongo 的聚合方法获得一组结果 并根据返回值尝试在所有结果中添加一个属性 聚合方法为我提供了最高的数字 综合体中特定销售点一个月内的销售额 我想将属性 HighestSales 添加到它返回的那些文档中 我的查询是 var
  • 如何正确初始化全局变量? [复制]

    这个问题在这里已经有答案了 我正在编写一个小学生项目 并遇到了一个问题 我有一些全局变量 需要在一些源文件中使用它 但我收到错误对变量名的未定义引用 例如 我们创建三个源文件 tst1 h extern int global a void
  • mongo - 无法连接到服务器 127.0.0.1:27017

    我来自 riak 和 redis 在这些服务启动或交互方面我从未遇到过问题 这是 mongo 的一个普遍问题 我很无能 重新启动没有帮助 我是 mongo 新手 mongo MongoDB shell version 2 2 1 conne
  • AVFoundation 元数据对象类型

    我尝试使用 AVFoundation 来读取带有以下代码的条形码 但我不断收到以下错误 帮助说明原因将不胜感激 提前致谢 Create camera view session AVCaptureSession var layer self
  • Toopay/bootstrap-markdown 的预览按钮不起作用

    我正在用 symfony 创建一个表单 我的表单的一个字段是textarea我想通过使用让它看起来更好引导降价 根据文档 我设置了属性 data provide to markdown 如下图所示 form row form descrip
  • Rails 从 Helper 模块返回多个 content_tag

    我写了以下助手 def section to html block case block 0 downcase when paragraph block shift block each do value return content ta
  • 如何创建可变变量?

    我知道一些其他语言 比如PHP 支持 变量变量名 的概念 即字符串的内容可以用作变量名的一部分 我听说这通常是一个坏主意 但我认为它可以解决我在 Python 代码中遇到的一些问题 在Python中可以做这样的事情吗 会出现什么问题 If
  • 如何使“过期”的 Firebase 实例 ID 令牌失效

    AFAIK Firebase实例令牌将在以下4种情况下刷新 应用程序删除实例ID 应用程序已在新设备上恢复 用户卸载 重新安装应用程序 用户清除应用数据 假设用户使用令牌 A 作为他的 FCM 地址 每次登录应用程序时 他都会将令牌 A 以
  • “找不到 CFBundle/CFPlugIn 的可执行文件”错误

    找不到 CFBundle CFPlugIn 0x432bfa0 的可执行文件 未加载 在 CFBundle CFPlugIn 0x432bfa0 中找不到工厂 C5A4CE5B 0BB8 11D8 9D75 0003939615B6 的函数
  • jqGrid - 动态设置标题

    我有captionjqGrid 定义中的参数集 我想知道是否有一种方法可以根据情况动态设置它classjqGrid 插件所附加的表元素的属性 HTML 1 table class view table div div HTML 2 tabl
  • 在 Linux 机器上创建自解压 zip 存档

    由于许多我不会涉及的限制 我必须在 Linux 机器上创建一个自解压 ZIP 存档 生成的存档只能在 Windows 上执行 这是可能吗 如果是这样 什么工具可以完成这项工作 背景 当用户从我的 Linux 盒子下载安装包时 我需要使用某个
  • 如果在单独的类中定义异常子句,Camel 异常处理将不起作用

    我正在尝试构建一个具有多个骆驼路线的应用程序 这些路线在内部重用许多常见路线 因此 我尝试将路由分隔在几个不同的路由生成器类中 然后在需要的地方连接路由 例如 与发送电子邮件有关的所有路由都进入 EmailRouteBuilder 类 而处
  • 使用 Laravel (Localhost) 通过表单将文件发送到电子邮件

    Laravel 新手 所以要友善 哈哈 我的 mail php 配置是正确的 并且可以成功接收电子邮件以进行 gmail 的文本输入 但不确定如何完成文件任务 我希望得到一些帮助或参考链接 提前致谢 代码在routes php中 Route
  • iOS 8 CoreBluetooth 已弃用 RSSI 方法

    所以从阅读CBPeripheralDelegate文档 看来RSSI and peripheralDidUpdateRSSI error iOS 8 中已弃用 Xcode 警告 iOS 8 0 中已弃用 rssi 我注意到我的信号强度指示器
  • 测量 Cortex m7 上的时钟周期数

    我一直在测量 Cortex m4 上的时钟周期计数 现在想在 Cortex m7 上进行测量 我使用的板子是STM32F746ZG 对于 m4 一切都适用 volatile unsigned int DWT CYCCNT volatile
  • R光栅包将图像分割成多个

    我有一个如下图 它是2579 2388像素 假设它的左下角位于 0 0 我想从该图像创建多个图像 如下所示并将它们保存在工作文件夹中 每个图像的大小为 100 100 像素 每个图像将通过其左下角坐标保存 第一张图像的左下角位于 0 0 右