VS Dell

悲しいことに生後半年のパソコンが壊れたようです
ただ幸運なことに3年保障に入っていたので修理はだせる・・・はず
「はず」っていうのはサポート先があの悪名高きDell サポートだからなんですけどねー

ってなわけで今回は修理に出すまでの攻防を簡潔に書いていく
まず状況について「PCが何の前触れもなくフリーズするようになった。フリーズは1~120分以内に起こる」
意外と手に負えない壊れ方です。チェックディスク中にもフリーズ
教官にも見てもらったが「ハードが原因の可能性が高い」とのこと

さてDellサポートに電話をかける前に事前にチェックした情報を確認
・電話相手は中国人(日本人ではない)
・とりあえずOSのせいにされる
・その他いちゃもんを付けて修理に出させない
要点はこの3つ。これを念頭においてオペレーションを実行してみる

*以下の会話は文字数の問題で簡略化してあります
まず初めに対応してくれたのは日本人ではない男性
簡潔に状況を説明すると実に簡単な解等をくれた
「windowsのせいなので再インストールしろ」
HAHAHA…(怒) とりあえず「チェックディスクをかけてが異常はなかった」と返す
「windowsの問題はそれでは引っかからない」との返答
そういわれると中級者にも満たない俺は返す言葉がない
とりあえず問題点を根本的なところに戻して
「windowsの再インストール中にフリーズすると予想される」って返答すると・・・
「windowsの再インストールをしないと修理にだせない」とのご回答
・・・・・・・・・・・・・・・はっ!?いやいやそれはおかしいだろwww
金を払って保障に入ってるんだから、そこは引き取れよ!
とまぁ、派遣社員相手に自分の考えを述べても仕方ないので、そこで「わかりました」といって第一ラウンド終了

色々あって再インストール終了。だがこの後も色々文句をつけられる可能性があるので、担当者は毎回違うってのを利用して一気に乗り切ろうと考える

2度目の電話に出たのは日本人ではない女性
とりあえず相手に状況を尋ねられた際に状況と「再インストールなどの前の担当者にいわれた事はすべてしたが解決しなかった。だから修理に出す日程を教えてくれ」と一度にいってみた。YesNoで聞くんじゃなくて、自分に有利な具体的な質問をするのは会話の初歩だよね。どっかの偉い人も相手に選択肢は与えないっていってたし。
まぁ、相手がどう考えたかは知らないけど引取りの日程をすぐに教えてくれた。

パソコンが帰ってくる日は未定だけど私はフランスの忠犬の様にただただ待ち続ける日々なのだ。
感想:外人とのコミュニケーションが意外と難しい。微妙なニュアンスが通じない。そして完全なマニュアル対応もそれに拍車をかけている。あと今回一番ぇーってなったセリフが「windowsの再インストールの指導は有料です」・・・そうかいw

No Comments

ボリュームレンダリング

卒研もほぼ終了。あとは論文だけ・・・こんな論文見る奴いるのか(笑)

とまぁ、今回は卒研の〆でやったボリュームリンダリングについて話そう
ボリュームレンダリングとは簡単にいってしまえば3次元の物体を表示する方法
といっても1つ1つのvoxel(pixelの3次元Ver)に色を配色していくわけではなく、濃度や密度によってよりリアルに物体を再現する
主に医療用につくられた方法だね。必要なものは0~255の輝度の入ったデータ

今回はこの方法を簡単にやってくれるクラスの紹介をしよう(アルゴリズムが非常にやっかいで個人では面倒なのだ)

http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/products/VolumeRenderer

このクラスはGLEW と GLUT をビルドに必要とする。また実行には GLSL に対応したグラフィック カードが必要
実はボリュームレンダリングといえばVTKが一番有名。でも文章が英語なので読み解くのに時間がかかる
そこで日本語表記なところが一番の売り(?)のこれをお勧めする。

さてHPからrenderer.zipをインストールしたところから説明を始めよう。
まずGLUT を使えるようにするには,http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#2 に書いてあるの様するのがベスト
そしてGLEWも http://glew.sourceforge.net/ から自分に合うものをダウンロードしよう。
GLEWのフォルダにはincludeとLibがあるがこれを下記に入れる
includeの中身はC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include
LibはC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib に移す(環境によっては6.0Aかも)

