CGとCVの日記

Computer GraphicsとComputer Visionについて

Variational Tetrahedral Meshing

Variational Tetrahedral Meshing http://www.cs.berkeley.edu/~jrs/meshpapers/ACSYD.pdf
4面体メッシュ分割に関する論文.かなり有名な手法みたい.
作者はINRIAのPierreAlliezさん.Modeling業界ではかなり有名な人らしい.
著書に「Polygon Mesh Processing」がある

Polygon Mesh Processing

Polygon Mesh Processing


Meshをあつかった本は少ないのでかなりためになる.

ある頂点に対しエネルギー関数を考え移動させるのですが,それは頂点が含まれる4面体メッシュの外接円の中心点の重心と等価だそうです.(数学的な証明もかいてありました)
そして3次元のボロノイダイアグラムによる分割を行います.
これを収束するまで繰り返します.

アルゴリズムとしては簡単そうなので今度実装してみよう.

boost::program_options

c++コマンドライン引数をパースするライブラリを探してたら2つ見つかった.

http://www.gnu.org/s/hello/manual/libc/Getopt.html
シンプルで使いやすい.Java移植版もある

  • boost::program_options

やっぱりboostにもあった.
使うのはとても簡単.エラーやヘルプのメッセージなどが自動生成されるので楽.

#include <boost/program_options.hpp>

using namespace std;
namespace po = boost::program_options;

po::options_description desc("Allowd options");
po::variables_map vm;

string input_filename;

void parse_program_options(int argc, char** argv){

	desc.add_options()
			("help,h","produce help message")
			("input,i", po::value<string>(), "input file name")
			;

	po::store(po::parse_command_line(argc, argv, desc), vm);
	po::notify(vm);

	  if(vm.count("help")){
		cout << desc << endl;

	  }
	  if(vm.count("input")){
		  if(vm["input"].as<string>().empty()){
			  cerr << "input file name is empty" << endl;
			  exit(-1);

		  }
		  else{
			  cout << "input file name is " << vm["input"].as<string>() << endl;
			  input_filename = vm["input"].as<string>();
		  }
	  }
}

int main(int argc, char** argv){

	parse_program_options(argc, argv);
        
        return 0;

}

boost::program_options::parse_config_fileを使えばコマンドラインだけじゃなくconfig fileからも簡単にできそう.

Computer Geometry

3次元モデリングとかCGとかやってる研究室に配属になった.
教授と話してると「うちは幾何で勝負してる」って言われたので,幾何学の勉強を開始.
研究を進めてて
・frustumとcube群(voxel)の交わる体積を求める
という問題が生じた.
infinite frustumって考えてcubeと交わる4つの直線との交点を求めれば出るだろって思ってたけど,
実際は考えないといけない交差のパターンがいくつもあるし,
多面体の体積を求めるために3角形分割しないといけないし,
いろいろ面倒だなって思った.


いまのとこ幾何って直感的には分かるけど,いざ実装ってなるとはてしなくめんどくさい印象.
ってことで↓の本で勉強してます.

コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用

コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用

  • 作者: M.ドバーグ,M.ファンクリベルド,M.オーバマーズ,O.チョン,Mark De Berg,Mark Overmars,Mark van Kreveld,Otfried Cheong,浅野哲夫
  • 出版社/メーカー: 近代科学社
  • 発売日: 2010/02
  • メディア: 単行本
  • 購入: 4人 クリック: 29回
  • この商品を含むブログ (4件) を見る

日本語だとこの本が一番よさげ.

f:id:daiki_yamanaka:20110618164322j:image
http://www.architecturalgeometry.at/
この本は建築のための幾何学.
基本的な用語,概念は網羅してる.
詳しいアルゴリズムとかは書かれてないので実装するにはこの本だけだときつい.
なんといっても絵が多いので読んでて楽しい.

旧Mac -> 新Mac 移行に関するまとめ.

旧Mac(Macbook pro 13 inch 2009 early model)から新Mac(Macbook pro 15 inch 2011 early model)への移行の際に
いろいろ手こずったのでそのまとめ.

Mac->Macの移行の際には大きく分けて2つの選択肢があると思います.

1. 新しく環境を構築し,重要なファイル(ドキュメント等)を後から移行する.

2. 移行アシスタントを使う.
f:id:daiki_yamanaka:20061203001639j:image



今回の移行ではなるべく前の環境のまま移行したかったので,1はやめて2を選びました.
移行アシスタントでは無線LAN,有線LAN,Firewire経由のいずれかが選べ,今回はFirewireケーブルを使用しました.
移行できるデータは
・/Users/hogehoge 以下
・/Applications
・設定
です.
移行先に同じ名前のユーザがあると移行ができないため別の名前のユーザをつくらないといけません.
また,OSのバーションを同じにしておく必要があります.
200GB程度の移行に8時間程かかりました.



移行が終わって気づいたのですが,/Libraryや/usr/local/bin/ 内のファイルに"(古いMacから)"
という名前がついてしまっていました.
また,/Developer以下は消えてしまいます.

