web-dev-qa-db-ja.com

Rでの画像のサイズ変更

私は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)

最も簡単なアプローチは、私が呼び出すことができる枕のようなライブラリーでしょうが、私が言ったように、私は何も見つけることができないようです。

ありがとう、

14

これは、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 を参照してください。

20
aoles

パッケージimagerはすてきなフィットであり、スプライン、補間に関するすべての詳細を隠し、4次元配列(ビデオの場合は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")

詳細については、こちらを参照してください。 公式紹介

9
RUser4512

これらのオプションは必要なものをカバーしていますか:

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()
}

他の形式で保存することもできます。 png、bmp、tiff、pdf。 ?jpegは、ビットマップ形式で保存するためのヘルプを表示します。 ?pdf PDF形式での保存に関するヘルプ。

7
eipi10

次のコードを使用して、マトリックスをリサンプリングします。 jpegオブジェクトがある場合は、各カラーチャネルに対して個別に行うことができます。

戦略は次のとおりです。

次元mおよびaと新しい次元_a.new_および_b.new_を持つマトリックスbが与えられた

  1. 新しいグリッドを定義する
_x.new <- seq(1,a,length.out=a.new)
y.new <- seq(1,a,length.out=b.new)
_
  1. 元の行列をxおよびy方向に2回リサンプリングします
_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()で線形補間を使用することもできます。 image(x = x.new, y = y.new, z = V)関数を使用してプロットするために、x軸とy軸が追加で得られます。

ベスト。

3
Seily

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)
}
1
Simon Ji