Постройте изображение 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]
кстати