SlideShare a Scribd company logo
1 of 58
Download to read offline
Rを用いた画像処理入門
~胸部X線の経時的差分画像~
Oct 27, 2016 SappoRoR7
Masahiko Hida
1
はじめに
magick packageで画像処理の入門編をやってみました。
おまけとして胸部レントゲンで
経時的差分画像を作ってみたお話です。
2
本日のAGENDA
• 自己紹介
• magickによる画像処理の基本
• 胸部XP画像の経時的差分処理
• まとめ
3
magickによる画像処理の基本
5 . 1
magick package
ImageMagickをラップしたパッケージ。
画像オブジェクトは、“magick-image”クラ
ス。
5 . 2
インストールと読み込み
install.packages("magick")
library(magick)
5 . 3
画像の読み込み・表示
dog <- magick::image_read('img/dog.jpg')
magick::image_browse(dog) # 別ウインドウに表示
dog # Rstudioのviewer上で表示
5 . 4
フォーマットの変更
magick::image_convert(dog, "png")
magick::image_write(dog,"img/dog.png",format = "png")
5 . 5
リサイズ
magick::image_scale(dog, "200")     # リサイズ width: 200px
magick::image_scale(dog, "x200")    # リサイズ height: 200px
magick::image_crop(dog, "300x400+150+150") # 切り取り
5 . 6
回転・反転
magick::image_rotate(dog, 45) # 回転
magick::image_flip(dog) # 上下反転
magick::image_flop(dog) # 左右反転
5 . 7
注釈
magick::image_annotate(dog,"I've been working like a dog.",
size = 30, color = "red",boxcolor = "pink",
degrees = 10, location = "+150+600")
5 . 8
フィルター
magick::image_blur(dog, 10, 5)
magick::image_noise(dog,noisetype = "gaussian")
magick::image_oilpaint(dog,radius = 5)
magick::image_charcoal(dog)
magick::image_edge(dog,radius = 5)
magick::image_emboss(dog, radius = 1, sigma = 0.5)
magick::image_negate(dog)
5 . 9
結合
img <- c(dog,dog,dog)
magick::image_append(img,stack=F) # stack=Fで横並び
magick::image_append(img,stack=T) # stack=Tで縦並び
5 . 10
たまに使う機能
6 . 1
グレイスケール変換
6 . 6
カラーコードからRGBに
まずラスターデータに変換します。
各セルがカラーコードになってるので、R/G/Bに分割して10進
法へ。
colorcode2RGB <- function(code){
start <- c(2,4,6) ; end <- c(3,5,7)
RGB16 <- substring(code,start,end)
to10 <- function(x) { eval(parse(text =sprintf("0x%s",x))) }
RGB <- c(to10(RGB16[1]),to10(RGB16[2]),to10(RGB16[3]))
}
6 . 7
前半のまとめ
7 . 1
EBImage packageと
何が違うの?
7 . 2
magickとEBImageの比較1
画像の中身は
magick EBImage
画像オブジェクトのクラス magick-image
externalptr
Image
容量は
magick-imageオブジェクトもラスターにしてしまうと
> magick::image_read('img/dog.jpg') %>% object.size()
280 bytes
> EBImage::readImage("img/dog.jpg") %>% object.size()
191767312 bytes
> magick::image_read('img/dog.jpg') %>% as.raster %>% object.size()
66646344 bytes
7 . 3
magickとEBImageの比較2
お犬様画像(600x800 px)で少しだけ速度比較
magick EBImage
画像読み込み magick::image_read EBImage::readImage
(/500回) 7.74s 32.97s
リサイズ magick::image_scale EBImage::resize
(/25%縮小、200回) 2.98s 6.47s
回転 magick::image_rotate EBImage::rotate
(/45度回転、50回) 22.45s 9.42
7 . 4
前半まとめ
magickは関数名がimage_から始まるので、Rstudioのコード
補完を使えば入力が楽ちん。
大量の画像処理なら、可能な処理は極力magickで。
少量の画像や、グレースケール化、特殊なフィルター、複雑な
計算処理ならEBImageで。
(個人的な感想です。)
7 . 5
ここから後半
8 . 1
胸部X線の経時的差分画像
9 . 1
胸部X線画像
9 . 2
胸部X線画像の撮影
吸気状態による上下変動
中央位置合わせによる左右変動
立位なのでrotateは少ない
撮像距離一定で拡大縮小はほぼ無し 9 . 3
なぜ差分画像?
単一のX線画像から異常を見つけるスクリプトは難しいが、 差分
処理なら機械的に異常所見を抽出できる
9 . 4
差分画像はわかりやすい
多発腫瘍は俄然強い
9 . 5
間違い探し
9 . 6
答え
9 . 7
では差分画像を
作って見ましょう
10 . 1
一番の問題は画像のずれ
10 . 2
差分画像作成のポイント
画像の移動・変形
(写真をずらして重ねる)
画像の類似度の評価尺度
(重なり具合を評価する)
評価尺度を最適化するアルゴリズ
ム
(早く重ねる)
10 . 3
評価尺度の最適化
最急降下法
共益勾配法 など
今回は自作の最適化?関数
10 . 6
画像の変形
線形変換(アフィン変換)
1.剛体位置合わせ(形が変わらない):平行移動、回転
2.非剛体位置合わせ(形が変わる):平行移動、回転、拡大
非線形変換(アフィン変換できないもの)
1. B-spline
法
変換後行列  アフィン行列  変換前行列
=
⎛
⎝
⎜
X
Y
1
⎞
⎠
⎟
⎛
⎝
⎜
acosθ
asinθ
0
−asinθ
cosθ 
0
T x
T y
1
⎞
⎠
⎟
⎛
⎝
⎜
x
y
1
⎞
⎠
⎟
10 . 4
画像の類似度の評価
残差の二乗和(SSD=Sum of Squared Difference)
差分絶対値和(SAD=Sum of Absolute Difference)
正規化相互相関(NCC:Normalized Cross-
Correlation)
相互情報量
SSD = |A(x) − B(x)∑
x
|
2
SAD = |A(x) − B(x)|∑
x
NCC =
A(x)B(x)∑
x
A(x∑
x
)
2
− −−−−−−−
√ B(x∑
x
)
2
− −−−−−−−
√
10 . 5
評価尺度の最適化
最急降下法
共益勾配法 など
今回は自作の最適化?関数
10 . 6
方針
前半のまとめ(magickのgrayscaleは面倒?)から、
当初の予定と変更してEBImageで差分画像を作成
シンプルにxy軸の調整のみ。rotate、拡大縮小はな
し
差分の二乗和で評価
自作最適化??関数
10 . 7
差分作成用画像
左右の位置ずれはわずか、上下に位置ずれ有り。
10 . 8
差分画像作成の実際
11 . 1
単純差分処理
まずはなにも考えずに、単純な引き算してみます。
上下方向のいちズレが見立ちます。
11 . 2
grid searchの差分画像
y軸方向のズレが改善
11 . 5
もう少し計算量を減らしたい
11 . 6
自作最適化?関数作りました
動画(you tube)
動画(mp4)
11 . 7
自作関数の差分画像
y軸方向のズレはgrid searchと同程度改善
11 . 9
画像作成の計算時間
grid search :
自作関数 :
ユーザ システム 経過
725.88 220.83 949.74
ユーザ システム 経過
33.34 12.89 59.03
11 . 10
後半のまとめ
12 . 1
後半まとめ
そこそこの胸部X線経時的差分画像は、Rで比較的容易に処
理できる。
でも胸部レントゲン画像は、差分計算のコストがかなり大き
い。
位置合わせ用に、低解像度画像を使用するか、コストの低い
最適化関数が必要。
できれば、特徴量検出(SHIFT、SURF)して非線形変換してみ
たい。(要学習!)
openCVとつなぐか、フルスクラッチ?
12 . 2
reference
13 . 1
reference1
github:magick
The magick package: Advanced Image-Processing in R
Introduction to EBImage
[R] EBImageを使った画像処理
医用画像位置合わせの基礎
https://github.com/ropensci/magick
https://cloud.r-project.org/web/packages/magick/vignettes/int
http://bioconductor.org/packages/devel/bioc/vignettes/E
introduction.html
http://d.hatena.ne.jp/Rion778/20091210/1260414280#fi
https://lp-tech.net/articles/vb
13 . 2

