以R调整图像大小

vmdwslir  于 2023-01-06  发布在  其他
关注(0)|答案(6)|浏览(266)

我正试图在R中处理一些图像数据,无法弄清楚如何调整图像的大小,我必须确保它们都是相同的大小。
在Python中,我是这样处理这个问题的:

from PIL import Image
import numpy as np

size = (100, 100)
img = Image.open(filename)
img = img.resize(size)
img = np.array(img.getdata())

在R中,我找不到一个能完成同样任务的库,我能找到的最远的库是:

library(jpeg)

img <- readJPEG(filename)
# Need something here to resize
img <- as.matrix(img)

最简单的方法是像Pillow这样的库,我可以调用它,但正如我所说,我似乎找不到任何东西。
谢谢你,

xxslljrj

xxslljrj1#

您可以借助Bioconductor软件包**EBImage**(R 的图像处理和分析工具箱)轻松完成此操作。要安装软件包,请用途:

source("http://bioconductor.org/biocLite.R")
biocLite("EBImage")

然后可以使用 EBImage 提供的功能加载和缩放图像,如下例所示。

library("EBImage")

x <- readImage(system.file("images", "sample-color.png", package="EBImage"))

# width and height of the original image
dim(x)[1:2]

# scale to a specific width and height
y <- resize(x, w = 200, h = 100)

# scale by 50%; the height is determined automatically so that
# the aspect ratio is preserved
y <- resize(x, dim(x)[1]/2)

# show the scaled image
display(y)

# extract the pixel array
z <- imageData(y)

# or
z <- as.array(y)

有关 EBImage 提供的功能的更多示例,请参见软件包vignette

nsc4cvqm

nsc4cvqm2#

imager是一个很好的适合和隐藏所有的细节样条曲线,插值和简单地存储图像在一个4维数组(第四维正在使用的情况下,视频)

library(imager)

im <- load.image(my_file)

thmb <- resize(im,round(width(im)/10),round(height(im)/10))

plot(im)
plot(thmb,main="Thumbnail")

更多信息可在此处找到:on the official introduction.

oyxsuwqo

oyxsuwqo3#

这些选项是否满足您的需求:

library(jpeg)

img <- readJPEG(system.file("img", "Rlogo.jpg", package="jpeg"))

# Set image size in pixels
for (i in 3:6) {
  jpeg(paste0("Pixels",i,".jpeg"), width=200*i, height=200*i)
  plot(as.raster(img))
  dev.off()
}

# Set image size in inches (also need to set resolution in this case)
for (i in 3:6) {
  jpeg(paste0("Inches",i,".jpeg"), width=i, height=i, unit="in", res=600)
  plot(as.raster(img))
  dev.off()
}

也可以保存为其他格式; bmp,tiff,pdf。?jpeg将显示保存为位图格式的帮助。?pdf将显示保存为pdf格式的帮助。

ifsvaxew

ifsvaxew4#

我使用下面的代码来重新采样矩阵。如果你有一个jpeg对象,你可以为每个颜色通道单独做这个。
该战略如下:
给定矩阵m,其维数为ab,新维数为a.newb.new
1.定义新格网

x.new <- seq(1,a,length.out=a.new)
y.new <- seq(1,a,length.out=b.new)

1.在xy方向上对原始矩阵重采样两次

V <- apply(V,2,FUN=function(y,x,xout) return(spline(x,y,xout=xout)$y),x,x.new)
V <- t(apply(V,1,FUN=function(y,x,xout) return(spline(x,y,xout=xout)$y),d,y.new))

这里我选择了样条插值,但是你也可以使用apporx()的线性插值。你将额外获得一个x轴和y轴,用于使用image(x = x.new, y = y.new, z = V)函数绘图。
最好的。

zlhcx6iw

zlhcx6iw5#

受Seily启发,调整灰度图像大小。

resize = function(img, new_width, new_height) {
  new_img = apply(img, 2, function(y){return (spline(y, n = new_height)$y)})
  new_img = t(apply(new_img, 1, function(y){return (spline(y, n = new_width)$y)}))

  new_img[new_img < 0] = 0
  new_img = round(new_img)

  return (new_img)
}
vshtjzan

vshtjzan6#

使用软件包imager和单个参数

library(imager)

im <- load.image(pict)

thmb <- im %>% imresize(0.1)

plot(im)
plot(thmb,main="Thumbnail")

相关问题