Weekly Report for Inakage, Dec21st

稲蔭先生、植木先生、徳久先生

博士3年の藤村です。
本日12月21日現在の研究進捗報告です。
徳久先生>本日の博士セミナーですが、以下にあるように研究内容自体の進捗が少ないので、今日はみなさんの発表を聴講するのみで御願いしたく思います。すみません。
稲蔭先生>来週か、年始に、改めて研究計画書提出のスケジュールを相談させてください。以下のように、先日打ち合わせしたスケジュールを守れずにいます、すみません。

概要::::::::::::::::::::::::::::::::
■課題:手続き
大目標:3月末までに研究計画の審査を通過させる。12月中に第一回の提出、1月下旬に再提出の前提。>大きな遅れ。第一回提出1月以降になる。
小目標:11月中に研究計画書のドラフトを、稲蔭先生に提出>大きな遅れ。1月にずれこむ。
小目標:副アドバイザーを想定している奥出教授、砂原教授にコンタクトをとる。

■問題:11月末までに稲蔭教授に提出予定の研究計画ドラフトが未完成。研究の内容が希薄。おおよそ一ヶ月以上の遅れ。研究内容の充実と、以降の予定の調整が必要。

■研究計画書ドラフト 進捗状況と予定

Chapter1: Intro パワーポイント版を12月2日にプレゼンテーション済(要修正)
Chapter2: Literature Review 未完成 パワーポイント版 12月23日終了予定
Chapter3: Concept 未完成 パワーポイント版 年末終了予定
Chapter4: Reserach Plan and Validation 未完成 パワーポイント版 年始に書いてみる。評価方法のアドバイスをその際にもらう。

スケジュール::::::::::::::::::::::::::::::::

■今週(~12月21日)の達成度

研究計画書ドラフトを少しでも前に進める。ドラフトを書き始めて初めて研究の内容のあいまいさに気づいた。そこで、研究プロセスのわからないところは、先生方にアドバイスを求め、一歩づつ進める。デッドラインについて稲蔭先生と再度相談の必要あり。

1)研究プロセスに関してのアドバイスを得た。

a)稲蔭先生より:フィールドワークから研究テーマをみつける。

b)植木先生より:シナリオを描く際に、提供価値、経験価値の変化、光と人の関係、インフラの変化、という要素から考える。

c)徳久先生より:フィールドワークからプロトタイプへの流れの参考:先生のプロジェクトのドキュメント。

>手前味噌ですが以下にまとめてありますので、ご覧ください。
http://designthinking.dangkang.com/
特に11-13回、19-21回あたりに書籍とともにまとめています。(11/12/20 13:53):

2)研究計画書ドラフト Chapter2(Literature Review) パワーポイント

12月23日終了予定。21日現在、Literatureのリストのみ。reviewが未完。

3)研究計画書ドラフト Chapter3(Concept) パワーポイント

年末終了予定 未完成。書くためのプロセスを考えた。

3-1)現在まで行ってきた、また行っている簡単なフィールドワークから、仮説のニーズや、経験価値を想定し、シナリオを書く。(1)参照。

3-2)3で書き上げた複数のシナリオに共通する要素を探す。どんな大きなissueが全体に共通してあるのか。

4)研究計画書ドラフト Chapter4(Plan of Validation) パワーポイント

年始終了予定 。未完成。書くためのプロセスを考えた。

この章は、書く際にアドバイスを要する。

4-1)より深いフィールドワークをするための計画。アルスセンター、日吉、シンガポール、ソウル。最低限いくつのタイプのシナリオを先にすすめるべきか。何を証明するのに、何が必要かということになる。

4-2)プロトタイプの制作計画

4-3)最初のプロトタイプのvalidationは、何を評価するためか

4-4)最初のプロトタイプの先に、どこまでを博士研究の範囲にするか。

5)奥出教授、砂原教授にコンタクトをとる 未達成

懸念)研究計画書ドラフトができてからコンタクトするのでは、遅いか。

■次週(12月21日~25日)の計画
目標:研究計画書プロセス全体の見直し
1)研究計画書提出スケジュールをふくめた研究プロセスの見直し。

2)研究計画書ドラフト。Chapter2 (Literature Review)(12月25日終了予定)

■次週以降の計画
目標:12月中に研究計画書の提出(再提出があることを前提)<破綻してしまっている。
問題:12月21日現在、研究計画書のドラフトさえも未完成。スケジュール調整が必要。

1)研究計画書ドラフト Chapter2(Literature Review) フィードバックがあれば反映

2)研究計画書ドラフト Chapter3(Concept) (年末に終了)

3) 研究計画書ドラフト Chapter4(Research Plan and Validation) (年始に終了)

4)奥出教授、砂原教授にコンタクトをとる。

備考:::::::

1)Chapter1 introduction DIY urbanismについて、より適切な他の例にとりかえる。未達成。
2)Chapter3 conceptの展開にあたって、稲蔭先生と植木先生からのコメントを参考。(今週の達成度)参照

ここまで

Weekly Report for Inakage, Dec 2nd

備考:
いなかげ>フィールドワークしたらどうですか
レポート是非週一のペースでやりましょう

うえき>
一つアドバイスとして、これですが、あまりWickedProblemという概念自体に縛られる必要はないと思います。
4)シナリオを今後追加したり、詳細を作り上げる際、どのような経験が付加されるのかを必ず考えること。その方向性の例として、
Benefit, Convenience, Pleasureがある。
とコメントにもあるように、アプローチとしてはTOTOの開発したウォシュレットの様な位置づけを
狙うといいかもしれません。それがある前とできた後で、圧倒的な経験価値の差があるとしたら、
どのような世界観が生まれうるかという視点です。他にも、ウォークマン、iPodなどなど。
あと、照明を演出の部分と、制御の部分で見ていったときに、新しい人との関係がどう生まれるか、
その時にインフラがどの様に変化していくかという視点もとても重要になると思います。

