• 検索結果がありません。

36

37

謝 辞

本 研 究 に あ た り , 研 究 内 容 ・ 進 行 法 な ど , 様 々 な 面 で ご 指 導 し て く だ さ り ま し た 三 浦 准 教 授 に ,こ の 場 を 借 り て 心 よ り 御 礼 申 し 上 げ ま す 。 加 え て ,研 究 期 間 中 に 御 教 授 し て い た だ い た 情 報 セ ク シ ョ ン の 先 生 方 , 先 輩 方 に 御 礼 申 し 上 げ ま す 。 ま た , 研 究 室 の 方 々 を 始 め と す る , 実 験 に 協 力 し て い た だ い た 方 々 に , 重 ね て 御 礼 申 し 上 げ ま す 。

38

参考文献

[1] Mine, M. R., van Baar, J., Grundhöfer, A., Rose, D., & Yang, B.

(2012). Projection-Based Augmented Reality in Disney Theme Parks. IEEE Computer, 45(7), 32-40.

[2]

初 音 ミ ク 公 式 ブ ロ グ

,(記 事 投 稿 日 時 )2015/02/10/ 20:40 http://blog.piapro.net/2015/02/u1502101_1.html

(ア ク セ ス 日 ) 2015/02/13

[3]

佐 藤 雄 隆

,

金 子 俊 一

,

丹 羽 義 典

, &

山 本 和 彦

. (2003). Radial reach filter (RRF)

に よ る ロ バ ス ト な 物 体 検 出

.

電 子 情 報 通 信 学 会 論 文 誌

D, 86(5), 616-624.

[4]橋 本 直 (2012) AR

プ ロ グ ラ ミ ン グ ―

Processing

で つ く る 拡 張 現 実 感 の レ シ ピ ― オ ー ム 社

[5]

中 村 薫

(2011) KINECT

セ ン サ ー プ ロ グ ラ ミ ン グ 秀 和 シ ス テ ム

[6]

は つ ね み く み く 出 た ! プ ロ ジ ェ ク シ ョ ン マ ッ ピ ン グ 利 用 の お 手 軽 デ ス ク ト ッ プ ラ イ ブ ス テ ー ジ

, (記 事 投 稿 日 時 )2013/03/01 20:25

http://vocaloid.blog120.fc2.com/blog-entry-14596.html

(ア ク セ ス 日 時 ) 2014/04/16

39

[7]Xia, L., Chen, C. C., & Aggarwal, J. K. (2011, June). Human detection using depth information by kinect. In Computer Vision and Pattern Recognition Workshops (CVPRW), 2011 IEEE

Computer Society Conference on (pp. 15-22). IEEE.

40

付録

付 録 と し て , 事 件 に 用 い た 人 物 抽 出 映 像 の プ ロ ジ ェ ク シ ョ ン マ ッ ピ ン グ に 関 す る プ ロ グ ラ ム コ ー ド と 撮 影 し た 映 像 を 単 純 に プ ロ ジ ェ ク シ ョ ン マ ッ ピ ン グ す る プ ロ グ ラ ム コ ー ド を 添 付 す る 。

41

/******************************************************************/

//Title:人 物 抽 出 映 像 と 背 景 マ ッ ピ ン グ プ ロ グ ラ ム コ ー ド //

//Content: 2 映 像 テ ク ス チ ャ の 頂 点(選 択 時 円 表 示)を ド ラ ッ グ し て 映 像 を 貼 付 け る

//

//Name:Myazaki Aoi //Date:2015/2/12

/******************************************************************/

import SimpleOpenNI.*;//ver 0.20

SimpleOpenNI kinect;

color[] backpixel = null;// 背 景 保 存 用 色 配 列

/*---マッピング用 頂 点 移 動 要 素 定 義 ---*/

int selected = -1; // 選 択 されている頂 点 代 入 変 数 (頂 点 は 0〜7,-1 は非 選 択 状 態 )

int pos[][] =

{{0,0},{640,0},{640,480},{0,480},{640,50},{1280,50},{1280,530},{640,530}};// 初 期 頂 点 ピクセル情 報 座 標 配 列

float minD;//基 準 吸 着 距 離 変 数

float D;//マウスポインタと頂 点 距 離 格 納 変 数

void setup(){

/*---初 期 設 定 フェイズ---*/

size(1280,1024,P3D);//P3D 有 効

kinect = new SimpleOpenNI(this);

kinect.enableRGB(); //RGB カメラ有 効 化 kinect.enableDepth();// 深 度 カメラ有 効 化

kinect.alternativeViewPointDepthToImage();// 2カメラの視 点 一 致

kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);// 骨 格 検 出 有 効 化 (全 身 判 定 )

42

backpixel = new color[kinect. rgbWidth()*kinect.rgbHeight()];

}

void draw(){

background(0);//画 面 初 期 化 0=黒 背 景 kinect.update();// キネクトカメラの更 新

//image(kinect.rgbImage(),0,0);// テスト表 示 用

/*---人 物 領 域 判 定 フェイズ---*/

int[] usermap = null; //人 物 情 報 保 存 用

int usercount = kinect.getNumberOfUsers(); // ユーザがいるかどうかの判 断 用

//人 物 がいると判 断 されたとき if(usercount>0){

usermap = kinect.getUsersPixels(SimpleOpenNI.USERS_ALL);// ユーザマップ 取 得 関 数 による情 報 格 納

}

PImage img1 = createImage(640, 480, RG B);//人 物 描 画 テクスチャ用 PImage img2 = createImage(640, 480, RGB);// 背 景 描 画 テクスチャ用