More Related Content

What's hot

変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明Haruka Ozaki
 
SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料ttt_miura
 
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理wada, kazumi
 
kaggle Freesound Audio Tagging 2019 4th place solution
kaggle Freesound Audio Tagging 2019 4th place solutionkaggle Freesound Audio Tagging 2019 4th place solution
kaggle Freesound Audio Tagging 2019 4th place solution理 秋山
 
混合モデルを使って反復測定分散分析をする
混合モデルを使って反復測定分散分析をする混合モデルを使って反復測定分散分析をする
混合モデルを使って反復測定分散分析をするMasaru Tokuoka
 
Oracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoOracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoSatoshi Kato
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language SupervisionDeep Learning JP
 
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】Hiroyuki Muto
 
因果探索: 観察データから 因果仮説を探索する
因果探索: 観察データから因果仮説を探索する因果探索: 観察データから因果仮説を探索する
因果探索: 観察データから 因果仮説を探索するShiga University, RIKEN
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative ModelsDeep Learning JP
 
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由takehikoihayashi
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)itoyan110
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Yuya Unno
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似智啓 出川
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム貴之 八木
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
Graphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceGraphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceKenji Hiranabe
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JPSercan Ahi
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章nocchi_airport
 

What's hot (20)

変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料SakataMoriLab GNN勉強会第一回資料
SakataMoriLab GNN勉強会第一回資料
 
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
 