**********
稲蔭先生、徳久先生、植木先生

博士3年の藤村です。

これから、週に一回のペースで、私の研究の進展をレポートしたいと思います。
返信は必要ありませんが、受け取る事が負担になってしまうようでしたら、遠慮なくお知らせください。

他の学生のプレゼンテーションを見る中で、自分の研究には中心となるテーマがない事がわかってきました。
本来、テーマあっての研究計画書の作成だと思いますが、私の場合は、研究計画書を作る中で少しでもテーマを作ることができればと
考え、ベストを尽くします。

2011年12月2日

概要::::::::::::::::::::::::::::::::

■問題:11月末までに稲蔭教授に提出予定の研究計画ドラフトが未完成。

■課題1:
奥出教授の言うWickedProblemの抽出、それを裏付ける調査を行っていないため、研究サブジェクトがなく、
結果、どのシナリオもその必要性が定義できていない。
シナリオの内容は、「このようなものを製作したい。このように面白い(と思われる)」にとどまっている。

解決案:本来踏むべき研究テーマの抽出プロセスに沿わずにアイデアを出しているのが原因。
具体的な調査を行う時間が現在ない。そこで、日常の中で発見した問題と、研究領域内の文献触れられている問題をもとに、
仮説として問題をたてる。今後の研究プロセスに、具体的な場所でのプロトタイプ製作の最初のステップとして調査をいれる。

■課題2:手続き
大課題:3月末までに研究計画の審査を通過させる。12月中に第一回の提出、1月下旬に再提出の前提。
小課題:11月中に研究計画書のドラフトを、稲蔭先生に提出
小課題:副アドバイザーを想定している奥出教授、砂原教授にコンタクトをとる。

解決案:以下のスケジュール参照。

スケジュール::::::::::::::::::::::::::::::::

■今週(~12月1日)の達成度
目標:研究計画書ドラフトを、パワーポイント発表資料の形で完成させる。

達成度:
1)研究計画書ドラフト Chapter1(Introduction) パワーポイント発表資料 完成
2)研究計画書ドラフト Chapter2(Literature Review) パワーポイント発表資料 80% 製作中
3)12月1日 博士セミナーにてChapter1(イントロダクション)部分と、シナリオ3つを
発表。意見を得た

結果:研究計画書ドラフト未完成

■次週(12月2日~9日)の計画
目標:研究計画書ドラフトを、パワーポイント発表資料の形で完成させる。

1)研究計画書ドラフト Chapter2(Literature Review) パワーポイント発表資料 完成へ(12月4日終了予定)
2)研究計画書ドラフト Chapter3(Concept) Chapter4(Plan of Validation) (12月9日終了予定)
3)奥出教授、砂原教授にコンタクトをとる。

■次週以降の計画
目標:12月中に研究計画書の提出(再提出があることを前提)

1)12月22日 博士セミナーで発表。 Chapter3(コンセプト)Chapter4(研究プラン、評価計画)のサマリーを報告予定
2)研究計画書ドラフトへの意見を得る。今後の予定の調整。
3)ユニオン造形財団 調査研究公募 12月15日締め切り 応募するか未定。

備考::::::::::::::::::::::::::::::::

12月1日 博士セミナー 意見サマリー
1)車から歩道を照らし安全に貢献するシナリオだが、弊害のほうが大きい。安全は確保されない。かつ、既に見かけ上同じものがある。
2)車をテーマに取り入れること自体が難しい。
3)研究領域のひとつとしてあげた、”DIY Urbanism”を変更すべき。ネーミングも問題。
4)シナリオを今後追加したり、詳細を作り上げる際、どのような経験が付加されるのかを必ず考えること。その方向性の例として、Benefit, Convenience, Preasureがある。

意見への対応
1)2)車から自転車へシナリオを変更。歩道の暗さによる危険が問題として認めらず、説得できなかった。提供価値を考え直す。
3)研究領域を説明する文献としてDIY Urbanismが必要か、再検討。ネーミングが問題だという意見に対しては、DIY Urbanismは文献タイトルなのでそれ自体は変更できないと考える。自分で言葉を別途作ることで解決。
4)Chapter3(コンセプト)に含める8つのシナリオそれぞれにおいて、どのような価値を持つ経験が得られるのかを明記する。

■ここまで

Draft for Inakage PhD Seminar, Dec 1st, 2011

Page0:
Cover picture

Page1:
Update
What I have done so far (from Mid September)
1)Read a lot of books and materials… to find roots of my vague ideas
2)Try locationg my research domain as participative urban landscape design (and DIY urbanism)
3)Regrouping scenarios. Found some tentative design fremeworks along the way.

My Process:
1)Start from inspiraion and tentative scenarios, building reserach subject.
2)
3)Find real situations, places, users, and specialist of the matter. Then revise the tentative scenario to concrete plan
4)

Today’s presentation.
1)Revised introduction part. to explain Research Domain
2)Revised set of scenario. to explain Research Subject

am doing:
1)draft of research proposal (with Chapter2: Literature review, Chapter 3: Concept, and Chapter4: Research plan and validation)
->This weekend. for internal review. Chapter 4 needs a bunch of advice.
->Supposedly done by now.

