imgpalr
パッケージを使用すると、画像ファイルからカラー パレットを簡単に作成できます。
画像から派生するカラー パレットのタイプ (定性的、連続的、発散) を選択します。
画像の色分布の分位数をトリミングできます。
黒に近い色または白に近い色は、HSV 空間での輝度や彩度の分布のトリミングとは無関係に、RGB 空間でトリミングできます。
連続パレットを作成すると、並べ替えの基準となる HSV カラー次元の順序を制御することもできます。
imgpalr
の CRAN リリースをインストールします。
install.packages("imgpalr")
GitHub から開発バージョンをインストールします。
# install.packages("remotes")remotes::install_github("leonawicz/imgpalr")
メイン関数はimage_pal()
です。ディスクまたは URL から PNG、JPG、BMP、または GIF (最初のフレーム) 画像を受け入れます。画像と他の関数の引数に基づいてパレットを定義する色のベクトルを返します。また、 plot = TRUE
に設定すると、視覚的な参照用のソース イメージのサムネイルを含むパレットのプレビューをプロットすることもできます。
以下の例では、任意の画像からカラー パレットを導出する際に考慮すべき一般的な考慮事項をいくつか示します。
この最初の例セットでは、いくつかの追加設定を変更しながら、同じ画像から分岐パレット、定性パレット、連続パレットが生成されます。
ライブラリ(imgpalr) set.seed(1)x <- pasted0(system.file(package = "imgpalr"), "/", c("blue- yellow", "purples", "colors"), ".jpg")# 3 つのパレット タイプ、1 つの画像# 発散パレットimage_pal(x[1], type = "div", saturation = c(0.75 , 1)、明るさ = c(0.75, 1)、プロット = TRUE)
# 定性的なパレットimage_pal(x[1], type = "qual", bw = c(0.25, 0.9), plot = TRUE)
# 連続したパレットimage_pal(x[1], type = "seq", k = 2, saturation = c(0.75, 1), Brightness = c(0.75, 1), seq_by = "hsv", plot = TRUE)
このテスト画像では、狭い範囲で色相が変化しています。ここでは、連続したパレットを使用することが賢明ですが、必ずしも色相によって並べ替えるのが最適であるとは限りません。そうすることで、知覚可能な色の順序が表示されますが、識別するのははるかに困難になります。この場合、まず彩度または明るさによってパレットを並べ替えると、より優れた連続パレットが作成されます。
image_pal(x[2]、タイプ = "seq"、seq_by = "hsv"、プロット = TRUE)
image_pal(x[2]、タイプ = "seq"、seq_by = "svh"、プロット = TRUE)
image_pal(x[2]、タイプ = "seq"、seq_by = "vsh"、プロット = TRUE)
いくつかの顕著な色相を持つ画像を使用する場合、ここでは発散パレットは賢明ではありません。シーケンシャルは、おそらく色相によって並べ替えるのが最適です。
以下の 2 番目の画像では、 quantize = TRUE
を設定して、派生パレットに基づいてカラー量子化された参照サムネイル イメージを表示することもできます。これには、 image_quantmap()
関数が使用されます。画像を量子化するだけでなく、RGB 空間の最近接距離に基づいて任意の画像の色を任意のカラー パレットにマッピングしながら量子化します。
image_pal(x[3]、タイプ = "qual"、明るさ = c(0.4, 1)、プロット = TRUE)
image_pal(x[3]、タイプ = "seq"、bw = c(0.2, 1)、彩度 = c(0.2, 1)、 プロット = TRUE、量子化 = TRUE)
パレットの生成には K-means クラスタリングが使用されます。 image_pal()
呼び出すたびに結果が異なります。取得したパレットが適切でない場合は、引数を固定しても、再度実行して別のパレットを取得できます。設定とソース画像の性質に応じて、かなり変化する可能性があります。再現可能なパレットが必要な場合は、 seed
引数を設定します。上記の例では、 image_pal()
を呼び出すたびにシードを設定する必要がないように、シードがグローバルに設定されています。
image_quantmap()
直接使用して、画像内の色を量子化できます。任意の色のベクトルを選択します。各ピクセルの色は、RGB 空間で最も近い色のいずれかにマッピングされます。 RGB 配列が返されます。パレットを使用して画像をプロットできます。
x <- system.file("blue- yellow.jpg", package = "imgpalr")pal <- c("black", "navyblue", "dodgerblue", " yellow")a <- image_quantmap(x, pal 、k = 7、プロット = TRUE)
str(a)#> num [1:317, 1:400, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
これは、色を RGB 空間で少し離れた色に量子化する場合にはうまく機能しますが、色を非常に異なる色に交換する場合も、これは 2 段階のプロセスになる必要があります。 pal2
引数に等しい長さの色のベクトルを指定すると、最初の量子化後にこれらの色がpal
内の色と置き換えられます。
pal2 <- c("darkred", "darkgreen", "Tomato", "orange")a <- image_quantmap(x, pal, pal2, k = 7、plot = TRUE、show_pal = FALSE)
注: この関数は、 k
および/またはそれより大きな画像の場合、非常に遅くなる可能性があります。
CRAN には RImagePalette パッケージもあります。これは、画像内で主要な色を見つけるためにメディアン カット アルゴリズムを使用します。
imgpalr
元々、GitHub のパレット パッケージからインスピレーションを受けました。どちらのパッケージも、K-means クラスタリングを使用して主要な画像の色を見つけますが、カラー パレットを組み立てる方法にはいくつかの異なるアプローチが採用されています。
パレット プレビュー (サムネイルの追加なし) は、パレットをプロットするのに便利な関数であるscales::show_col()
に基づいています。 pals::pal.bands()
を使用して、別の視覚的レイアウトを使用して同じことを行うこともできます。
他の目的でカラー パレットを取得するのではなく、画像自体のカラー プロパティを直接操作したい場合は、ImageMagick ライブラリへのバインディングを提供する Magick パッケージを使用して操作できます。
マシュー・レオナウィッツ (2024)。 imgpalr: 画像からカラー パレットを作成します。 R パッケージ バージョン 0.4.0。 https://CRAN.R-project.org/package=imgpalr
貢献は大歓迎です。 GitHub を通じてプル リクエストを通じて貢献します。実質的な機能の追加または変更に関する場合は、まず問題を作成してください。
imgpalr
プロジェクトは、貢献者の行動規範とともにリリースされていることに注意してください。このプロジェクトに貢献すると、その規約に従うことに同意したことになります。