Rで解析:画像処理に役に立つかも「OpenImageR」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

「magick」パッケージ以外の画像処理に役に立つかもしれないパッケージの紹介です。基本的なコマンドを紹介します。画像のリサイズや回転、切り抜きが可能です。画像はjpeg,png,tiffファイルの処理が可能です。

・「magick」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-531/

パッケージバージョンは1.2.3。実行コマンドはwindows 11のR version 4.2.1で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("OpenImageR")

実行コマンド

詳細はコマンド、パッケージのヘルプを確認してください。

画像例:https://www.karada-good.net/wp/wp-content/uploads/2022/08/TEST.jpg

参考までにケトルベルとダンベルのAmazonアソシエイトです。パフォーマンスを発揮するには体が資本です。ケトルベルとダンベルも「からだにいいもの」でおすすめの道具です。

#パッケージの読み込み
library("OpenImageR")

###画像ファイルの準備#####
#画像例を作業フォルダにダウンロード
download.file('https://www.karada-good.net/wp/wp-content/uploads/2022/08/TEST.jpg',
              'KARADA.jpg', mode = 'wb') 
#画像例を指定
library("tcltk")
Path <- paste0(as.character(tkgetOpenFile(title = "&#30011;&#20687;&#12501;&#12449;&#12452;&#12523;&#12434;&#36984;&#25246;",
                                          filetypes = '{"&#30011;&#20687;&#12501;&#12449;&#12452;&#12523;" {".*"}}',
                                          initialfile = c("*.*"))))
########

#jpeg,png,tiff&#12501;&#12449;&#12452;&#12523;&#12398;&#35501;&#12415;&#36796;&#12415;:readImage&#12467;&#12510;&#12531;&#12489;
ImageTest <- readImage(Path)

#&#30011;&#20687;&#12434;&#34920;&#31034;:imageShow&#12467;&#12510;&#12531;&#12489;
imageShow(file_path = ImageTest,
          clear_viewer = TRUE)

#&#30011;&#20687;&#12469;&#12452;&#12474;&#12434;&#30906;&#35469;
dim(ImageTest)
[1] 319 425   3

#&#20316;&#26989;&#12501;&#12457;&#12523;&#12480;&#12395;&#30011;&#20687;&#12434;&#26360;&#12365;&#20986;&#12375;:writeImage&#12467;&#12510;&#12531;&#12489;
#jpeg,png,tiff&#12501;&#12449;&#12452;&#12523;&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;,&#12501;&#12449;&#12452;&#12523;&#21517;&#12391;&#25351;&#23450;
writeImage(data = ImageTest, file_name = "Test.tiff")

#&#12464;&#12524;&#12540;&#12473;&#12465;&#12540;&#12523;&#21270;:rgb_2gray&#12467;&#12510;&#12531;&#12489;
GrayImage <- rgb_2gray(RGB_image = ImageTest)
imageShow(file_path = GrayImage,
          clear_viewer = TRUE)

#&#20999;&#12426;&#25244;&#12365;:cropImage&#12467;&#12510;&#12531;&#12489;
#&#24133;&#12434;&#25351;&#23450;:new_width&#12458;&#12503;&#12471;&#12519;&#12531;
#&#39640;&#12373;&#12434;&#25351;&#23450;:new_height&#12458;&#12503;&#12471;&#12519;&#12531;
#&#31684;&#22258;&#12434;&#25351;&#23450;:type&#12458;&#12503;&#12471;&#12519;&#12531;;equal_spaced:&#30011;&#20687;&#12398;&#20013;&#24515;&#12363;&#12425;&#25351;&#23450;,user_defined:&#31684;&#22258;&#12434;&#25351;&#23450;
CropTest <- cropImage(image = ImageTest, new_width = 200:300,
                      new_height = 200:300, type = "user_defined")
imageShow(file_path = CropTest,
          clear_viewer = TRUE)

#&#21453;&#36578;:flipImage&#12467;&#12510;&#12531;&#12489;
#&#21521;&#12365;&#12434;&#25351;&#23450;:mode&#12458;&#12503;&#12471;&#12519;&#12531;;horizontal:&#27700;&#24179;,vertical:&#22402;&#30452;
FlipTest <- flipImage(image = ImageTest, mode = "vertical")
imageShow(file_path = FlipTest,
          clear_viewer = TRUE)

