なにやら流行っているようなので、Twitterを始めてみることにしました。
http://twitter.com/kojo_sugita
が、いまいちメリットというか、何を何のためにやるものなのかが分からん・・・
とりあえず、つぶやきまくればいいのかなあ?
2009年12月27日
Twitterを始めてみた
2009年12月26日
読書メーター
以下のWebサービスに登録してみました。
読書メーター
http://book.akahoshitakuya.com/
マイページ
鑑賞メーター
http://video.akahoshitakuya.com/
マイページ
「趣味は読書と映画鑑賞です」などと公言している割には 忙しさにかまけてそれらを満喫していなかったのですが、 これを機にまた始めようと思います。
2009年12月13日
最近傍探索のあれこれ 階層型K-means tree
メモ書き.
階層型 K-means tree
k-d treeと同じように「上手に二分木をつくることで探索時間を減らしましょう」という手法の一つ. CRUX氏がマッチングに使用しているのを見て,なるほどと思ったのでメモ.
どうやって木をつくるか
K-meansを使って空間中の点群を再帰的にクラスタリングしていくことで二分木をつくる. 二分木がつくりたいので,Kの数はもちろん2.
クラスタリングと階層型K-Means tree
高次元にも有効っぽい
直接元論文を読んだわけはないのでアレなのだが, k-d treeと比較すると手法的に高次元にも有効そうである.
初期値依存をどうするか
二分木を使うので理想的な場合の計算量はO(log n)だが, 実際の計算量はK-meansのセントロイドの与え方によってかなり変わりそうである. CRUX氏に聞いたところ,K-meansの代わりにK-means++を使用することでかなり良い結果が出るとのこと.
2009年12月12日
最近傍探索のあれこれ 主にk-d tree
メモ書き.
全探索 (線形探索)
最も単純な方法は全探索である.注目点から空間中の全点の距離を測り, その距離が最小になる点を最近傍点とする.なお,計算量はO(n)
k-d tree (k-dimensional tree)
上手に二分木をつくることで探索空間を二分探索することが可能.最も有名なのがk-d tree.
どうやって木をつくるか
簡単のため2次元で考えると手順は以下のようになる.
1. x軸に平行(別に垂直でもよい)に空間を二分割する.上下でノードをつくる
2. y軸に平行に空間を二分割する.左右でノードをつくる
3. x軸に平行に空間を二分割する.上下でノードをつくる
4. ・・・
これを再帰的に繰り返す.
分割とk-d tree
どうやって空間を二分割するか
図では簡単のために単純にど真ん中で空間を分割しているが, 点の座標値の中央値で分割するとk-d treeは平衡木になる. 平衡木になると探索の計算量がほぼO(log n)になるのでお得. 全点を対象として中央値を計算すると木の構築に時間がかかるので, 点をランダムサンプリングして中央値を計算する方法もある.
高次元にはおすすめできない
高次元データをk-d treeに展開すると結局ほとんどの点を調べることになり,全探索とあまり変わらなくなる.
k-d treeを採用するときには,
次元数: d
点の個数: n
としたとき
n >> 2^d となっていることが望ましい.
2009年11月20日
ステキすぎるFirefoxアドオン達
FirefoxのIEに対する優位性の1つにアドオンによる機能拡張がある。 ここでは私のメモを兼ねてコイツはステキだ。と感じたアドオンを列挙しておく。
ファンダメンタル
1. Vimperator - FirefoxをVimライクなキーバインドで操作可能にするアドオン。このアドオンを知ったときの衝撃は今でも覚えている。
使い方.
http://www.itmedia.co.jp/enterprise/articles/0902/25/news037.html
2. テキストリンク - リンクの張られていないURL文字列をダブルクリックで開けるようにするアドオン。"h"が抜けていたり、全角URLにも対応しているところが素晴らしい!
3. AutoCopy - テキストを選択するだけでコピー可能するアドオン。Vimperatorとの相性○
4. Hatena Bookmark - はてなブックマークをFirefoxから扱えるようにするアドオン。はてなブックマーク使用者には必須。
翻訳
1. フェッチイミ - アルクの英和辞書を用いた英和翻訳アドオン。リアルタイムで単語翻訳が可能。すごすぎ!
2. East Asian Translator - エキサイトの翻訳サービスを用いた翻訳アドオン。選択範囲をまとめて翻訳可能
FTP
1. FireFTP - FirefoxをFTPクライアントとして使用可能にするアドオン。さらばFFFTP・・・
Web製作・開発
1. Web Developer - Web製作補助用アドオン。HTMLの構造解析、構文チェックなど。WebシステムやHP作成には必須。
2. Firebug - Web製作補助用アドオン。HTML、CSS、JavaScriptの編集など。JavaScriptのステップ実行が可能。
3. LinkChecker - 閲覧しているWebページ内のリンクを一括チェック可能にするアドオン。リンク切れチェックに便利。
2009年08月12日
2009年07月22日
ViEmu
Visual StudioのエディタをViライクに変更するっていうやつ。
http://www.viemu.com/
今日知りました。
すごいなぁ。めっちゃ欲しい。約1万円かぁ・・・
2009年07月11日
カラースキームの修正
ユーザーの方から、 rootwater.vimの"CursorColumn"の設定がされていないというご指摘を頂いたので以下のカラースキームを修正しました。
ちなみに"CursorColumn"はカレント列のハイライト色の設定です。Vim7.0以降であれば、
:set cursorcolumn
とすることで、カレント列をハイライトすることができます。
2009年03月27日
OpenCV 画像を読み込みネガポジ反転して表示する.
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
cvNot 関数を使用すると画像配列の各要素のビットをすべて反転することができる. これを利用すると画像のネガポシ反転を行うことができる.
OpenCV を使用して, 画像を読み込み, ネガポシ反転して表示するサンプルコードを以下に示す.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
/* main */
int main(void) {
IplImage *image;
/* 静止画像を読み込む */
image = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(image == NULL){
fprintf(stderr, "読み込み失敗");
return EXIT_FAILURE;
}
/* 配列の各要素のビットをすべて反転する */
cvNot(image, image);
/* ウインドウを準備して画像を表示する */
cvNamedWindow("NegaPosi",CV_WINDOW_AUTOSIZE);
cvShowImage("NegaPosi",image);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&image);
/* ウィンドウを破棄する */
cvDestroyWindow("NegaPosi");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.
2009年03月23日
OpenCV 画像を読み込み2値化して表示する.
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
OpenCV を使用して, 画像を読み込み, 2値化して表示するサンプルコードを以下に示す.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
/* main */
int main(void) {
IplImage* source;
IplImage* binary;
int threshold = 128;
int max_value = 255;
/* 静止画像をグレースケールとして読み込む */
source = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_GRAYSCALE);
if (source == NULL) {
fprintf(stderr, "読込みに失敗しました.");
return EXIT_FAILURE;
}
/* 2値画像用の領域を確保 */
binary = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U,1);
/* グレースケールから2値画像に変換 */
cvThreshold(source,binary,threshold,max_value,CV_THRESH_BINARY);
/* ウインドウを準備して画像を表示する */
cvNamedWindow("Binarization",CV_WINDOW_AUTOSIZE);
cvShowImage("Binarization",binary);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&source);
cvReleaseImage(&binary);
/* ウィンドウを破棄する */
cvDestroyWindow("Binarization");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.

