r - 将灰度图像转换并保存为例如绿色配色方案

标签 r imagemagick rmagick

假设我有这个 image :

enter image description here

我想将灰度转换为 viridis 颜色模式并保存。我已经使用这段代码让它工作了:

system('wget https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Von_einem_Schrecklichen_vnd_Wunderbarlichen_Cometen_so_sich_den_Dienstag_nach_Martini_dieses_lauffenden_M._D._Lxxvij._Jahrs_am_Himmel_erzeiget_hat_%28grayscale%29.png/320px-thumbnail.png')
library(png)
library(viridisLite)
x <- png::readPNG('320px-thumbnail.png')
x <- x[, ,1]
intmat <- x * 255
image(1:nrow(intmat), 1:ncol(intmat), intmat, col=viridis(256))

结果如下:

enter image description here

我对颜色方案的应用方式非常满意。然而,这已经不再是原来的图像,而只是一个情节。我想要的是交换灰度中的每个像素,并将转换后的图像再次保存为 png,因此不使用 image()。我查看了 magick 中的 image_convert 函数,但不知道如何获得所需的行为。

最佳答案

我确信有办法做到这一点,而无需重新发明轮子,但仅使用您已加载的库,操作 viridis 颜色以将它们分成 3 个 channel 并另存为 png 是相当简单的。

这是一个可以为任何 png 执行此操作的函数:

png_to_viridis <- function(in_file, out_file)
{
  PNG_raw <- readBin(in_file, "raw", 10e6)
  x <- png::readPNG(PNG_raw)
  intmat <- 255 * x[, ,1] 
  virmat <- viridisLite::viridis(256)[intmat + 1]
  virmat <- c(substr(virmat, 2, 3), substr(virmat, 4, 5), 
              substr(virmat, 6, 7), substr(virmat, 8, 9))
  virmat <- as.numeric(as.hexmode(virmat))/255
  dim(virmat) <- c(dim(intmat), 4)
  png::writePNG(virmat, out_file)
}

所以现在如果我这样做:

png_to_viridis("https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Von_einem_Schrecklichen_vnd_Wunderbarlichen_Cometen_so_sich_den_Dienstag_nach_Martini_dieses_lauffenden_M._D._Lxxvij._Jahrs_am_Himmel_erzeiget_hat_%28grayscale%29.png/320px-thumbnail.png",
               "viridis.png")

我得到以下结果,另存为 viridis.png:

enter image description here

关于r - 将灰度图像转换并保存为例如绿色配色方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61460482/

相关文章:

Ruby gem rmagick 无法安装在 Mac OS X 上

ruby-on-rails - 无法安装 RMagick 2.13.1。找不到魔法配置

r - 关于 R 中 set.seed() 的问题

PHP ImageMagick - readimage 不适用于某些 pdf

ruby - RMagick 安装 : Can't find MagickWand. h

ffmpeg - 从命令行使半个图像透明

javascript - 如何修复 GraphicsMagik 错误(gm 转换 : No decode delegate for this image format)

r - 如何从二进制表/矩阵创建表达式输入样式格式?

包含多行 LaTeX 方程的 R 帮助页面

r - 安装 RMySQL 时出错