R光栅绘制图像,画一个圆并掩盖圆外的像素

2024-04-01

下面的代码绘制一个图像,然后在该图像上绘制圆圈。我想让该圆圈之外的所有像素都变成黑色。我怎么能这么做呢?

library(raster)
library(plotrix)
r1 <- brick(system.file("external/rlogo.grd", package="raster"))
width=50
height=40
x <- crop(r1, extent(0,width,0,height))
plotRGB(x)
circlex=20
circley=15
radius=10
draw.circle(circlex,circley,radius,border="blue")

使用 str() 查看“x”对象,您会看到以下内容:

..@ data    :Formal class '.MultipleRasterData' [package "raster"] with 14 slots
  .. .. ..@ values    : num [1:2500, 1:3] 255 248 221 199 198 210 221 190 104 79 ...
  .. .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. .. ..$ : NULL
  .. .. .. .. ..$ : chr [1:3] "red" "green" "blue"

....因此 1:50 x 1:50 值映射到三列。 X 值可能是0:2500 %% 50y 值可能是0:2500 %/% 50

因此请记住,“原点”如果是栅格对象的左上角,但绘图函数的左下角,因此 20 的 y 值变为 50-20 或 30,这使您接近您所要求的(抱歉)将 y 序列放在第一位):

x@data@values[( ((1:2500 %/% 50 )- 30)^2 + ((1:2500 %% 50) - 20)^2 ) >=100, 1] <- 0
 x@data@values[( ((1:2500 %/% 50 )- 30)^2 + ((1:2500 %% 50) - 20)^2 ) >=100, 2] <- 0
 x@data@values[( ((1:2500 %/% 50 )- 30)^2 + ((1:2500 %% 50) - 20)^2 ) >=100, 3] <- 0
 plotRGB(x)
 draw.circle(20,20,10,border="blue")

逻辑是,标准的形式为 (x-dx)^2+(y-dy)^2 > r^2,其中 dx 和 dy 是圆的中心坐标,r 是半径 == 10。

问题改变后编辑:

对于每个颜色层,具有命名参数的代码将类似于使最暗的“红色”的代码。这给出了一个大致圆形的蒙版,尽管没有正确处理中心对齐的问题:

x@data@values[( ((1:(height*width) %/% (height*5/4) )- (height-circley*5/4) )^2 + 
            ((1:(height*width) %% width) -       circlex )^2 ) >= radius^2, 1] <- 0

进一步的实验表明,这看起来非常接近:

x@data@values[( ((1:(height*width) %/% (height) )- (height-circley) *5/4)^2 + 
                 ((1:(height*width) %% width) -       circlex )^2 ) >= radius^2, 1] <- 0
plotRGB(x, asp=5/4, addfun=function() draw.circle(circlex,circley,radius,border="blue") )

显然你可以替换width/height在 5/4 出现的任何地方,新宽高比的缩放因子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R光栅绘制图像,画一个圆并掩盖圆外的像素 的相关文章

  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • 将列表中的列转换为 R 中的数据框

    我有使用 R 创建的以下列表 set seed 326581 X1 rnorm 10 0 1 Y1 rnorm 10 0 2 data data frame X1 Y1 lst lt replicate 100 df smpl lt dat
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • 根据另一列中的键累积一列中的值时出现问题

    我有一个看起来像这样的数据框 我需要使用 PROJ ID 列中的字符串创建一个新的值列 并形成 PROJ NAME 列中的值字符串 这里提供的解决方案 根据 r 中另一列的键累积一列中的值 https stackoverflow com q
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • SwiftUI 全屏图像背景

    我想在背景中显示全屏图像 我已经实现了这个 struct LoginView View var body some View VStack Spacer Text Hallo Text Hallo2 Text Hallo2 Text Hal
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想