*
Placemaking efforts and participative urban landscape
1)Laurence halprin and workshop approach
2)Joseph Beuys and Social Sculpture
3)
*
About ‘Reciprocal stweardship’ in Design for ecological democracy

Passive Engagement Active Engagement
Stationed(Garden materials)
Use the park/ Become stewar
*Behavior/Value
Passive Engagement Active Engagement Commitment as an owner Feedback the owner will earn
Stationed  More safety and mood. Not personalized
Mobile  More safety and mood. Not personalized

Expansion of ‘stewardship’ model in to 2 axis.
1)Expand it with mobile materials. This naturally leads expansion of (2)
2)Expand it to both side of the device. Not only End users but Owners.
*

Stationed/ Mobile Scene Main Drawing Story drawing UI,System
Stationed Media Facade x1
Stationed Office and Mall at Friday night.
Stationed Side facade/Jogging course at park
Stationed Cafe / Porch
Mobile Car parking at a street 3
Mobile+Stationed Dance! x2
Mobile Schoolkids are passing by
Stationed Open tool for existing community. Stewardship at Community Housing Realtime camera on smartphone. Use candle light/handmade props

*
3 scenarios
1)Media Facade
2)Car parking
3)Dance!

opticalflow_sketch10435_Nov9th.pde

// Optical Flow 2010/05/28
// Hidetoshi Shimodaira shimo@is.titech.ac.jp 2010 GPL

//DLd from http://www.openprocessing.org/visuals/?visualID=10435

//modified by Nori Fujimura   nori_fujimura@me.com Nov9th, 2011

///////////////////////////////////////////////
// parameters for desktop pc (high performance)
int wscreen=320;
int hscreen=240;
int gs=10; // grid step (pixels)
float predsec=1.0; // prediction time (sec): larger for longer vector

///////////////////////////////////////////////
// use video
import processing.video.*;
Capture video;
PFont font;
color[] vline;
MovieMaker movie;

// capture parameters
int fps=30;

/*
// use sound
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput audioout;
SineWave sine;
*/

// grid parameters

int as=gs*2;  // window size for averaging (-as,…,+as)
int gw=wscreen/gs;
int gh=hscreen/gs;
int gs2=gs/2;
float df=predsec*fps;

// regression vectors
float[] fx, fy, ft;
int fm=3*9; // length of the vectors

// regularization term for regression
float fc=pow(10,8); // larger values for noisy video

// smoothing parameters
float wflow=0.1; // smaller value for longer smoothing

// switch
boolean flagseg=false; // segmentation of moving objects?
//boolean flagball=true; // playing ball game?
boolean flagmirror=true; // mirroring image?
boolean flagflow=true; // draw opticalflow vectors?
//boolean flagsound=true; // sound effect?
boolean flagimage=true; // show video image ?
boolean flagmovie=false; // saving movie?

// internally used variables
float ar,ag,ab; // used as return value of pixave
float[] dtr, dtg, dtb; // differentiation by t (red,gree,blue)
float[] dxr, dxg, dxb; // differentiation by x (red,gree,blue)
float[] dyr, dyg, dyb; // differentiation by y (red,gree,blue)
float[] par, pag, pab; // averaged grid values (red,gree,blue)
float[] flowx, flowy; // computed optical flow
float[] sflowx, sflowy; // slowly changing version of the flow
int clockNow,clockPrev, clockDiff; // for timing check

/*
// playing ball parameters
float ballpx=wscreen*0.5; // position x
float ballpy=hscreen*0.5; // position y
float ballvx=0.0; // velocity x
float ballvy=0.0; // velocity y
float ballgy=0.05; // gravitation
float ballsz=30.0; // size
float ballsz2=ballsz/2;
float ballfv=0.8; // rebound factor
float ballhv=50.0; // hit factor
float ballvmax=10.0; // max velocity (pixel/frame)
*/

void setup(){
// screen and video
size(wscreen, hscreen, P2D);
video = new Capture(this, wscreen, hscreen, fps);
// font
font=createFont(“Verdana”,10);
textFont(font);
// draw
rectMode(CENTER);
ellipseMode(CENTER);
/*
// sound : not essential, only for ball movement
minim = new Minim(this);
audioout = minim.getLineOut(Minim.STEREO, 2048);
sine = new SineWave(440, 0.5, audioout.sampleRate());
sine.portamento(200);
sine.setAmp(0.0);
audioout.addSignal(sine);
*/

// arrays
par = new float[gw*gh];
pag = new float[gw*gh];
pab = new float[gw*gh];
dtr = new float[gw*gh];
dtg = new float[gw*gh];
dtb = new float[gw*gh];
dxr = new float[gw*gh];
dxg = new float[gw*gh];
dxb = new float[gw*gh];
dyr = new float[gw*gh];
dyg = new float[gw*gh];
dyb = new float[gw*gh];
flowx = new float[gw*gh];
flowy = new float[gw*gh];
sflowx = new float[gw*gh];
sflowy = new float[gw*gh];
fx = new float[fm];
fy = new float[fm];
ft = new float[fm];
vline = new color[wscreen];
}

// calculate average pixel value (r,g,b) for rectangle region
void pixave(int x1, int y1, int x2, int y2) {
float sumr,sumg,sumb;
color pix;
int r,g,b;
int n;

if(x1<0) x1=0;
if(x2>=wscreen) x2=wscreen-1;
if(y1<0) y1=0;
if(y2>=hscreen) y2=hscreen-1;

sumr=sumg=sumb=0.0;
for(int y=y1; y<=y2; y++) {
for(int i=wscreen*y+x1; i<=wscreen*y+x2; i++) {
pix=video.pixels[i];
b=pix & 0xFF; // blue
pix = pix >> 8;
g=pix & 0xFF; // green
pix = pix >> 8;
r=pix & 0xFF; // red
// averaging the values
sumr += r;
sumg += g;
sumb += b;
}
}
n = (x2-x1+1)*(y2-y1+1); // number of pixels
// the results are stored in static variables
ar = sumr/n;
ag=sumg/n;
ab=sumb/n;
}

// extract values from 9 neighbour grids
void getnext9(float x[], float y[], int i, int j) {
y[j+0] = x[i+0];
y[j+1] = x[i-1];
y[j+2] = x[i+1];
y[j+3] = x[i-gw];
y[j+4] = x[i+gw];
y[j+5] = x[i-gw-1];
y[j+6] = x[i-gw+1];
y[j+7] = x[i+gw-1];
y[j+8] = x[i+gw+1];
}

// solve optical flow by least squares (regression analysis)
void solveflow(int ig) {
float xx, xy, yy, xt, yt;
float a,u,v,w;

// prepare covariances
xx=xy=yy=xt=yt=0.0;
for(int i=0;i<fm;i++) {
xx += fx[i]*fx[i];
xy += fx[i]*fy[i];
yy += fy[i]*fy[i];
xt += fx[i]*ft[i];
yt += fy[i]*ft[i];
}

// least squares computation
a = xx*yy – xy*xy + fc; // fc is for stable computation
u = yy*xt – xy*yt; // x direction
v = xx*yt – xy*xt; // y direction

// write back
flowx[ig] = -2*gs*u/a; // optical flow x (pixel per frame)
flowy[ig] = -2*gs*v/a; // optical flow y (pixel per frame)
}

void draw() {
if(video.available()){
// video capture
video.read();

// clock in msec
clockNow = millis();
clockDiff = clockNow – clockPrev;
clockPrev = clockNow;

// mirror
if(flagmirror) {
for(int y=0;y<hscreen;y++) {
int ig=y*wscreen;
for(int x=0; x<wscreen; x++)
vline[x] = video.pixels[ig+x];
for(int x=0; x<wscreen; x++)
video.pixels[ig+x]=vline[wscreen-1-x];
}
}

// draw image
if(flagimage) set(0,0,video);
else background(0);

// 1st sweep : differentiation by time
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;
// compute average pixel at (x0,y0)
pixave(x0-as,y0-as,x0+as,y0+as);
// compute time difference
dtr[ig] = ar-par[ig]; // red
dtg[ig] = ag-pag[ig]; // green
dtb[ig] = ab-pab[ig]; // blue
// save the pixel
par[ig]=ar;
pag[ig]=ag;
pab[ig]=ab;
}
}

// 2nd sweep : differentiations by x and y
for(int ix=1;ix<gw-1;ix++) {
for(int iy=1;iy<gh-1;iy++) {
int ig=iy*gw+ix;
// compute x difference
dxr[ig] = par[ig+1]-par[ig-1]; // red
dxg[ig] = pag[ig+1]-pag[ig-1]; // green
dxb[ig] = pab[ig+1]-pab[ig-1]; // blue
// compute y difference
dyr[ig] = par[ig+gw]-par[ig-gw]; // red
dyg[ig] = pag[ig+gw]-pag[ig-gw]; // green
dyb[ig] = pab[ig+gw]-pab[ig-gw]; // blue
}
}

// 3rd sweep : solving optical flow
for(int ix=1;ix<gw-1;ix++) {
int x0=ix*gs+gs2;
for(int iy=1;iy<gh-1;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

// prepare vectors fx, fy, ft
getnext9(dxr,fx,ig,0); // dx red
getnext9(dxg,fx,ig,9); // dx green
getnext9(dxb,fx,ig,18);// dx blue
getnext9(dyr,fy,ig,0); // dy red
getnext9(dyg,fy,ig,9); // dy green
getnext9(dyb,fy,ig,18);// dy blue
getnext9(dtr,ft,ig,0); // dt red
getnext9(dtg,ft,ig,9); // dt green
getnext9(dtb,ft,ig,18);// dt blue

// solve for (flowx, flowy) such that
// fx flowx + fy flowy + ft = 0
solveflow(ig);

// smoothing
sflowx[ig]+=(flowx[ig]-sflowx[ig])*wflow;
sflowy[ig]+=(flowy[ig]-sflowy[ig])*wflow;
}
}

// 4th sweep : draw the flow
if(flagseg) {
noStroke();
fill(0);
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

float a=sqrt(u*u+v*v);
if(a<2.0) rect(x0,y0,gs,gs);
}
}
}

// 5th sweep : draw the flow
if(flagflow) {
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

// draw the line segments for optical flow
float a=sqrt(u*u+v*v);
if(a>=2.0) { // draw only if the length >=2.0
float r=0.5*(1.0+u/(a+0.1));
float g=0.5*(1.0+v/(a+0.1));
float b=0.5*(2.0-(r+g));
stroke(255*r,255*g,255*b);
line(x0,y0,x0+u,y0+v);
}
}
}
}