#&#22238;&#36578;:rotateImage&#12467;&#12510;&#12531;&#12489;
#&#20445;&#31649;&#26041;&#27861;&#12398;&#25351;&#23450;:method&#12458;&#12503;&#12471;&#12519;&#12531;;nearest,bilinear&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
#&#22238;&#36578;&#24460;&#12398;&#12469;&#12452;&#12474;:mode&#12458;&#12503;&#12471;&#12519;&#12531;;same:&#20966;&#29702;&#21069;&#12392;&#21516;&#12376;,full:&#20803;&#12469;&#12452;&#12474;&#20869;&#12395;&#21454;&#12417;&#12427;
RotateTest <- rotateImage(image = ImageTest, angle = 45,
                             method = "bilinear", mode = "full")
imageShow(file_path = RotateTest,
          clear_viewer = TRUE)

#&#12456;&#12483;&#12472;&#12398;&#25277;&#20986;:edge_detection&#12467;&#12510;&#12531;&#12489;
#&#25277;&#20986;&#26041;&#27861;&#12398;&#25351;&#23450;:method&#12458;&#12503;&#12471;&#12519;&#12531;;Frei_chen,LoG,Prewitt,
#Roberts_cross,Scharr,Sobel&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
#&#12381;&#12398;&#20182;&#35373;&#23450;&#12399;&#12504;&#12523;&#12503;&#12434;&#21442;&#29031;
EdgeTest <- edge_detection(image = ImageTest, method = "Frei_chen",
                           conv_mode = "full")
imageShow(file_path = EdgeTest,
          clear_viewer = TRUE)

#&#30011;&#20687;&#12398;&#12522;&#12469;&#12452;&#12474;:resizeImage&#12467;&#12510;&#12531;&#12489;
#&#12522;&#12469;&#12452;&#12474;&#26041;&#27861;&#12398;&#25351;&#23450;:method&#12458;&#12503;&#12471;&#12519;&#12531;;nearest,bilinear
#&#12381;&#12398;&#20182;&#35373;&#23450;&#12399;&#12504;&#12523;&#12503;&#12434;&#21442;&#29031;
ResizeTest <- resizeImage(image = ImageTest,
                          width = 100, height = 100,
                          method = 'bilinear')
imageShow(file_path = ResizeTest,
          clear_viewer = TRUE)

#&#12460;&#12454;&#12471;&#12450;&#12412;&#12363;&#12375;&#12391;&#12480;&#12454;&#12531;&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;:down_sample_image&#12467;&#12510;&#12531;&#12489;
#factor&#12458;&#12503;&#12471;&#12519;&#12531;;1&#20197;&#19978;&#12391;&#25351;&#23450;
#gaussian_blur&#12458;&#12503;&#12471;&#12519;&#12531;;TRUE/FALSE
DownSampleTest <- down_sample_image(image = ImageTest,
                                    factor = 1.2, 
                                    gaussian_blur = TRUE)
imageShow(file_path = DownSampleTest,
          clear_viewer = TRUE)

#&#12460;&#12531;&#12510;&#20516;&#12398;&#35519;&#25972;:gamma_correction&#12467;&#12510;&#12531;&#12489;
GammaTest <- gamma_correction(image = ImageTest, gamma = 1)
imageShow(file_path = GammaTest,
          clear_viewer = TRUE)

#&#12514;&#12523;&#12501;&#12457;&#12525;&#12472;&#20966;&#29702;:delationErosion&#12467;&#12510;&#12531;&#12489;
#&#20966;&#29702;&#26041;&#27861;&#12398;&#25351;&#23450;:method&#12458;&#12503;&#12471;&#12519;&#12531;;delation,erosion&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
#&#20966;&#29702;&#31684;&#22258;&#12434;&#25351;&#23450;:Filter&#12458;&#12503;&#12471;&#12519;&#12531;
DelationTest <- delationErosion(image = ImageTest,
                                Filter = c(4, 4), method = "erosion")
imageShow(file_path = DelationTest,
          clear_viewer = TRUE)

出力例

・グレースケール化:rgb_2grayコマンド

・切り抜き:cropImageコマンド

・反転:flipImageコマンド

・回転:rotateImageコマンド

・エッジの抽出:edge_detectionコマンド

・画像のリサイズ:resizeImageコマンド;width = 100, height = 100

・ガウシアぼかしでダウンサンプリング:down_sample_imageコマンド

・モルフォロジ処理:delationErosionコマンド


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました