Постройте изображение JPG, используя основную графику в R

Я ищу простой способ нанести фотографическое изображение JPEG на графическое устройство в R.

Например, следующее с использованием raster пакет, кажется, игнорирует цветовые атрибуты в изображении. Я хочу воспроизвести фотографию в ее оригинальных цветах:

library(raster)
library(rgdal)

myJPG <- raster("colourfulPic.jpg")
plot(myJPG)  ## Recolours JPEG;

Я обнаружил, что пакет rimage недавно был заархивирован и, похоже, больше не рекомендуется для использования (см. здесь), если он действительно когда-либо делал то, что мне нужно.

Точно так же EBImage для BioConductor, который также может работать, не построен для 64-битной Windows, и, к сожалению, мне нужна эта архитектура.

Пожалуйста, скажите мне, что я упустил что-то очень очевидное в базовой графике?


6 ответов

Решение

Вместо rimage, возможно, используйте пакет ReadImages:

library('ReadImages')
myjpg <- read.jpeg('E:/bigfoot.jpg')
plot(myjpg)

Здесь идет обновленное решение, которое опирается только на jpeg пакет и обрабатывает цветные и полутоновые изображения (пакеты, используемые в других решениях, устарели и не будут устанавливаться с последней версией R).

Решение состоит в этой функции графика:

plot_jpeg = function(path, add=FALSE)
{
  require('jpeg')
  jpg = readJPEG(path, native=T) # read the file
  res = dim(jpg)[2:1] # get the resolution, [x, y]
  if (!add) # initialize an empty plot area if add==FALSE
    plot(1,1,xlim=c(1,res[1]),ylim=c(1,res[2]),asp=1,type='n',xaxs='i',yaxs='i',xaxt='n',yaxt='n',xlab='',ylab='',bty='n')
  rasterImage(jpg,1,1,res[1],res[2])
}

Эта функция может быть вызвана с путем изображения в качестве аргумента, например:

plot_jpeg('~/nyancat.jpg')

Чтобы добавить картинку к существующему сюжету, используйте переключатель add=TRUE - и будьте осторожны с осями!

С использованием imager пакет:

library(imager)

image <- load.image(image_filename)
plot(image)

Это работает для ряда графических форматов, включая jpeg, gif, так далее...

Если вы создаете документ RMarkdown, knitr::include_graphics() прям и прост.

library(raster)  
myJPG <- stack("colourfulPic.jpg")  
plotRGB(myJPG)  

Обратите внимание, что ReadImages сейчас устарела. Вместо этого вы можете установить пакет biOps, который также содержит богатый набор методов обработки изображений. Используйте следующим образом:

library(jpeg)
library(biOps)

image <- readJPEG("test.jpg")

# image is of type imagedata (the red,green,blue channel images concatenated)

plot(image)

Редактировать: объект типа imagedata доступ как image[Y,X,Channel]кстати

Другие вопросы по тегам