・ユーザ名を変えなければいけない.
・/Developer以下が消える(再設定がめんどくさい)
・/usr/local/bin 内の実行ファイルや/Library 内のフォルダに "(古いMacから)"という名前がついてしまう.
等の問題が発生しました.

Apple Storeの人曰く「移行アシスタントでそのままの環境を移行できる」そうですが,
ぼくが思っていたそのままの移行は出来ませんでした.



そこで,どうにか古い環境をそのまま移行するために,
「古いMacのハードディスクのデータを新しいMacのハードディスクにまるごとコピーすればいいじゃないか」と考えました.

データのコピーにはハードディスクを換装するときにお世話になったCarbon Copy Cloner - Home
を使いました.

だいたい5時間程度でデータの移行が終わり起動してみると,起動時のりんごマークから進みません.
f:id:daiki_yamanaka:20110409011126p:image

ハードの互換性が問題なのでしょうか.

どうにもならないのでOSの再インストールすることにしました.
f:id:daiki_yamanaka:20110409011738j:image

そして再起動すると...!?

そこには見覚えのあるデスクトップ画面が.
f:id:daiki_yamanaka:20110409012728p:image

どうやらハードディスク内のOSの領域だけ書き換わったので,後のファイルも正常に読めているようです.
アプリケーションが起動できない等の問題もありません.
まったく前の環境と同じです.

これがぼくの求めていた”そのままの環境の移行”です.

正しいやり方かはわかりませんが,Macの移行で困っている方は使ってみてはいかがでしょうか.

脳の中の幽霊

脳のなかの幽霊 (角川21世紀叢書)

脳のなかの幽霊 (角川21世紀叢書)

友だち,教授に薦められたので購入
初版は1999年と少し古いですがとても面白いです.

ラマチャンドラン博士が脳に疾患をもつ患者とのやりとりや実験から,
脳に関する新たな仮説を導いていきます.

自分の脳がどのように動いているのだろうと考えざるをえません.

光学文字認識 ocrad

光学文字認識に興味があったので Gnu Ocradというライブラリを使ってみた.
ソースはここ->http://www.gnu.org/software/ocrad/

いつもどおり

$ ./configure
$ make
$ sudo make install

でインストール完了.


マニュアルを読むと
どうやらファイルからの入力はpbmかpnm限定らしい.
そこでダウンロードしたフォルダ内にあるocrad.pngをpngtopnmを使って変換.

検出した文字を出力するテストコード完成.

#include <iostream>
#include <stdio.h>
#include "ocradlib.h"

using namespace std;

int main(){
   if( OCRAD_version()[0] != OCRAD_version_string[0] )
      printf( "bad library version\n" );

   OCRAD_Descriptor * od;
   const unsigned char invert = 1;
   int blocknum, linenum;

   od = OCRAD_open();
   cout <<"error num " << OCRAD_get_errno(od) <<endl;
   cout << "set image " << OCRAD_set_image_from_file(od, "./ocrad.pnm", 1) << endl;
   cout <<"error num " << OCRAD_get_errno(od) <<endl;
   cout << "recognize " << OCRAD_recognize(od, 0) << endl;
   blocknum = OCRAD_result_blocks(od);
   cout << "blocknum " << blocknum << endl;

   for(int i=0; i<blocknum; i++){
     linenum = OCRAD_result_lines(od, i);
     for(int j=0; j<linenum; j++){
      printf("result =  %s\n", OCRAD_result_line(od, i, j));
     }
   }
   return 0;
}

f:id:daiki_yamanaka:20110206002136p:image
ocrad.png
でやってみると

result = OCR+

と出力されました.

ちゃんと認識できたので次はWEBカメラ+OpenCVでやって見る.

夏への扉

夏への扉[新訳版]

夏への扉[新訳版]


wikipediaによると
アイザック・アシモフアーサー・C・クラークと並んで、世界SF界のビッグスリーとも呼ばれているハインラインの「夏への扉」を読んでみた.


コールドスリープやタイムマシンを使うタイムトラベルもので,タイムトラベルの原理も2つ質量の同じものを入れて,片方は過去へ,もう片方は未来へ行くっていうのが作用反作用みたいでありそうだなぁと思いながら読んだ.


主人公が技術系なのもよくて,未来もよく描かれてたと思う.
自分が作った会社に追い出されるっていうのもなんかappleっぽくてよかったし.


この本を読んだ一番の感想はコールドスリープしたいってこと.
20年後世界がどうなってるか知りたいし,ぼくの好きなガジェットがどう進化してるか見てみたい.
みんなBMIを付けて歩いているんだろうか.


ぐぐってみるとどうやらそういう技術はcryonics(人体冷凍保存)というらしい.
ロシアのKrioRusという会社が脳の冷凍保存のサービスを初めてた.
http://old.kriorus.ru/english.html


wikipediaによると brainが$10000でfull-body が$30000らしい.
思ったより高くなかった.本当にもとに戻れるならやってみたいかも.