スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

高校数学C 消滅

この記事を閲覧するにはパスワードが必要です
パスワード入力

Butterworth Filterの様子

Butterworth_Filter.png

library(rgl)
z1 <- matrix(rep(seq(-1.0,1.0,0.01), 201), nrow=201)
z2 <- t(z1)
Dm <- 0.5
z <- 100/(1+(sqrt(z1*z1+z2*z2)/Dm)**8)
x <- (1:nrow(z))
y <- (1:nrow(z))
surface3d(x, y, z, col="lightblue", alpha=0.8)
decorate3d()

Cartoonifier

Tateyama_bigwaves_1200.jpg

Tateyama_bigwaves_1200_cartoon.png


3次元空間中に張られた3点の外接円の中心の求め方:
① 2点選び、2点間の中間となる平面の方程式を求める。
② もう2点選び、2点間の中間となる平面の方程式を求める。
③ 3点を通る平面の方程式を求める。
④ ①、②、③の平面の交点をCramerの公式により求める。
行列式等はEigenによる方が見る側がわかりやすいだろう。

Sketch Filter, Cartoon Filter(OpenCV)

蓬莱橋

horai_bridge_large.jpg

median Blur

horai_bridge_medianBlur.png

Laplacian

horai_bridge_Laplacian_edges.png

Edge

horai_bridge_Laplacian_mask.png



錦帯橋

kintaikyo_2.jpg

median Blur

kintaikyo_2_medianBlur.png

Laplacian

kintaikyo_2_Laplacian_edges.png

Edge

kintaikyo_2_Laplacian_mask.png



Munich church

Munich_church.jpg

median Blur

Munich_church_medianBlur.png

Laplacian

Munich_church_Laplacian_edges.png

Edge

Munich_church_Laplacian_mask.png

画像の離散フーリエ変換、離散コサイン変換

Reaction-Diffusion Equation Gray-Scott model

mu2.jpg

DFT

mu2_DFT_gray.png

DCT

mu2_dct.png


Reaction-Diffusion Equation FitzHugh-Nagumo model

FitzHughNagumoSpiralWave.jpg

DFT

FitzHughNagumoSpiralWave_DFT_gray.png

DCT

FitzHughNagumoSpiralWave_dct.png


Reaction-Diffusion Equation "China" model

Turing_Pattern_China3-03-2.jpg

DFT

Turing_Pattern_China3-03-2_DFT_gray.png

DCT

Turing_Pattern_China3-03-2_dct.png


CvMatクラスの画像の保存:
cvSaveImage("dct.png", dct);

CvMatクラスの各画素値の変更(対数)
for(y=0; yheight; y++){
for(x=0; xwidth; x++){
cvmSet(dct,y,x, 50*log(fabs(cvmGet(dct,y,x)+1)));
}
}

画像処理の初歩(OpenCV使用)

下のアゲハの画像を元に、色相変換、2値変換、エッジ検出を行う。

butterfly.jpg


【色相変換】
一度HSV形式に変換し、Hを変更後、RGB形式に戻して画像を保存する。

img_hsv = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
img_h = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
img_s = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
img_v = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
img_dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
double val=60.0; // 色相の変換量
cvCvtColor(img, img_hsv, CV_BGR2HSV); // HSVに変更
cvSplit(img_hsv, img_h, img_s, img_v, NULL); // H, S, Vチャネルに分離
for(int j=0; jheight; j++){
for(int i=0; iwidth; i++){
double hue=cvGetReal2D(img_h, j, i);
double newval = hue+val;
newval = (int)newval%180;
cvSetReal2D(img_h, j, i, newval);
}
}
cvMerge(img_h, img_s, img_v, NULL, img_dst); // H, S, Vを結合
cvCvtColor(img_dst, img_dst, CV_HSV2BGR); // HSVをRGBに変換

butterfly.jpg butterfly_HSVplus30.jpg

butterfly_HSVplus60.jpg butterfly_HSVplus90.jpg

butterfly_HSVplus120.jpg butterfly_HSVplus150.jpg


【2値化】
グレースケールに変換の後、閾値を定めて2値化する。

img_gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
img_bin = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);

cvCvtColor(img, img_gray, CV_BGR2GRAY); // モノクロ画像へ変換
cvThreshold(img_gray, img_bin, 128, 255, CV_THRESH_BINARY); // 2値化

butterfly.jpg butterfly_bin.jpg


【エッジ検出】
空間微分を利用して局所最大となるpixelを検出しているらしい。Cannyアルゴリズムというものがあるらしく、これを使うと繋がった線として検出してくるらしい。

img_gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
img_edge = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
cvCvtColor(img, img_gray, CV_BGR2GRAY); // モノクロ画像へ変換
cvCanny(img_gray, img_edge, 80, 120, 3); // エッジ検出

butterfly.jpg butterfly_edge.jpg



Essential OpenCV Programming―With Visual C++ 2008Essential OpenCV Programming―With Visual C++ 2008
(2009/10)
谷尻 豊寿

Profile

zoa

Author:zoa
Metropolis (1927)

Calendar
12 | 2015/01 | 02
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Labels
Admin
Previous Posts
Recent Comments
Recent Trackback
Archive
このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。