kaggle Freesound Audio Tagging 2019 4th place solution
kaggle Freesound Audio Tagging 2019 4th place solutionkaggle Freesound Audio Tagging 2019 4th place solution
kaggle Freesound Audio Tagging 2019 4th place solution
 
PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講
 
混合モデルを使って反復測定分散分析をする
混合モデルを使って反復測定分散分析をする混合モデルを使って反復測定分散分析をする
混合モデルを使って反復測定分散分析をする
 
Oracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoOracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslasso
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
 
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
検定力分析とベイズファクターデザイン分析によるサンプルサイズ設計【※Docswellにも同じものを上げています】
 
因果探索: 観察データから 因果仮説を探索する
因果探索: 観察データから因果仮説を探索する因果探索: 観察データから因果仮説を探索する
因果探索: 観察データから 因果仮説を探索する
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models
 
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似
 
混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム混合ガウスモデルとEMアルゴリスム
混合ガウスモデルとEMアルゴリスム
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
Graphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceGraphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data Science
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
 

Similar to SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-

goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-IIYo Ya
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnailYo Ya
 
go-thumber-imagick
go-thumber-imagickgo-thumber-imagick
go-thumber-imagickYo Ya
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用nmaro
 
勉強会資料Out ofmemory
勉強会資料Out ofmemory勉強会資料Out ofmemory
勉強会資料Out ofmemoryNao Fujita
 

Similar to SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像- (6)

goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-II
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnail
 
go-thumber-imagick
go-thumber-imagickgo-thumber-imagick
go-thumber-imagick
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用
 
Swift愛好会vol37
Swift愛好会vol37Swift愛好会vol37
Swift愛好会vol37
 
勉強会資料Out ofmemory
勉強会資料Out ofmemory勉強会資料Out ofmemory
勉強会資料Out ofmemory
 

SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-