LoginSignup
2
2

More than 5 years have passed since last update.

{biOps} 画像のフィルタ操作

Last updated at Posted at 2016-01-26

{biOps}インストールについては前々回を参照。

サンプル画像については前回を参照。
ただし、今回はノイズが多めに載ってます。
[0, 90]の一様乱数。他は前回と同じ。

ガウシアンフィルタ

結果から。
gaussfilter_1.png
順調に背景ノイズが緩和されています。
が、細い線はブロードになります。

{biOps}では、

imgConvolve(imgdata, mask)

として、maskの中にフィルタをmatrixで書く。
Gaussian filterの事は、この素晴らしいページに全て書いてあります。
要するに、ノイズはシグナルに比べて高周波でバラバラと入るわけだから、その成分をカットすれば良いという発想です。

Rで書くには、

# これはσ ≒ 1.0の時
a <- c(1,4,6,4,1)
b <- NULL
for(i in 1:length(a)) b <- cbind(b, a*a[i])
fill_Gauss <- b/sum(b)

imgConvolve(imgdata, fill_Gauss)

という感じでゴリ押しで書けばよいだけ。

{biOps}では、

plot(imgdata)

で、勝手に絵が出ます。

微分フィルタ

別にどうということもなく、ですが。
Y軸方向微分ですと、

fil_y1 <- matrix(rep(c(-1,0, 1), 3), 3)
fil_y2 <- matrix(rep(c( 1,0,-1), 3), 3)

の2種類があるわけです。

byrow=T

とすればX軸方向になりますね。

y1  <- imgConvolve(dat, fil_y1)
y2  <- imgConvolve(dat, fil_y2)
y12 <- imgAdd(y1, y2)

という感じにすると、
y_filter1.png

で、これをX軸にもやって、mergeするわけです。
xy_filter.png

ふむ、で、最初にGaussian filter(σ≒1.3)をかけておくと、
xyGau_filter.png

最後に、これ。
オリジナル、splineで3x3に拡張補間、Gaussian filter(σ≒1.3)、差分。
xy_sp_Gau_filter.png

Canny Edge ditector

まぁ、出来合いのを使えばサクッと。

dat <- readTiff("hoge")
dat3 <- imgScale(dat, 3, 3, interpolation="spline")
dat_Canny <- imgCanny(dat3, sigma=1)

canny1.png

Cannyフィルタは、Gaussianフィルタを掛けて差分をとって、二値化をする。
この二値化がやたら凝っていて、ちゃんとエッジになるらしい。
詳しくはグーグる。

このsigmaは、Gaussのsigmaなので変えると輪郭も変わる。

par(mar=c(0,0,0,0), mfrow=c(4,4))
for(sigma in seq(0.5, 2, by=0.1)){
  dat_Canny <- imgCanny(dat3, sigma=sigma)
  plot(dat_Canny)
}

canny2.png

という事で、最後までゴリ押しでした。

{EBImage}については、まぁ、そのうちに。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2