{biOps}インストールについては前々回を参照。
サンプル画像については前回を参照。
ただし、今回はノイズが多めに載ってます。
[0, 90]の一様乱数。他は前回と同じ。
ガウシアンフィルタ
結果から。
順調に背景ノイズが緩和されています。
が、細い線はブロードになります。
{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)
ふむ、で、最初にGaussian filter(σ≒1.3)をかけておくと、
最後に、これ。
オリジナル、splineで3x3に拡張補間、Gaussian filter(σ≒1.3)、差分。
Canny Edge ditector
まぁ、出来合いのを使えばサクッと。
dat <- readTiff("hoge")
dat3 <- imgScale(dat, 3, 3, interpolation="spline")
dat_Canny <- imgCanny(dat3, sigma=1)
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)
}
という事で、最後までゴリ押しでした。
{EBImage}については、まぁ、そのうちに。