/*
///////////////////////////////////////////////////////
// ball movement : not essential for optical flow
if(flagball) {
// updatating position and velocity
ballpx += ballvx;
ballpy += ballvy;
ballvy += ballgy;

// reflecton
if(ballpx<ballsz2) {
ballpx=ballsz2;
ballvx=-ballvx*ballfv;
}
else if(ballpx>wscreen-ballsz2) {
ballpx=wscreen-ballsz2;
ballvx=-ballvx*ballfv;
}
if(ballpy<ballsz2) {
ballpy=ballsz2;
ballvy=-ballvy*ballfv;
}
else if(ballpy>hscreen-ballsz2) {
ballpy=hscreen-ballsz2;
ballvy=-ballvy*ballfv;
}

// draw the ball
fill(50,200,200);
stroke(0,100,100);
ellipse(ballpx,ballpy,ballsz,ballsz);

// find the grid
int ix= round((ballpx-gs2)/gs);
int iy= round((ballpy-gs2)/gs);
if(ix<1) ix=1;
else if(ix>gw-2) ix=gw-2;
if(iy<1) iy=1;
else if(iy>gh-2) iy=gh-2;
int ig=iy*gw+ix;

// hit the ball by your movement
float u=sflowx[ig];
float v=sflowy[ig];
float a=sqrt(u*u+v*v);
u=u/a;
v=v/a;
if(a>=2.0) a=2.0;
if(a>=0.3) {
ballvx += ballhv*a*u;
ballvy += ballhv*a*v;
float b=sqrt(ballvx*ballvx+ballvy*ballvy);
if(b>ballvmax) {
ballvx = ballvmax*ballvx/b;
ballvy = ballvmax*ballvy/b;
}
}

// sound
float pan = map(ballpx, 0, wscreen, -1, 1);
float freq = map(ballpy, 0, hscreen, 1500, 60);
float vol = map(a,0.0,0.8,0.0,1.0);
if(!flagsound) vol=0.0;
sine.setPan(pan);
sine.setFreq(freq);
sine.setAmp(vol);
}
*/
}

///////////////////////////////////////////////////
// recording movie
if(flagmovie) movie.addFrame();

//  print information (not shown in the movie)
fill(255,0,0);
text(clockDiff,10,10); // time (msec) for this frame
if(flagmovie) text(“rec”, 40,10);

}

void stopGame(){
//minim.stop();
super.stop();
}

void keyPressed(){
if(key==’c’) video.settings();
else if(key==’w’) flagseg=!flagseg; // segmentation on/off
// else if(key==’s’) flagsound=!flagsound; //  sound on/off
//else if(key==’e’) stopGame(); // quit
else if(key==’m’) flagmirror=!flagmirror; // mirror on/off
else if(key==’i’) flagimage=!flagimage; // show video on/off
else if(key==’f’) flagflow=!flagflow; // show opticalflow on/off
else if(key==’q’) {
flagmovie=!flagmovie;
if(flagmovie) { // start recording movie
movie = new MovieMaker(this, width, height, “mymovie.mov”,
fps);
}
else { // stop recording movie
movie.finish();
}
}
/*
else if(key==’ ‘) { // kick the ball
ballvy = -3.0;
}
else if(key==’b’) { // show the ball on/off
flagball=!flagball;
if(flagball) { // put the ball at the center
ballpx=wscreen*0.5;
ballpy=hscreen*0.5;
ballvx=ballvy=0.0;
}
}
*/
}

opticalflow_sketch10435.pde

// Optical Flow 2010/05/28
// Hidetoshi Shimodaira shimo@is.titech.ac.jp 2010 GPL

//from http://www.openprocessing.org/visuals/?visualID=10435
///////////////////////////////////////////////
// parameters for desktop pc (high performance)
int wscreen=640;
int hscreen=480;
int gs=10; // grid step (pixels)
float predsec=1.0; // prediction time (sec): larger for longer vector

// parameters for laptop pc (low performance)
//int wscreen=480;
//int hscreen=360;
//int gs=20; // grid step (pixels)
//float predsec=1.0; // prediction time (sec): larger for longer vector

///////////////////////////////////////////////
// use video
import processing.video.*;
Capture video;
PFont font;
color[] vline;
MovieMaker movie;

// capture parameters
int fps=30;

// use sound
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput audioout;
SineWave sine;

// grid parameters

int as=gs*2;  // window size for averaging (-as,…,+as)
int gw=wscreen/gs;
int gh=hscreen/gs;
int gs2=gs/2;
float df=predsec*fps;

// regression vectors
float[] fx, fy, ft;
int fm=3*9; // length of the vectors

// regularization term for regression
float fc=pow(10,8); // larger values for noisy video

// smoothing parameters
float wflow=0.1; // smaller value for longer smoothing

// switch
boolean flagseg=false; // segmentation of moving objects?
boolean flagball=true; // playing ball game?
boolean flagmirror=true; // mirroring image?
boolean flagflow=true; // draw opticalflow vectors?
boolean flagsound=true; // sound effect?
boolean flagimage=true; // show video image ?
boolean flagmovie=false; // saving movie?

// internally used variables
float ar,ag,ab; // used as return value of pixave
float[] dtr, dtg, dtb; // differentiation by t (red,gree,blue)
float[] dxr, dxg, dxb; // differentiation by x (red,gree,blue)
float[] dyr, dyg, dyb; // differentiation by y (red,gree,blue)
float[] par, pag, pab; // averaged grid values (red,gree,blue)
float[] flowx, flowy; // computed optical flow
float[] sflowx, sflowy; // slowly changing version of the flow
int clockNow,clockPrev, clockDiff; // for timing check

// playing ball parameters
float ballpx=wscreen*0.5; // position x
float ballpy=hscreen*0.5; // position y
float ballvx=0.0; // velocity x
float ballvy=0.0; // velocity y
float ballgy=0.05; // gravitation
float ballsz=30.0; // size
float ballsz2=ballsz/2;
float ballfv=0.8; // rebound factor
float ballhv=50.0; // hit factor
float ballvmax=10.0; // max velocity (pixel/frame)

void setup(){
// screen and video
size(wscreen, hscreen, P2D);
video = new Capture(this, wscreen, hscreen, fps);
// font
font=createFont(“Verdana”,10);
textFont(font);
// draw
rectMode(CENTER);
ellipseMode(CENTER);
// sound : not essential, only for ball movement
minim = new Minim(this);
audioout = minim.getLineOut(Minim.STEREO, 2048);
sine = new SineWave(440, 0.5, audioout.sampleRate());
sine.portamento(200);
sine.setAmp(0.0);
audioout.addSignal(sine);

// arrays
par = new float[gw*gh];
pag = new float[gw*gh];
pab = new float[gw*gh];
dtr = new float[gw*gh];
dtg = new float[gw*gh];
dtb = new float[gw*gh];
dxr = new float[gw*gh];
dxg = new float[gw*gh];
dxb = new float[gw*gh];
dyr = new float[gw*gh];
dyg = new float[gw*gh];
dyb = new float[gw*gh];
flowx = new float[gw*gh];
flowy = new float[gw*gh];
sflowx = new float[gw*gh];
sflowy = new float[gw*gh];
fx = new float[fm];
fy = new float[fm];
ft = new float[fm];
vline = new color[wscreen];
}

// calculate average pixel value (r,g,b) for rectangle region
void pixave(int x1, int y1, int x2, int y2) {
float sumr,sumg,sumb;
color pix;
int r,g,b;
int n;

if(x1<0) x1=0;
if(x2>=wscreen) x2=wscreen-1;
if(y1<0) y1=0;
if(y2>=hscreen) y2=hscreen-1;

sumr=sumg=sumb=0.0;
for(int y=y1; y<=y2; y++) {
for(int i=wscreen*y+x1; i<=wscreen*y+x2; i++) {
pix=video.pixels[i];
b=pix & 0xFF; // blue
pix = pix >> 8;
g=pix & 0xFF; // green
pix = pix >> 8;
r=pix & 0xFF; // red
// averaging the values
sumr += r;
sumg += g;
sumb += b;
}
}
n = (x2-x1+1)*(y2-y1+1); // number of pixels
// the results are stored in static variables
ar = sumr/n;
ag=sumg/n;
ab=sumb/n;
}

// extract values from 9 neighbour grids
void getnext9(float x[], float y[], int i, int j) {
y[j+0] = x[i+0];
y[j+1] = x[i-1];
y[j+2] = x[i+1];
y[j+3] = x[i-gw];
y[j+4] = x[i+gw];
y[j+5] = x[i-gw-1];
y[j+6] = x[i-gw+1];
y[j+7] = x[i+gw-1];
y[j+8] = x[i+gw+1];
}

// solve optical flow by least squares (regression analysis)
void solveflow(int ig) {
float xx, xy, yy, xt, yt;
float a,u,v,w;

// prepare covariances
xx=xy=yy=xt=yt=0.0;
for(int i=0;i<fm;i++) {
xx += fx[i]*fx[i];
xy += fx[i]*fy[i];
yy += fy[i]*fy[i];
xt += fx[i]*ft[i];
yt += fy[i]*ft[i];
}

// least squares computation
a = xx*yy – xy*xy + fc; // fc is for stable computation
u = yy*xt – xy*yt; // x direction
v = xx*yt – xy*xt; // y direction

// write back
flowx[ig] = -2*gs*u/a; // optical flow x (pixel per frame)
flowy[ig] = -2*gs*v/a; // optical flow y (pixel per frame)
}

void draw() {
if(video.available()){
// video capture
video.read();

// clock in msec
clockNow = millis();
clockDiff = clockNow – clockPrev;
clockPrev = clockNow;

// mirror
if(flagmirror) {
for(int y=0;y<hscreen;y++) {
int ig=y*wscreen;
for(int x=0; x<wscreen; x++)
vline[x] = video.pixels[ig+x];
for(int x=0; x<wscreen; x++)
video.pixels[ig+x]=vline[wscreen-1-x];
}
}

// draw image
if(flagimage) set(0,0,video);
else background(0);

// 1st sweep : differentiation by time
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;
// compute average pixel at (x0,y0)
pixave(x0-as,y0-as,x0+as,y0+as);
// compute time difference
dtr[ig] = ar-par[ig]; // red
dtg[ig] = ag-pag[ig]; // green
dtb[ig] = ab-pab[ig]; // blue
// save the pixel
par[ig]=ar;
pag[ig]=ag;
pab[ig]=ab;
}
}

// 2nd sweep : differentiations by x and y
for(int ix=1;ix<gw-1;ix++) {
for(int iy=1;iy<gh-1;iy++) {
int ig=iy*gw+ix;
// compute x difference
dxr[ig] = par[ig+1]-par[ig-1]; // red
dxg[ig] = pag[ig+1]-pag[ig-1]; // green
dxb[ig] = pab[ig+1]-pab[ig-1]; // blue
// compute y difference
dyr[ig] = par[ig+gw]-par[ig-gw]; // red
dyg[ig] = pag[ig+gw]-pag[ig-gw]; // green
dyb[ig] = pab[ig+gw]-pab[ig-gw]; // blue
}
}