ではこのクラスの使い方について説明しよう
本記事を見ている方はとりあえずボリュームレンダリングをしたい、という人がほとんどと思う
だから自分が持っているデータ(3次元の輝度のデータ)をそのまま表示する方法を書こう
変更するのはMain.cppのInitVolumeRenderer( void )
ここでdx,dy,dzにはその3次元空間の最大値
idataは輝度が入ったdx*dy*dzの大きさを持つ1次元の配列である
あらかじめファイルなどから読み込んでおこう
変更した例は
for ( int z = 0; z < dz; z++ ) {
for ( int y = 0; y < dy; y++ ) {
for ( int x = 0; x < dx; x++ ) {
data[ x + dx * y + dx * dy * z ]
= static_cast( idata[ x + dx * y + dx * dy * z ] );
}
}
}
volume_renderer->SetVolume( &data[ 0 ], sx, sy, sz );
これでビルドすれば綺麗なボリュームレンダリングが表示されるはず

ここで気になるのは色だが変更には/shader/density_to_color.fragの内容を変える
といっても場所ごとに色を変えるのにはどうすればいいかなどは研究中である
誰か分かった人がいればコメントでもしてくれると嬉しい

卒業前の最後の記事かもね(´・ω・`)
来年以降も出来たらちびちび加筆するさ

No Comments

【ActionScript3.0のおべんきょう 其の壱】FlashDevelopのインストール

こんにちは。kazutoyoです。

自分もあと半年ほどで卒業する予定なんですが、Flashなどを下級生に教えておけばよかったなぁと感じたため、【ActionScript3.0のおべんきょう 】シリーズなるものを始めました。

第1回目の今回は、フリーのFlash/Flex/Adobe AIRの開発環境であるFlashDevelopのインストールを行ないます。

インストールするバージョンは2010年9月30日現在の最新バージョンであるFlashDevelop 3.30 です。

まず、FlashDevelopをダウンロードしてきます。

こちらにアクセスし、ページ右上の”Release notes and download“をクリックします。

次に、ページ下のほうにある”Download FlashDevelop 3.3.0 RTM“をクリックし、ダウンロードを開始します。

ダウンロードが終了したら、インストーラーをダブルクリックし、インストーラーを起動します。

Nextをクリックし、進みます

次にインストールするものにチェックを入れます。基本的には変更しなくても良いですが、FlexSDKが既に導入されている場合は”Install FlexSDK”のチェックを外してください。

次はインストールするフォルダのパスを設定します。基本的にはそのままで大丈夫です。

そしてインストールが終了すると次のような画面になります。Finishをクリックし、インストーラーを終了させます。

これでインストールが終わったのでFlashDevelopを起動してみましょう。

表示が英語になっているときは、次の手順で日本語に変更します。

ToolsのProgram settings…を選択

Selected Localeをja_JPに変更

Closeで設定ウィンドウを閉じ、再起動すると表示が日本語に変更されます。

とりあえず今回はここまでです。次回は簡単なプログラムをつくりましょう。

, ,

No Comments

NIfTIファイルあれこれ

先日までNIfTIファイルに関する研究を行っていたのだが、その研究がめでたくも完了(終了、打ち切りともいう)したので、ここにまとめてみようと思う。

まずNIfTIファイルとは一体何かを説明する。
簡単にいってしまえば、MRI(医療器具で体をスキャンする機械)から得られるデータフォーマットである。(つまり大抵の人には生涯縁のないフォーマット。ちなみにこのファイルの拡張子は.niiなんだが、これを開けるソフト自体がごく少ないほど珍しい。)
データの内容は、スキャンした体の部分を3次元データとして格納している。
今回の研究内容は、これをプログラムで読み込んで画像データとして抽出すること。
順序としては読み込むのが第一段階、画像に変換するのが第二段階といったところ。

それでは第一段階から説明していこう。
NIfTIファイルには、実にありがたいことに専用のライブラリが存在している。
その名も Niftilib 。NIfTIファイルの取り扱いはこれがないと出来ないといっても過言ではない。
というのは、NIfTIファイルの内部構造は公式ページにいってもほぼ非公開に近く、バイナリからプログラミングするのは現状では無理だからだ。
ライブラリの読み込み方とかは割愛させてもらおう。Linux専用?みたいな匂いがしたのでWindowsでやる場合は注意。
俺の場合はWindowsで実行したがインストールがうまくいかなかったので、ライブラリ内のヘッダー、Cファイルは直接プロジェクトにいれた。
ライブラリのヘッダー内にはNIfTIに関係する様々なことが書いてあるので、見分を広めたい人は是非。

実際のプログラミングに関して。
fslio.h nifti1.h nifti1_io.h znzlib.h を入れてほしい(対応するソースも)。
かなりの関数があるが、実際に使う関数と変数は実に少ない(3次元データを呼び寄せるだけなら)
要所と抜き出すとたったこれだけ。
nifti_image * nim;
unsigned char * idata;
nim = nifti_image_read(inname, 1); //innameはファイル名
idata=(unsigned char *)nim->data;

idataには3次元データが格納されている。
またパラメータとしては3次元データの大きさはnim->nvoxに
x軸の大きさはnim->dim[1], y軸の大きさはnim->dim[2] ,z軸の大きさはnim->dim[3]にそれぞれ格納されている。
idataから( i , j , k )のデータを取り出す場合は idata[ i + j * nim->dim[1] + k *nim->dim[1] * nim->dim[2] ]という指定を。
idataは0 ~ 255の値がグレースケールとして入っている。

実に簡単な作業だが、ライブラリの説明は非常に分かりにくいのでご注意を。

第二段階はこれをBitMapに入れます。
ある一つの座標軸を固定して、残り2つの座標をそれぞれ入れることで3次元データの断面図を得ることができる。
またRGBの場合、idataから得られた値をそれぞれの各要素に入れる。( 例(N,N,N) )

以上で私の卒研発表を終わります。

感想:たかがこれだけのことに時間をかけたな・・・・

No Comments

GPUとCPU

男は度胸、なんでも試してみるものさ。偉い人がそう言っていたので軽く書いてみようと思う。

人に説明することは、面接の練習にもなるだろうし。

とりあえず、初投稿ということで、今回はCPUとGPUの違いについてを非常に簡単に解説する。

続くかどうかはわからないので、雑学程度に流し読みしてもらいたい。

現在、私は卒業研究として「GPUでの画像処理の高速化」という題目で研究を行っている。

GPUというのが何かわからない人に簡単に説明すると、GPUはGraphics Processing Unitの略で、CPUの親戚みたいなもの。

3Dゲームをする時に活躍してくれるグラフィックボード(ビデオカード)の演算ユニットである。

恐らく自作に興味があったり、PCで3Dゲームをする人は少しは聞いたことがある部品ではないだろうか。

(余談:GPUは、最近では、IntelのCPUのCore i3とかCorei5にも乗っている。ちなみにi3はデュアルコア+GPUの意。

 確かこれについてるGPUはビデオカードなしでも画面描画とかできるように補助してるんだったかな。

 i5はちょっとシリーズによってプロセッサが変わったり特殊なので、興味があればこことかで調べてみて欲しい。)

そのGPUで何故、画像処理をするのか?ということになるが、その理由は、というと。

GPUはCPUと比べてプロセッサ数が異常に多く、並列計算に向いているからである。

大雑把に言うと、CPUではプロセッサがデュアルとかクアッドとかで2個、4個搭載されているが、

GPUでは、最新のビデオカードだと、プロセッサが240個搭載されているものもある。(もちろん型番による)

もちろんクロック周波数とかはCPUの方が優秀だったりするのだが、それぞれのプロセッサの違いを説明すると

命令デコード機能があるとかないとかアーキテクチャの説明だとかしなければいけなくなって面倒くさいので、

CPUは複雑な処理ができるけどプロセッサ数少なめで、GPUは単純な処理しかできないけどプロセッサ数多め。

とだけイメージして欲しい。

そういうわけで、GPUだと、例えばCPUで処理する時は1ピクセルずつ計算しなければならなかったのが、

各コアで1ピクセル担当して処理できるため、数百ピクセルまとめてドーンと処理することができる。

ここがCPUとGPUの主な違い、GPUの並列処理の凄いところである。

と、今日はここまででGPUとCPUの違いについて簡単に説明した。

肝心のプログラミングには全く触れてないけれど、

正直プログラミングまで持っていくのに話さなければならないことがまだ多くあり、なかなか面倒である。

ちなみに全然関係ないけど、ここのエディタ改行が反映されたりされなかったりして文体を整えるのに苦労する。

なんだか昔のLivedoorブログを彷彿とさせるね。

No Comments