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

変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 
YamadaiR(Categorical Factor Analysis)
YamadaiR(Categorical Factor Analysis)YamadaiR(Categorical Factor Analysis)
YamadaiR(Categorical Factor Analysis)考司 小杉
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)Motoya Wakiyama
 
20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列Toru Tamaki
 
[DL輪読会]Deep Neural Networks as Gaussian Processes
[DL輪読会]Deep Neural Networks as Gaussian Processes[DL輪読会]Deep Neural Networks as Gaussian Processes
[DL輪読会]Deep Neural Networks as Gaussian ProcessesDeep Learning JP
 
はじパタ6章前半
はじパタ6章前半はじパタ6章前半
はじパタ6章前半T T
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森Masashi Komori
 
ResNest: split-attention networks
ResNest: split-attention networksResNest: split-attention networks
ResNest: split-attention networksharmonylab
 
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討Yuta Matsunaga
 
CVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetCVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetTakuya Minagawa
 
トピックモデルの話
トピックモデルの話トピックモデルの話
トピックモデルの話kogecoo
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだことnishio
 
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】Yuki Arase
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptxOsamu Ogasawara
 
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布Nagayoshi Yamashita
 
解説#78 誤差逆伝播
解説#78 誤差逆伝播解説#78 誤差逆伝播
解説#78 誤差逆伝播Ruo Ando
 

What's hot (20)

Rを用いたGIS
Rを用いたGISRを用いたGIS
Rを用いたGIS
 
20210711 deepI2P
20210711 deepI2P20210711 deepI2P
20210711 deepI2P
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
YamadaiR(Categorical Factor Analysis)
YamadaiR(Categorical Factor Analysis)YamadaiR(Categorical Factor Analysis)
YamadaiR(Categorical Factor Analysis)
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
 
20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列
 
[DL輪読会]Deep Neural Networks as Gaussian Processes
[DL輪読会]Deep Neural Networks as Gaussian Processes[DL輪読会]Deep Neural Networks as Gaussian Processes
[DL輪読会]Deep Neural Networks as Gaussian Processes
 
はじパタ6章前半
はじパタ6章前半はじパタ6章前半
はじパタ6章前半
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森
 
ResNest: split-attention networks
ResNest: split-attention networksResNest: split-attention networks
ResNest: split-attention networks
 
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討
微分可能な信号処理に基づく音声合成器を用いた DNN 音声パラメータ推定の検討
 
CVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetCVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNet
 
トピックモデルの話
トピックモデルの話トピックモデルの話
トピックモデルの話
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
 
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
 
Graph U-Nets
Graph U-NetsGraph U-Nets
Graph U-Nets
 
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布
パターン認識と機械学習(PRML)第2章 確率分布 2.3 ガウス分布
 
解説#78 誤差逆伝播
解説#78 誤差逆伝播解説#78 誤差逆伝播
解説#78 誤差逆伝播
 
階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 

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