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のコンパイルが通る…

SVM勉強メモ2

LS-SVM 前回、SVMをFOBOSを使って解いた。今回はLeast squares support vector machine(LS-SVM)というSVMの派生アルゴリズムを試してみる。これは最小化問題を としたアルゴリズム。なお、括弧と,は内積を表している。 この式のラグラジアンを微分した結果を…

SVM勉強メモ

SVM SVM(Support Vector Machine)は2クラスの識別に使えるアルゴリズムで非常に性能が良いらしい。 コンピュータビジョン最先端ガイド2などによると を最小化するを求めるのがSVMとのこと。普通SVMは2次計画法を使って計算するけど、実装方法が分からないの…

QtでCUDAを使う

CUDA NVIDIAのGPUを汎用計算に使えるCUDAという開発環境がある。これを使うとCPUと比べて数十倍高速化することがある。CPUで数十倍高速化するのは何年先か分からないので、結構すごい。ただし、並列処理が可能なプログラムしか高速化しないので、CUDAで高速…

QtでOpenCVを使う

OpenCV Qtで画像を扱うにはQImageを使うけど、簡単な機能しか付いていないのでOpenCVを使いたい。というわけで、OpenCV 2.2をインストールした。(QtとEigenが2.2から使える?) グレースケール化 グレースケール化と書いてあるボタンを押したら、グレースケー…

サイン波の多項式近似

多項式近似 サイン波にガウスノイズを加えた点から、元のサイン波を近似してみる。 これはPRMLという本の第1章の話で、こちらのサイトを参考にさせてもらった。 誤差 を最小とするを求めれば近似多項式を作れる。最小を求めるには微分すれば良いので、 つま…

sin波にノイズを足したグラフ

sin波に正規分布から取った値を足した点を表示する。 plot.cpp #include "plot.h" #include <qwt_plot_curve.h> #include <qwt_legend.h> #include <random> Plot::Plot(QWidget *parent) : QwtPlot(parent) { setCanvasBackground(QColor(Qt::white)); // 凡例 insertLegend(new QwtLegend(), QwtPlo</random></qwt_legend.h></qwt_plot_curve.h>…

Qtでグラフ描画

Qwtのインストール 計測系のプログラムなどでグラフを表示したいとことは多い。QtのGUI向けにQwtというグラフ表示ライブラリがあるので使ってみる。無料。 公式サイト ここからQwt6をダウンロードする。それでsrcディレクトリにあるproファイルからQt Creato…

改造Widgetを付ける

QLabelとかQPushButtonとかを継承して、何かの機能を付けたいときQt CreatorではContainersのWidgetを使う。 QLabelの様なGUI表示されるものはQWidgetを継承しているので、Qt Cratorで貼ったWidgetを自作Widgetに格上げする。 例として、自作Labelを作ってみ…

ボタンを押したらHello World

Qt CreatorでGUI作成 Qtを使ってGUIのソフトを作ってみる。簡単な例としてボタンを押したらラベルに文字が表示されるソフトにしよう。 Qt Creatorの新規作成からGUIを選んで、基底クラスをQWidgetにする。QMainWindowはファイルとかのメニューがあるやつで、…

最近はやりのQt使う

Qt(キュート)ってなに プログラミングの勉強しようと思うと、たいていはC言語とかJavaを使うけど頑張って本のコード写しても結果が白黒の画面でがっかりする。 やっぱりGUIじゃなきゃ面白くないのでQtというC++のGUI開発環境を使ってみる。普通WindowsでGUI…

初投稿

ブログ初投稿。 ネタないけどゆっくり書いていきたいな。