// 3rd sweep : solving optical flow
for(int ix=1;ix<gw-1;ix++) {
int x0=ix*gs+gs2;
for(int iy=1;iy<gh-1;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

// prepare vectors fx, fy, ft
getnext9(dxr,fx,ig,0); // dx red
getnext9(dxg,fx,ig,9); // dx green
getnext9(dxb,fx,ig,18);// dx blue
getnext9(dyr,fy,ig,0); // dy red
getnext9(dyg,fy,ig,9); // dy green
getnext9(dyb,fy,ig,18);// dy blue
getnext9(dtr,ft,ig,0); // dt red
getnext9(dtg,ft,ig,9); // dt green
getnext9(dtb,ft,ig,18);// dt blue

// solve for (flowx, flowy) such that
// fx flowx + fy flowy + ft = 0
solveflow(ig);

// smoothing
sflowx[ig]+=(flowx[ig]-sflowx[ig])*wflow;
sflowy[ig]+=(flowy[ig]-sflowy[ig])*wflow;
}
}

// 4th sweep : draw the flow
if(flagseg) {
noStroke();
fill(0);
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

float a=sqrt(u*u+v*v);
if(a<2.0) rect(x0,y0,gs,gs);
}
}
}

// 5th sweep : draw the flow
if(flagflow) {
for(int ix=0;ix<gw;ix++) {
int x0=ix*gs+gs2;
for(int iy=0;iy<gh;iy++) {
int y0=iy*gs+gs2;
int ig=iy*gw+ix;

float u=df*sflowx[ig];
float v=df*sflowy[ig];

// draw the line segments for optical flow
float a=sqrt(u*u+v*v);
if(a>=2.0) { // draw only if the length >=2.0
float r=0.5*(1.0+u/(a+0.1));
float g=0.5*(1.0+v/(a+0.1));
float b=0.5*(2.0-(r+g));
stroke(255*r,255*g,255*b);
line(x0,y0,x0+u,y0+v);
}
}
}
}
///////////////////////////////////////////////////////
// ball movement : not essential for optical flow
if(flagball) {
// updatating position and velocity
ballpx += ballvx;
ballpy += ballvy;
ballvy += ballgy;

// reflecton
if(ballpx<ballsz2) {
ballpx=ballsz2;
ballvx=-ballvx*ballfv;
}
else if(ballpx>wscreen-ballsz2) {
ballpx=wscreen-ballsz2;
ballvx=-ballvx*ballfv;
}
if(ballpy<ballsz2) {
ballpy=ballsz2;
ballvy=-ballvy*ballfv;
}
else if(ballpy>hscreen-ballsz2) {
ballpy=hscreen-ballsz2;
ballvy=-ballvy*ballfv;
}

// draw the ball
fill(50,200,200);
stroke(0,100,100);
ellipse(ballpx,ballpy,ballsz,ballsz);

// find the grid
int ix= round((ballpx-gs2)/gs);
int iy= round((ballpy-gs2)/gs);
if(ix<1) ix=1;
else if(ix>gw-2) ix=gw-2;
if(iy<1) iy=1;
else if(iy>gh-2) iy=gh-2;
int ig=iy*gw+ix;

// hit the ball by your movement
float u=sflowx[ig];
float v=sflowy[ig];
float a=sqrt(u*u+v*v);
u=u/a;
v=v/a;
if(a>=2.0) a=2.0;
if(a>=0.3) {
ballvx += ballhv*a*u;
ballvy += ballhv*a*v;
float b=sqrt(ballvx*ballvx+ballvy*ballvy);
if(b>ballvmax) {
ballvx = ballvmax*ballvx/b;
ballvy = ballvmax*ballvy/b;
}
}

// sound
float pan = map(ballpx, 0, wscreen, -1, 1);
float freq = map(ballpy, 0, hscreen, 1500, 60);
float vol = map(a,0.0,0.8,0.0,1.0);
if(!flagsound) vol=0.0;
sine.setPan(pan);
sine.setFreq(freq);
sine.setAmp(vol);
}
}

///////////////////////////////////////////////////
// recording movie
if(flagmovie) movie.addFrame();

//  print information (not shown in the movie)
fill(255,0,0);
text(clockDiff,10,10); // time (msec) for this frame
if(flagmovie) text(“rec”, 40,10);

}

void stopGame(){
minim.stop();
super.stop();
}

void keyPressed(){
if(key==’c’) video.settings();
else if(key==’w’) flagseg=!flagseg; // segmentation on/off
else if(key==’s’) flagsound=!flagsound; //  sound on/off
else if(key==’e’) stopGame(); // quit
else if(key==’m’) flagmirror=!flagmirror; // mirror on/off
else if(key==’i’) flagimage=!flagimage; // show video on/off
else if(key==’f’) flagflow=!flagflow; // show opticalflow on/off
else if(key==’q’) {
flagmovie=!flagmovie;
if(flagmovie) { // start recording movie
movie = new MovieMaker(this, width, height, “mymovie.mov”,
fps);
}
else { // stop recording movie
movie.finish();
}
}
else if(key==’ ‘) { // kick the ball
ballvy = -3.0;
}
else if(key==’b’) { // show the ball on/off
flagball=!flagball;
if(flagball) { // put the ball at the center
ballpx=wscreen*0.5;
ballpy=hscreen*0.5;
ballvx=ballvy=0.0;
}
}
}

Okude PhD Seminar, Nov20th, 2010

Review: Nov20th 2010

10:00
Portrayed

Likewise

Depends on


In Navinko, What point is the most distinctive part of design or design process differ from other design theories, such as User Centered Design and its resulted design? Is it only possible through the evaluation?

Ethnography
Interpretation
Variables(includes materials, semiotics?symbiosis?)
Put variables into network of probability ..with actor/network theory