随机推荐

  • 如何判断sidekiq是否连接到redis服务器?

    使用控制台 如何判断 sidekiq 是否连接到 Redis 服务器 我希望能够做这样的事情 if sidekiq is connected to redis psuedo code MrWorker perform async do wo
  • Python - Vincenty 反演公式不收敛(查找地球上点之间的距离)

    我正在尝试实现维基百科上描述的文森蒂逆问题HERE http en wikipedia org wiki Vincenty 27s formulae Inverse problem 问题在于 lambda 根本不收敛 如果我尝试迭代公式序列
  • Opera 控制台中出现红色警告消息

    出现红色消息 大概是在浏览器自动更新之后 Warning 该区域仅供开发人员使用 众所周知 骗子会鼓励人们在此处复制 粘贴信息来破解帐户 如果您不确定 请不要继续 浏览器是 Opera 87 0 4390 36 似乎它不适用于 Chrome
  • 为什么在使用带有类名的静态变量时未显示非法前向引用错误

    在下面的代码中 当使用类名访问静态变量时 它不会引发前向引用错误 但在没有类名的情况下访问它会引发前向引用错误 为什么使用类名访问时不会发生这种情况 class Test static System out println a shows
  • Azure 计算服务工作线程在扩展后变得“忙碌”

    我正在 Azure 中运行一项具有 4 个工作实例的服务 当我扩展到 5 个工作实例时 已启动的第一个实例进入 繁忙 状态 这是为什么 扩大规模期间会发生什么 azure 是否重新运行所有启动任务 我很困惑 似乎找不到任何有关此的文档 扩展
  • 获取 Node.js 中的完整文件路径

    我有一个将 csv 文件上传到特定文件夹 例如 上传 的应用程序 现在我想获取该 csv 文件的完整路径 例如 D MyNodeApp uploads Test csv 如何获取 Node js 中的文件位置 我使用 multer 上传文件
  • 使用 x64 SIMD 进行半字节改组

    我知道字节改组 https www felixcloutier com x86 pshufb指令 但我想对半字节 4 位值 做同样的事情 具体来说 我想在 64 位字中混洗 16 个半字节 我的洗牌索引也存储为 16 个半字节 最有效的实施
  • 从字符串创建数组

    我需要像这样创建数组 Array firstkey gt Array secondkey gt Array nkey gt 由此 firstkey secondkey nkey yourString firstkey secondkey n
  • 有没有一种简单的方法可以将 ISO 8601 持续时间转换为 timedelta?

    我怎样才能转换ISO 8601 持续时间字符串 https en wikipedia org wiki ISO 8601 Durations to datetime timedelta https docs python org 3 lib
  • 如何通过 Antd 和 VueJS 在表格单元格中使用 customRender

    我在我的应用程序中使用 antd 并尝试执行 customRender 以在单元格中显示图像 我的列数组如下所示 columns title Design dataIndex designImage fileUrl customRender
  • 如果 IP 位于 IP 范围之间,则限制该 IP

    好的 今天是星期五下午 我度过了漫长的一周 所以希望得到一些帮助 目前 我有一个 IP 范围列表 如下所示 List
  • Visual Studio 2019 - 在 WebApp 中添加 WebJob 项目

    在我的解决方案中 我有一个 aspnet core 2 2 WebApp 我想添加一个现有项目 例如 webJob 但没有选项 从现有项目添加 WebJobs 为什么 使用相同的过程 我在其他 Net 应用程序上添加 WebJobs 此选项
  • 互斥体和 Windows Phone 8.1

    这是我的问题 Windows Phone 8 1 Visual Studio 2013 版本 4 我有一个主项目和一个每 30 分钟运行一次的后台项目 我想在两者之间传递数据 我想确保对 Windows Storage Applicatio
  • 如何在 android layout.xml 文件中创建 2 行按钮

    我尝试在 android layout xml 文件中创建 2 行按钮 第一行左对齐 第二行居中对齐 这就是我所做的 但我最终得到了一排按钮 你能告诉我我做错了什么吗 enter code here
  • 查找“IN”子句中与记录不匹配的值

    我有一个dept表与eng and finance记录 它不包含以下记录foo bar or baz 我有一个休眠查询 它返回与我要查找的内容匹配的记录 看起来像 select from dept where dept name in en
  • 布局权重在 ScrollView 中不起作用

    我想将布局权重分配给一个中的多个项目LinearLayout里面的一个ScrollView 但是 那ScrollView忽略LinearLayout weightSum 我的目标是将布局划分为权重 2 1 1 总和为 4 但这在 a 内部无
  • 在 R 中访问多个艺术家的 Spotify API

    我在 Spotify 的开发者应用程序部分创建了客户端 ID 和密钥 我正在参考这份文件 并希望通过选择多名艺术家来扩展它 https www r bloggers com the eurovision 2016 song contest
  • 使用指针交换对象

    我正在尝试为使用 void 指针交换对象的作业问题交换对象 我的函数的声明必须是 void swap void a void b size t size 我并不是在寻找如何执行此操作的确切代码 这样我就可以自己弄清楚 但我不确定我是否理解正
  • 找出3个字母的单词

    我的 Python 代码如下 import re string what are you doing you i just said hello guys regexValue re compile r s w w w s mo regex
  • R光栅绘制图像,画一个圆并掩盖圆外的像素

    下面的代码绘制一个图像 然后在该图像上绘制圆圈 我想让该圆圈之外的所有像素都变成黑色 我怎么能这么做呢 library raster library plotrix r1 lt brick system file external rlog