//ピクセル読 み込 み img1.loadPixels();

img2.loadPixels();

//キネクト取 得 映 像 から各 ピクセルを割 り振 る for (int y=0;y<kinect.rgbHeight();y++){

for(int x=0;x<kinect.rgbWidth();x++){

int index = x+y*kinect.rgbWidth();//(x,y) 座 標 のピクセル検 索 方 法

43

if (usermap != null && usermap[index]>0){

img1.pixels[index] = kinect.rgbImage().pixels[index];// 人 物 部 分 の 処 理

}else{

backpixel[index] = kinect.rgbImage().pixels[index];// 非 人 物 部 分 の 処 理 (一 度 backpixel に退 避 )

}

img2.pixels[index] = backpixel[index];

} }

//ピクセルの更 新

img1.updatePixels();

img2.updatePixels();

/*---2 面 マッピング設 定 フェイズ---*/

noStroke();//縁 なしを設 定

// img1(人 物 側 )をテクスチャとして設 定 し頂 点 指 定 beginShape();

texture(img1);

vertex(pos[0][0],pos[0][1], 0, 0); // 左 上 頂 点 指 定

vertex(pos[1][0],pos[1][1], img1.width, 0); // 右 上 頂 点 指 定

vertex(pos[2][0],pos[2][1], img1.width, img1.height); // 右 下 頂 点 指 定 vertex(pos[3][0],pos[3][1], 0,img1.height); // 左 下 頂 点 指 定

endShape(CLOSE);

// img2(非 人 物 側 )をテクスチャとして設 定 し頂 点 指 定 beginShape();

texture(img2);

vertex(pos[4][0],pos[4][1], 0, 0); // 左 上 頂 点 指 定

vertex(pos[5][0],pos[5][1], img2.width, 0); // 右 上 頂 点 指 定

vertex(pos[6][0],pos[6][1], img2.width, img2.height); // 右 下 頂 点 指 定 vertex(pos[7][0],pos[7][1], 0,img2.height); // 左 下 頂 点 指 定

endShape(CLOSE);

44

/*---テクスチャ頂 点 操 作 フェイズ---*/

//ある点 がクリックされていたら

if( mousePressed && selected >= 0 ) {

pos[selected][0] = mouseX;

pos[selected][1] = mouseY;

ellipse( mouseX, mouseY, 20, 20 );// 選 択 円 の表 示 }

//頂 点 がクリックされていないとき else

{

minD = 25; //基 準 吸 着 距 離 (25)

selected = -1; //選 択 頂 点 の初 期 化 for (int i=0; i<8; i++) {

D = dist( mouseX, mouseY, pos[i][0], pos[i][1] ); // ポインタ位 置 と頂 点 の距 離 を格 納

//ある頂 点 とポインタが基 準 距 離 より近 いとき if ( D < minD )

{

minD = D;

selected = i;

ellipse( mouseX, mouseY, 20, 20 );// 選 択 円 の表 示 }

} }

}

45

/****************************************************************

**/

//Title:キネクト取 得 画 像 (RGB 画 像 )マッピング プログラムコード //

//Content:テクスチャの頂 点 (選 択 時 円 表 示 )をドラッグして映 像 を貼 付 ける //

//Name:Myazaki Aoi //Date:2015/2/12

/****************************************************************

**/

import SimpleOpenNI.*;//ver 0.20

SimpleOpenNI kinect;

/*----マッピング用 頂 点 移 動 要 素 定 義 ----*/

int selected = -1; // 選 択 されている頂 点 変 数 (頂 点 は 0〜3)

int pos[][] = {{0,0},{640,0},{640,480},{0,480}};// 初 期 頂 点 ピクセル情 報 座 標 配 列

float minD;//基 準 吸 着 距 離 変 数 float D;//ポインタと頂 点 距 離 格 納 変 数

void setup(){

/*---初 期 設 定 フェイズ---*/

size(1280,1024,P3D);//P3D 有 効

kinect = new SimpleOpenNI(this);

kinect.enableRGB(); //RGB カメラ有 効 化 kinect.enableDepth();// 深 度 カメラ有 効 化

kinect.alternativeViewPointDepthToImage();// 2カメラの視 点 一 致 }

46 void draw(){

background(0);//画 面 初 期 化

kinect.update();//キネクトカメラの更 新

//image(kinect.rgbImage(),0,0);// テスト表 示 用

PImage img1 = createImage(640, 480, RGB);// キネクト RGB 画 像 格 納 用

img1.loadPixels();

//各 ピクセルをコピー

for (int y=0;y<kinect.rgbHeight();y++){

for(int x=0;x<kinect.rgbWidth();x++){

int index = x+y*kinect.rgbWidth();//(x,y) 座 標 のピクセル検 索 方 法 img1.pixels[index] = kinect.rgbImage().pixels[index];// 人 物 部 分 の処 理

} }

img1.updatePixels();

/*---マッピングフェイズ---*/

noStroke();

beginShape();

texture(img1); // img1(RGB 画 像 )をテクスチャとして設 定 vertex(pos[0][0],pos[0][1], 0, 0); // 左 上 頂 点 指 定

vertex(pos[1][0],pos[1][1], img1.width, 0); // 右 上 頂 点 指 定

vertex(pos[2][0],pos[2][1], img1.width, img1.height); // 右 下 頂 点 指 定 vertex(pos[3][0],pos[3][1], 0,img1.height); // 左 下 頂 点 指 定

endShape(CLOSE);

関連したドキュメント