How people experience the city?
Thay started from Kevin Lich’s book. And start to think what has changed after trains, cars, specially car navigation. Once you have navigaion, now it has memory. It changed driving experiences

What kind of new urban experiences you’re going to produce.
*

TIPS: Just start from your best picture.

斉藤
教育が社会関係資本の形成になにか役立っているのではないか。
researh proposal is not a research plan
1)intro
2)reference どういうものがあって、それぞれがどういう関係にあって、自分の理論につながっていくのか。ピアジェ、なんとか、社会資本、、どうかかわり合ってゆくのか。
3)method もう一回なにをしたいのかを明確にかいて、どうやるのか
4)evaluation, どう証明するのか
5)conclusion


Na
これからどんな会社を作りたいのか。自分の貢献先を見つける補助線としてそれを考える。
自分のビジョンを4章で示したら、これからの仕事の青写真になる。
変な統合理論をつけたすのではなく、プラクティスをみながら、3つをつなげるものをみつける
もっと自由闊達に自分をだして枠組みを作る。

本:Ubiquitous architecture

Inakage PhD Seminar, Dec 21st, 2010

Inakage PhD Seminar Dec21st 2010

中山さん

大学発ベンチャー企業の研究

既存の研究をマトリックス化、分類している。

 

Peter

Matching serendipity

Mixed variables

Opimize the best match

Value is still a mistery

Simple survey

Use same train

Start with more controlled environment

How may times they have used sns?

After a few months of business service….

We’ll survey/ check if the still use…

Jan to next Dec, 1st prototype in march

 

Jess> it is tough to expect app changes their behavior in urban space.

Peter>ex) Facebook started from a college(?),

Problem is, we have no way to communicate people around us.

 

Dankan> What is the research objective?

Peter>Create more sense of place, community where place is not XX right now.

 

Dankam> Dankan Had prvided  similar service and stopped. You need to find why they stop it.

 

*

池田さん

ソフトパワーの定義

イギリスの例

デザイン活用現場に深く入り込んだ啓蒙

韓国の例

金大中大統領いらい、コンテンツ輸出に力をいれている

政府主導でのデザインコンサル

市場の啓蒙、政府がデザイン産業を啓蒙している

 

稲蔭>自分の主張を通すためにありとあらゆるソースをあつめ、自分でまとめる。人の作ったものを読んでも、作った人の論理に誘導されるだけ。

>ソフトパワーに力をいれている国がどれだけあるのかを、いろいろな資料を網羅したうえで自分でまとめる。

>池田さんのやったことを池田さんの言葉で語らなくてはいけない。

徳久>資料は要約だけでよい。自分の研究との違いを述べればよい。最終的に何を作るのか?

池田>今後どうやって日本のクリエイティブ産業を発展させるのか、という(戦略?)を出すのが目的

稲蔭>1)自分の主張が存在すること 2)いろいろな資料を主張に結びつける 3)どうやって主張を裏付けるか。

中山さんは、こういう方法で、、というのがいまの段階まである。

PeterのLinkUは、実は機能設計がおわっていて、来月から開発がはじまる。

これを読んだときにドクター論文がなにになるのかというのがてにとるようにわからないと。

リアルプロジェクトがないとどうしてもいけないわけではない。石倉さんの戦略シフトのような自分の戦略シフトをまとめる、体系化するという方法もある。

徳久(?)検証方法をいれないと。。。いってみれば妄想になってしまう。

Jess

Community building by interactiv evironment

urban foraging

urbanforage.org

public/private state of micro agriculture-ing

Inakage>phd quality..social impact.. should go beyond very naive data. you’ve to have different levels.

>We start to compete with birds and animals.

>you shouldn’t limit the idea only fro Tokyo even it was the starting point of the idea.

>Public space belongs to city or some kind of goverment. If you think about picking a flower in a sidewalk,,,, they would not allow you to do that.

Jess> Global gardening

peter>

 

Meeting with Prof. Inakage, Oct 31st 2011

Ericssonの件

1〜4月から2年間

年内に、予算関係が決着する。

最初の1年でプロジェクトを行い、

次の1年は論文発表などにあてる。

植木先生:もっとビジュアルの資料が欲しい

’具体的な出どころ’5W1Hのこと?面白いだけでない具体性?

issue+a 1、2週間以内にわたします。

研究プロポーザルについて

今年度中にプロポーザル

審査をとうれば、学費は発生しない。

新規性

Leterature review

具体性(概念だけではなくて)

どこで、

どういうことをして

このように評価する

プロトタイプ(卓上レベル)

 

役に立つ、とはどういうことか?

ソウルの地下鉄1号線で健康診断の例:’場所の再定義’

 

体制

  • 主査1名、副査2名
  • 提出前に、主、副査のスケジュールを押さえる。
    • 主査 稲蔭教授 コンテンツ
    • 副査 奥出教授 ドクター、理論面
    • 副査 砂原教授 センサーネットワーク。救急車の情報設計、田畑にセンサーネットワークを敷設、などを研究している。
    • どこかのタイミングでメール、スカイプでもいいから、話をしておく
  • 1回直すことを前提にしたスケジュール
  • 研究科委員会
    • 11月末までに、内部的に(稲蔭ゼミ内で)一度見る。
    • 12月8日
    • 12月22日
    • 1月12日
    • 1月下旬に再提出?となると、12月中に提出。OKがでたら、10日以内に公開プレゼン。
    • 1月21日(臨時)
    • 2月2日
    • 2月16日
    • 3月1日(年度最終)

Future Vision, Microsoft Office Labs, 2004-

Project page