打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Magick 1.0:高级图形和图像处理R
Jeroen Ooms 
2017年8月15日
上个星期,magick软件包的1.0版出现在了CRAN上:这是一个雄心勃勃的工作,用于在R中实现现代化和简化高质量的图像处理。这个R包建立在Magick ++ STL上,它向着名的ImageMagick库公开了一个强大的C ++ API。
开始学习magick最好的地方是小插曲,它给出了这个软件包中绝大多数功能的简要概述。
迈向版本1.0
围绕去年的这个时候rOpenSci 公布的magick包的第一个版本:用于图像读取一个新的强大的工具包,写作,转换,编辑,转换,注释和动画R.由于初始版本已经出现了一些更新的附加功能,许多使用者已经开始发现这个软件包的功能,使R的可视化达到了一个新的水平。
例如,鲍勃·鲁迪斯(Bob Rudis)使用magick来从美国干旱监测中可视化加州干旱数据(点击图片了解更多信息):
R女士Lucy D'Agostino McGowanMaëlleSalmon展示了如何制作美丽的拼贴画:
丹尼尔P.哈德利让文森特维加解释汽车:
现在,1年后,1.0版本标志着一个重要的里程碑:添加一个新的本地图形设备(作为一个magick图像对象和R图的混合体)弥合了图形和图像处理之间的差距。
这篇博客文章解释了magick设备如何让您无缝地将图形与R中的图像处理结合起来。您可以使用它来后期处理R图形,也可以使用本地R绘图机制绘制导入的图像。我们希望这个统一的界面能够更容易的生成漂亮,可复制的图像。
本地Magick图形
该image_graph()功能打开一个新的图形设备类似于png()或x11()。它返回一个图像对象,图形将被写入。绘图设备中的每个页面将成为图像对象中的一个框架(图层)。
# Produce image using graphics devicefig <- image_graph(res = 96)ggplot2::qplot(mpg, wt, data = mtcars, colour = cyl)dev.off()该fig对象现在包含我们可以轻松进行后期处理的图像。例如,我们可以覆盖另一个图像:
logo <- image_read("https://www.r-project.org/logo/Rlogo.png")out <- image_composite(fig, image_scale(logo, "x150"), offset = "+80+380")# Show previewimage_browse(out)# Write to fileimage_write(out, "myplot.png")
绘图设备
该image_draw()功能打开一个图形设备,使用像素坐标在现有图像的顶部绘制。
# Open a filelibrary(magick)frink <- image_read("//image109.360doc.com/DownloadImg/2017/11/0909/115710545_6_20171109094237298.png")drawing <- image_draw(frink)
现在我们可以使用R的原生低级图形函数在图像顶部绘图:
rect(20, 20, 200, 100, border = "red", lty = "dashed", lwd = 5)abline(h = 300, col = 'blue', lwd = '10', lty = "dotted")text(10, 250, "Hoiven-Glaven", family = "courier", cex = 4, srt = 90)palette(rainbow(11, end = 0.9))symbols(rep(200, 11), seq(0, 400, 40), circles = runif(11, 5, 35), bg = 1:11, inches = FALSE, add = TRUE)在任何时候你都可以检查当前的结果:
image_browse(drawing)
完成后,可以关闭设备并保存结果。
dev.off()image_write(drawing, 'drawing.png')默认情况下,image_draw()将所有边距设置为0,并使用图形坐标来匹配以像素为单位的图像大小(宽x高),其中(0,0)是左上角。请注意,这意味着y轴从顶部到底部增加,这与典型的图形坐标相反。你可以通过自定义覆盖所有这一切xlim,ylim或mar值image_draw()。
动画图形
该图形设备支持多个框架,这使得创建动画图形变得容易。下面的例子展示了如何使用magick 实现非常酷的gganimate包中的例子。
library(gapminder)library(ggplot2)library(magick)img <- image_graph(res = 96)datalist <- split(gapminder, gapminder$year)out <- lapply(datalist, function(data){ p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) + scale_size("population", limits = range(gapminder$pop)) + scale_x_log10(limits = range(gapminder$gdpPercap)) + geom_point() + ylim(20, 90) + ggtitle(data$year) + theme_classic() print(p)})dev.off()animation <- image_animate(img, fps = 2)image_write(animation, "animation.gif")
我们希望magick软件包能够为诸如gganimate之类的软件包提供更强大的后端,以便在R中生成交互式图形,而无需用户手动安装外部图像编辑软件。
将ImageMagick命令移植到R
现在,magick 1.0版本具有图像处理软件包期望的核心图像处理功能。但是,仍然有改进,使magick很多房间的在R图像处理包
目前很多R用户和软件包都是用于执行图像操作的ImageMagick命令行工具。目标是在magick软件包中支持所有这些操作,以便在任何平台上生成(再现)图像,而不需要用户安装额外的软件。
请注意,ImageMagick库已有26年的历史,并在这些年中积累了大量的功能。将所有这些移植到R是相当多的工作,用户的反馈是重要的。如果您想在R中执行imagemagick操作,但是您无法弄清楚,请在GitHub上打开一个问题。如果功能目前还不支持,我们会尝试将其添加到下一个版本。
图像分析
目前magick专注于生成和编辑图像。还有另一个完全不同的功能,我们喜欢支持分析图像。图像分析可能涉及从计算颜色分布到更复杂的特征提取和视觉工具。我对这个领域不太熟悉,所以我们可以再次使用用户和专家的建议。
一个已经可用的image_ocr()功能是使用rOpenSci tesseract软件包从图像中提取文本的功能。使用图像分析的另一个很酷的例子是拼贴包,其计算颜色直方图以选择合适的拼贴图像来创建拼贴。
作为支持分析工具的一部分,我们计划将位图(栅格)类提取到一个单独的包中。这将使软件包作者能够编写R扩展来分析和处理原始图像数据,而不一定取决于magick。然而,用户总是可以依靠magick作为一个强大的工具包来导入/导出图像和图形到这样的低级别的位图。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP图像处理类库MagickWand用法实例分析 PHP
Python实例讲解
如何使用Fuzzing挖掘ImageMagick的漏洞“>如何使用Fuzzing挖掘ImageMagick的漏洞
ImageMagick, Xcode4, iOS4.3
图片服务器
ZBar在Windows上的使用(1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服