C#からggplot2でグラフを描く

ggplot2は統計処理で用いられるR言語向けのグラフ作成ライブラリです。高機能かつ綺麗な出力が得られるので人気のようです。ただ、Rは使ったことがないので、今回はC#からこのライブラリを使ってみたいと思います。 R.NET C#からですと当然Rをそのまま操作す…

劣モジュラ関数最小化のお勉強(Minimum Norm Point)

最近、劣モジュラ最適化と機械学習という本を買いました。その2章まで読んだので、劣モジュラ関数の最小化を試してみます。ちなみに2章は最小化、3章は最大化がテーマです。 劣モジュラ 集合を入力とする関数f()が劣モジュラ性(Sub modular)を持つのは以下…

Eigenの値をVisual Studioのデバッグモードで見る

Visual Studioのデバッグモードを使うと、実行中の変数の内容を見ることができます。ただし一般的な型以外は対応していないため見ることができません。私の場合ですと、Eigenという行列演算ライブラリーをよく使っているのですが、デバッグ中に値を見ること…

サーバーなしでD3.jsを使う

D3.jsはグラフの表示などができるJavaScriptのライブラリです。今回はこれを使って散布図を表示させてみます。 はじめに データの可視化をする方法として一番有名なものはエクセルです。しかし、エクセルだと操作できるグラフを作ったり、かっこいいグラフを…

Differential Evolutionで大域的最適化

はじめに Differential Evolutionという手法を使うと、少ないパラメーターで関数の最小化を行うことができます。いわゆる遺伝的アルゴリズムと呼ばれるものです。 アルゴリズム 例としてAckley Functionと呼ばれる関数の最小点を探索してみます。 この関数は…

Stan Math Libraryでディリクレ分布からサンプルする

