医用画像関連の情報

最近使った、いくつかのツール類についてメモ

  • ITK
    • Insight Tool Kit
    • 医用画像関連の色々な処理がパッケージングされている
    • DICOMファイルの入出力には下記のGDCMを使っているようだ
  • GDCM
    • Grassroots DICOM library
    • DICOMファイル関連のツール
    • 圧縮DICOMも扱える
  • DCMTK
    • DICOM Toolkit
    • こちらもDICOMファイル関連のツール
    • ほとんど使ったことが無いので、よくわからないが、GDCMと同じような感じなのだと思う
  • Live Volume
    • GPGPUによる高速なボリュームレンダリングソフト(フリー)
    • DICOMファイルを直接読み込める
    • 日本製(京都大学の松田研究室)

B-Spline

Free Form Deformation (FFD) などに使われるB-Splineはよく知られているが、
実はよく知られているのは3次のB-Splineであり、0次,1次,2次のB-Splineもある。

最も単純な0次のB-Splineは±0.5の範囲で1を返し、それ以外では0を返す矩形の
基底関数である。
面白いのは、1次のB-Splineは、0次のB-Spline同志のの畳み込みであり、
2次のB-Splineは1次のB-Splineに0次のB-Splineを畳み込んだものである。
よく知られた3次のB-Splineは2次のB-Splineに0次のB-Splineを畳み込んだものとなる。
これらの各次数の基底を用いることで、特定の基底の微分や積分を表現できる。

自前で0次~3次のB-Splineを実装してみたので、ソースを公開してみる。

	///0次B-Spline基底
	static double bSplineBasis0(const double u){
		double absU=abs(u);
		if(absU<0.5){
			return 1.0;
		}
		return 0.0;
	}
	///1次B-Spline基底
	static double bSplineBasis1(const double u){
		double absU=abs(u);
		if(absU<1.0){
			return 1.0-absU;
		}
		return 0.0;
	}
	///2次B-Spline基底
	static double bSplineBasis2(const double u){
		double absU=abs(u);
		if(absU<0.5){
			return 3.0/4-absU*absU;
		}
		if(absU<1.5){
			return 0.5*absU*absU-1.5*absU+9.0/8;
		}
		return 0.0;
	}
	///3次B-Spline基底
	static double bSplineBasis3(const double u){
		double absU=abs(u);
		if(absU<1.0){
			// [0,1
			return (3.0*absU*absU*absU-6.0*absU*absU+4.0)/6.0;
		}
		if(absU<2.0){
			// [1,2)
			return (2.0-absU)*(2.0-absU)*(2.0-absU)/6.0;
		}
		return 0.0;
	}

多項式の項を生成する

多項式の組み合わせは、シンプルと言えばシンプルなのだが、
自動的に全組み合わせを生成しようとすると、少し頭が混乱する。

ということで、改めて落ち着いて自動生成のアルゴリズムを書いたので、
備忘録としてアップしておく。

世の中、多項式の項の組み合わせを自動生成しようと思う人は、
ほとんど居ないと思うので、ほぼ完全に自分用ですが。。。



#include<iostream>
#include<vector>
#include<Eigen/Dense>


std::vector<Eigen::VectorXi> genMonomialFixedDegree(const int dimm, const int degree){
	std::vector<Eigen::VectorXi> ans;
	if (dimm == 1){
		Eigen::VectorXi monomial(1);
		monomial[0] = degree;
		ans.push_back(monomial);
	}
	else{
		for (int i = 0; i <= degree; i++){
			Eigen::VectorXi monomial(dimm);
			monomial[0] = i;
			std::vector<Eigen::VectorXi> monomialLast = genMonomialFixedDegree(dimm - 1, degree - i);
			for (int j = 0; j < monomialLast.size(); j++){
				for (int k = 0; k < dimm - 1; k++){
					monomial(1 + k) = monomialLast[j](k);
				}
				ans.push_back(monomial);
			}
		}
	}
	return ans;
}

std::vector<Eigen::VectorXi> genMonomial(const int dimm, const int degree){
	std::vector<Eigen::VectorXi> ans;
	for (int i = 0; i <= degree; i++){
		std::vector<Eigen::VectorXi> ansDegree = genMonomialFixedDegree(dimm, i);
		for (int j = 0; j < ansDegree.size(); j++){
			ans.push_back(ansDegree[j]);
		}
	}
	return ans;
}

int main(int argc, char** argv){
	const int degree = 3;
	const int dimm = 3;

	std::vector<Eigen::VectorXi> monomials = genMonomial(dimm, degree);
	for (int j = 0; j < monomials.size(); j++){
		std::cout << monomials[j].transpose() << std::endl;
	}
	return 0;
}

YouTubuの動画を連続再生する方法

超簡単な方法です。

もう誰でも知っている方法かもしれませんが、私は今まで知りませんでした。

方法は、、、

連続再生したいYouTube動画のURL(アドレス)の中の、

www.youtube.com の部分を www.youtuberepeat.com と書き直すだけ。

たとえば、「Red garland trio-C jam Blues」の動画
https://www.youtube.com/watch?v=ra0p0u59N7o

OpenGLのチュートリアル始めました

すがすがしく新年度が始まりました。

理工学系の大学四年生などは、今年から研究室へ配属される人も多いと思います。

このサイトでは理工学系の大学生向けに、基礎的なプログラミングやツール類などについて紹介、解説を充実させていこうと思っています。

ということで、その一環として、三次元グラフィックスのコンピュータプログラミングの基本的なライブラリであるOpenGLの解説ページを新設しました。

まだ情報は少ないですが、徐々に充実させていきますので、どうぞご活用ください。

また、それ以外にも、コンピュータによる音声解析などのページも作っていこうと思っています。ご期待ください。

今年も、実り多き新年度にしていきましょう!

公開されているComputer Visionの講義資料

http://cs.brown.edu/courses/cs143/

Brown大学コンピュータサイエンス学科のコンピュータビジョンの講義資料が公開されていて、なかなか勉強になったので、共有と備忘を兼ねてブログにリンクを張っておきます。

特に認識関連の講義資料が充実しているようです。

Graphical Lasso

ちょっと調べた範囲でメモ

  • 多変量解析の一手法
  • 多数の確率変数の中から互いに依存する変数の組を見出す手法
  • 精度行列(共分散行列の逆行列)の非ゼロ要素を結ぶ無向グラフによって表現
  • 真の精度行列を求めるには、無限個のサンプルが必要
  • 有限のサンプル数から(疎であると信じる)真の精度行列を精度よく高効率に求める
  • RやMatlabなどに良い実装が入っている

有用なWEB上の資料

  • IBM東京基礎研究所、井手 剛、「潜在的グラフ構造からの異常検知」 [PDF]
  • J. Friedman, T. Hastie and R. Tibshiraniz, “Sparse inverse covariance estimation with the graphical lasso,” Biostatistics, Vol.9, pp.32-441, 2007 [PDF]