13

Rでjpeg画像を分類するために、各ピクセルのRGB値を取得したいと思います。

私の質問: R の jpeg 画像から RGB チャネルを抽出する方法はありますか?

4

3 に答える 3

18

JPEG で読み取るパッケージがいくつかあります。ここではパッケージを使用しますjpeg:

library(jpeg)
img <- readJPEG("Rlogo.jpg")

dim(img)
[1]  76 100   3

ご覧のとおり、3 つのレイヤーがあり、R、G、B の値に対応しています。各レイヤーでは、各セルがピクセルです。

img[35:39,50:54,]
, , 1

          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.5098039 0.5921569 0.4549020 0.3372549 0.1921569
[2,] 0.5098039 0.6000000 0.4549020 0.3372549 0.1921569
[3,] 0.5137255 0.6000000 0.4549020 0.3450980 0.1921569
[4,] 0.5215686 0.6039216 0.4627451 0.3450980 0.1921569
[5,] 0.5215686 0.6039216 0.4627451 0.3450980 0.1882353

, , 2

          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.5882353 0.6666667 0.5098039 0.3803922 0.2156863
[2,] 0.5882353 0.6627451 0.5098039 0.3803922 0.2156863
[3,] 0.5843137 0.6627451 0.5098039 0.3764706 0.2156863
[4,] 0.5843137 0.6627451 0.5058824 0.3764706 0.2117647
[5,] 0.5843137 0.6627451 0.5058824 0.3764706 0.2156863

, , 3

          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.7254902 0.7921569 0.6156863 0.4588235 0.2705882
[2,] 0.7254902 0.7921569 0.6156863 0.4588235 0.2784314
[3,] 0.7254902 0.7921569 0.6156863 0.4588235 0.2784314
[4,] 0.7176471 0.7921569 0.6156863 0.4666667 0.2862745
[5,] 0.7176471 0.7921569 0.6156863 0.4666667 0.2862745
于 2013-04-23T07:50:37.147 に答える
9

biOps画像操作用のパッケージをお勧めします。

次に例を示します。

library(biOps)
x <- readJpeg(system.file("samples", "violet.jpg", package="biOps"))
plot(x)

r <- imgRedBand(x)
plot(r)
image(x[,,1])

g <- imgGreenBand(x)
plot(g)
image(x[,,2])

b <- imgBlueBand(x)
plot(b)
image(x[,,3])

視覚的な例:

redPal <- colorRampPalette(c("black", "red"))
greenPal <- colorRampPalette(c("black", "green"))
bluePal <- colorRampPalette(c("black", "blue"))

x11(width=9, height=2.5)
par(mfcol=c(1,3))
image(x=seq(ncol(r)), y=seq(nrow(r)), z=t(r), asp=1, xaxt="n", yaxt="n", bty="n", xlab="", ylab="", main="red channel", col=redPal(256))
image(x=seq(ncol(g)), y=seq(nrow(g)), z=t(g), asp=1, xaxt="n", yaxt="n", bty="n", xlab="", ylab="", main="green channel", col=greenPal(256))
image(x=seq(ncol(b)), y=seq(nrow(b)), z=t(b), asp=1, xaxt="n", yaxt="n", bty="n", xlab="", ylab="", main="blue channel", col=bluePal(256))

ここに画像の説明を入力

于 2013-04-23T07:51:31.213 に答える
5

biOpsRのパッケージを介したアプローチが好きです。imagedataデータをキャンバスにロードした後、jpg ファイルを からに変換rasterし、さらに処理を行うことができます。これが私のコードです:

# Required packages
library(biOps)
library(raster)

# Load and plot data
data(logo)
jpg <- logo

plot.imagedata(jpg)

# Convert imagedata to raster
rst.blue <- raster(jpg[,,1])
rst.green <- raster(jpg[,,2])
rst.red <- raster(jpg[,,3])

# Plot single raster images and RGB composite
plot(stack(rst.blue, rst.green, rst.red), 
     main = c("Blue band", "Green band", "Red band"))
plotRGB(stack(rst.blue, rst.green, rst.red))
于 2013-04-23T08:12:06.833 に答える