はじめに C++から使うことのできるStan Math Libraryには、統計や機械学習で使う数学の関数が多数実装されています。このライブラリを使って、ディリクレ分布からサンプリングしてみました。 必要なソフト Stan Math Library(stan-dev/math · GitHub) Eigen(…

EigenのMatrix function機能

はじめに EigenにはMatrix functions moduleがあります。これを使うことで、行列のcosやexpを計算することができます。 例(コサイン) そもそも行列のcosって何でしょう。「matrix function cos」で検索すると、こちらのサイトが見つかりました。 What is the…

C++でディリクレ分布からサンプルする

はじめに 最近「続・わかりやすいパターン認識」という本を読んでいます。いわゆるノンパラベイズ本でして、パラメータの事前分布としてディリクレ分布が多用されています。気になったのでC++でサンプリングする方法を調べてみました。 ディリクレ分布のサン…

Efficient Graph-Based Image Segmentationのお勉強

はじめに 画像中の似ているところを見つけてラベリングをする手法があります。いわゆるImage segmentationのことで、Efficient Graph-Based Image Segmentation, 2004.が有名そうなので調べてみました。 アルゴリズム Union-Find Treeを使うのが特徴的です。…

透過ウィンドウで画像処理する

はじめに 画像処理のプログラムを書くときには、テスト用に画像や動画を使用します。これを準備するのは面倒なので、YouTubeや画像検索の結果画面を処理対象にできたら便利だなと思うことがありました。今回は透過するウィンドウをつくり、その領域で画像処…

動体検出を軽くする(AAS, CVPR '12)

はじめに 動体検出を使用して物体の検出を行うことがあります。特に最近のカメラは高画素であり、処理が重くなります。そこで、画像の全画素で処理を行わず、物体がありそうなところだけで処理を行う方法が考えられます。 アルゴリズム ちょっと前の論文です…

パワポのスライド上でプログラムを動かす

はじめに パワーポイントには.NET Frameworkのプログラムを貼り付ける機能があります。これを用いることで、よりインタラクティブな発表を行うことができます。 つくり方 前回の記事でExcelから.NET Frameworkの自作関数を呼び出す方法を調べました。COMと呼…

光線伝達のお勉強

はじめに 光学の分類に光線光学があります。これは光の電磁波的特性を無視したもので、波長が小さいと仮定しています。こうすることで線形の式で光の進む向きを計算できます。 光線伝達マトリックス 光の入力をv=(y1, θ1)、出力をw=(y2, θ2)とするとw=Mvによ…

ExcelからOpenCVで画像を開く

はじめに Excelにはプログラミングのできる環境としてVBAが用意されています。ただあまり使いやすいとはいえないので、別の方法があるか調べてみました。 COMというインターフェースを使うとVisual Studioで作成したDLLを呼べるみたいなので試してみます。 …

射影変換のお勉強

はじめに 射影変換はある平面を別の平面に射影することができる変換です。斜めから見たものを、もし正面から見たらどうなるかを計算できます。 変換式 変換前の座標(x,y)を(x',y')に変換するための行列Hを求めることが目的です。 (参考:CiNii 論文 - 反復…

FFTでウェーブレット変換する

はじめに フーリエ変換のように周波数の特性を得ることができる連続ウェーブレット変換を試しました。 連続ウェーブレット変換 母関数によっていろいろな種類がありますが、一番よく目にするのはGabor のウェーブレットです。こちらのサイトによると、(ガボ…

EigenでFFTする

はじめに Eigenという行列演算ライブラリーにFFTが入っているので試してみました。 FFT EigenのFFTはkissfft、FFTW、Intel Math Kernel Libraryをバックエンドとしていて、デフォルトだとLGPLのkissfftがバックエンドになるみたいです。インターフェースがEi…

領域の内側か外側かを調べる

はじめに 複素関数の定理で閉領域内なら2πi、領域外なら0を返すものがあります。この定理を使うことで指定した点が領域内にあるかどうかを判定できます。参考書は「複素関数攻略の一本道,森北出版」です。 2πiの定理 コーシーの積分定理はwikipediaによると…

Line Segment Detectorで遊びたかった

はじめに 某学会で道路の白線検出にLine Segment Detectorを使っていると紹介があり、気になったので調べてみました。 なにこれ エッジを検出して、直線部分を見つけ出して線を引きます。白線の形が出れば道路の状況が分かり、車をどの方向に動かせば良いか…

DPマッチングを試してみる

はじめに DPマッチングが便利らしいので試してみました。身近に使っている人が何人もいたので、私も知っておいた方が良いかなと。 DPマッチング 二つのパターン間の類似度を計算できます。パターンは多少伸び縮みしても大丈夫で、音声のパターンマッチングに…

Partial Least Squaresで次元圧縮

はじめに 近頃の機械学習・画像処理だと数万次元の特徴量を扱うのが当たり前の感があります。それだと扱いにくいですし、本当に分離できているのか不安なので次元圧縮することがあります。たとえば2次元に圧縮すれば分離できているか視覚的に分かるので、特…

C#で数式処理できるライブラリ

前の投稿でMath.NET Numericsを使いました。 c#でマイク音声をFFTする - wildpieの日記 Math.NETのページを見ていたら数式処理ができるライブラリがあったので試してみました。mathnet/mathnet-symbolics · GitHub Math.NET Symbolics インストールはNugetで…

c#でマイク音声をFFTする

FFT C#でFFT(Fast Fourier Transform)するのに便利なライブラリーを探してみると、Math.NETというのが良さそうでした。今回はこれを使って音声信号をFFTしてみます。 音声入力 処理の対象物をどうしようかと悩んだんですが、いつも画像ばかり触っているので…

EMアルゴリズムでMoGを解く練習

定番ネタですが、EMアルゴリズムのプログラムを書きました。目的 対数ゆう度関数を最大化するパラメータを求めます。今回はMoG(Mixture of Gaussians)なので の、、がほしいです。そのためには を計算すればいいみたいです。 E-Step M-Step Latexで数式書く…

C#で散布図を表示する練習

Qtの場合ですと、qwtというなかなか使いやすいグラフライブラリがあります。C#にもいくつかライブラリがあるようですが、どれが良いのかよくわかりません。ある方に聞いたところChartが良いと教えてくれたので、試しに散布図を作ってみました。表示させるデ…

C#でOpenCVの画像を表示させたくて苦労する2

ゴールデンウィークはC#の文法の勉強してました。何となくわかってきましたが、.netの方が大きすぎてどこから手をつければいいのか戸惑ってます。イベントループとか.netの設計の思想とかまとめた資料はあるのかな。前の日記でOpenCVの画像を表示させようと…

C#でOpenCVの画像を表示させたくて苦労する

Visual Studio 2012が手に入ったので、今まで経験のしたことのないC#を勉強しようと思い、いろいろ挑戦中。ただ専門は画像処理ということもあり、速度が大事なのでC#だけで完結するのは難しいので主にC/C++でコアの処理を書いて、見た目の部分にC#を使うこと…

レーベンバーグ・マーカート法を試す

レーベンバーグ・マーカート法(Levenberg-Marquardt)は非線形の関数最小化ができる手法。誤差関数を最小化することで曲線のあてはめなどができる。論文を読んでいると最小化はLM法を使用したと一行だけ書いてあることが多い。某学会でなぜLM法を使ったのです…

行列演算でニューラルネット

巷では何でもできると評判のニューラルネットワーク。 (少なくとも身内の中では) でも学習に時間がかかる、局所解に陥るなどSVMと比べると欠点も多くて、最近不人気みたい。ニューラルネットワークは万能だと洗脳されている僕にとっては、もっと人気が出て…

OpenCV2.2のGPU

今更だけどOpenCV2.2がCUDA対応だったので入れてみた。いちおう環境を載せておくと Ubuntu 11.04 AMD64 OpenCV 2.2 CUDA 4.0RC2 を使用している。インストールが結構大変で時間がかかった。 細かい方法はメモしてないけど、 CUDAのExampleのコンパイルが通る…