<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>机上の空論</title>
        <link>http://blog.moro-tyo.net/</link>
        <description></description>
        <language>ja</language>
        <copyright>Copyright 2010</copyright>
        <lastBuildDate>Sat, 20 Feb 2010 09:23:00 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>chinkolize ～画像よ、chinko色に染まれ。～</title>
            <description><![CDATA[<p><img alt="mean_my_chinko.png" src="http://blog.moro-tyo.net/2010/02/20/mean_my_chinko.png" class="mt-image-none" style="" height="200" width="200" /><br />
突然ですが、この画像は僕のchinkoの平均画素値の画像です。<br />
デジカメで僕のchinkoの写真を撮って、平均画素値を計算して、作成しました。<br />
(1x1ピクセルの僕のchinkoの写真(を拡大した画像)ともいえます。)<br />
画素値は(R,G,B)=(139,78,63)です。<br />
他の表色系だと、(H,S,V)=(12,139,139)、(L,a,b)=(168,143,142)、(Y,Cr,Cb)=(95,159,110)です(H以外は8bit表記)。<br />
よかったら覚えておいてください。</p>

<p>今回、僕のchinkoの平均画素値から(輝度以外の)色成分を抽出し、入力画像の色成分に上書きするプログラムを作りました。<br />
具体的な処理としては、入力画像のRGB値をYCrCb値に変換し、Y(輝度)以外の成分であるCrとCbの値を、僕のchinkoの値に入れ替る処理を行いました。<br />
つまり、出力される画像の画素は、すべて僕のchinkoの色になります。僕のchinkoへの照明の明暗の違いで作り出せる色のみで構成される画像です。<br />
(もちろん、計算値ですが。)</p>

<p>以下、入力画像と出力画像になります。</p>]]></description>
            <link>http://blog.moro-tyo.net/2010/02/chinkolize.html</link>
            <guid>http://blog.moro-tyo.net/2010/02/chinkolize.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">cs</category>
            
            
            <pubDate>Sat, 20 Feb 2010 09:23:00 +0900</pubDate>
        </item>
        
        <item>
            <title>UnkoNose Web版</title>
            <description><![CDATA[以前作った<a href="http://blog.moro-tyo.net/2006/11/unkonose.html">UnkoNose</a>のWeb版を作りました。<br />
<br />
<a href="http://s.moro-tyo.net/unkonose/">
<img alt="UnkoNose_web.png" src="http://blog.moro-tyo.net/2008/07/05/UnkoNose_web.png" class="mt-image-none" style="" border="3" height="535" width="256" />
<br />
UnkoNose Web版</a><br />
<br />
顔検出には、<a href="http://kaolabo.com/webapi/">顔ラボのWebAPI</a>を使用しているのですが、WebAPIの利用回数の上限が少なすぎて、すぐに、うんこがのせられなくなってしまいます。<br />
<br />
でも、<a href="http://kaolabo.com/webapi/mashup">顔ラボのマッシュアップアプリ</a>に紹介されると利用回数の上限を増やしてくれるらしいので、応募しときました。<br />
<br />
<br />
みんなの頭にうんこあれ。<br />]]></description>
            <link>http://blog.moro-tyo.net/2008/06/unkonose-web.html</link>
            <guid>http://blog.moro-tyo.net/2008/06/unkonose-web.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">cs</category>
            
            
            <pubDate>Mon, 09 Jun 2008 21:57:17 +0900</pubDate>
        </item>
        
        <item>
            <title>blogを移転しました</title>
            <description><![CDATA[やっと、<a href="http://blog.livedoor.jp/moro_tyo/">旧blog</a>から、ここへ移転しました。<br /><br />たいしたこと書けませんが、どうぞよろしくお願いします。<br />]]></description>
            <link>http://blog.moro-tyo.net/2008/06/blog.html</link>
            <guid>http://blog.moro-tyo.net/2008/06/blog.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">etc</category>
            
            
            <pubDate>Tue, 03 Jun 2008 23:10:00 +0900</pubDate>
        </item>
        
        <item>
            <title>机上の空論のメモ帳</title>
            <description><![CDATA[ ここのblogよりも、もっと気軽に書けるメモ帳みたいなものが欲しいなあと思って、はてなダイアリーで日記を開設することにしました。<br />
<br />
<a href="http://d.hatena.ne.jp/moro-tyo/" target="_blank">机上の空論のメモ帳</a><br />
<br />
もし、暇なら見てください。<br />
どうぞ、よろしく。<br />]]></description>
            <link>http://blog.moro-tyo.net/2007/06/post-11.html</link>
            <guid>http://blog.moro-tyo.net/2007/06/post-11.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">etc</category>
            
            
            <pubDate>Fri, 15 Jun 2007 21:52:06 +0900</pubDate>
        </item>
        
        <item>
            <title>[メモ]ドキュメンタリ一覧</title>
            <description><![CDATA[ ドキュメンタリを見て、不意に感動させられることってありますよね。<br />
特に私は、ある無名の人の生き方を追っていく形式のドキュメンタリにやられることが多いです。<br />
<br />
ということで、以下は民放各局でのドキュメンタリ一覧です。<br />
ほぼ、自分用メモ。<br />
<br />
フジテレビ: <a href="http://www.fujitv.co.jp/b_hp/fnsaward/">FNSドキュメンタリー大賞</a>　不定期深夜　<a href="http://www.fujitv.co.jp/b_hp/fnsaward/backnumber/index2.html">受賞作品一覧と放送日程</a><br />

　　　　　　　<a href="http://www.fujitv.co.jp/b_hp/thenonfx/">ザ・ノンフィクション</a>　日曜昼<br />
　　　　　　　<a href="http://wwwz.fujitv.co.jp/nonfix/index.html">NONFIX</a>　木曜深夜<br />
日本テレビ: <a href="http://www.ntv.co.jp/document/">NNNドキュメント</a>　日曜深夜<br />
朝日テレビ: <a href="http://www.tv-asahi.co.jp/telementary/">テレメンタリー</a>　月曜深夜<br />
TBS:　　　　ドキュメント・ナウ(専用ページなし)　月曜深夜<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/12/post-9.html</link>
            <guid>http://blog.moro-tyo.net/2006/12/post-9.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">et</category>
            
            
            <pubDate>Sun, 17 Dec 2006 21:46:36 +0900</pubDate>
        </item>
        
        <item>
            <title>他人の家に行って、ダメージを与える方法</title>
            <description><![CDATA[ <strong>うんこをして、流さないで帰る</strong><br />
　・ダメージ小 <br />
　・なるべくトイレットペーパーを使わないで、うんこが見えるようにするとより効果的 <br />
<br />
<strong>うんこを天井に叩きつける</strong> <br />
　・ダメージ大 <br />
　・掃除しにくいので、かなりのダメージを与えることができる <br />
]]></description>
            <link>http://blog.moro-tyo.net/2006/12/post-10.html</link>
            <guid>http://blog.moro-tyo.net/2006/12/post-10.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">diary</category>
            
            
            <pubDate>Mon, 11 Dec 2006 21:48:42 +0900</pubDate>
        </item>
        
        <item>
            <title>UnkoNose で うんこ のせ!</title>
            <description><![CDATA[秋の夜長、うんこでも載せないとやってられません。<br />
<br />
画像処理ライブラリの <a href="http://sourceforge.net/projects/opencvlibrary/" target="_blank">OpenCV</a> を用いて顔検出を行い、頭にうんこを載せるソフトウェア UnkoNose を作りました。<br />
<br />
<a href="http://www.ne.jp/asahi/hp/moro-tyo/UnkoNose.zip">UnkoNose をダウンロード</a><br />
<br />
【はじめに】<br />

.NET Framework 2.0 がインストールされていないと実行できません。<br />
Windows Update からインストールできます。<br />
<br />
【使い方】<br />
上でダウンロードした UnkoNose.zip を解凍し、UnkoNose.exe をダブルクリックして、出現したフォームにお好みの画像ファイルをドロップするだけです。<br />
<img alt="UnkoNose01.PNG" src="http://blog.moro-tyo.net/img/UnkoNose01.PNG" class="mt-image-none" style="" height="196" width="354" /><br />
<br />
すると・・・<br />
<br />
<img alt="UnkoNose02.PNG" src="http://blog.moro-tyo.net/img/UnkoNose02.PNG" class="mt-image-none" style="" height="128" width="361" /><br />
あら、はしたない！<br />

頭に うんこ 載ってますよー！！！<br />
<br />
<br />
顔検出ミスると、わけのわからんところに うんこ が出現しますが、それは サプライズうんこ ということで。<br />
あと、フォルダ内の"unko.bmp"ファイルを差し替えると他の画像も頭に載せることができます。<br />
なお、白画素(R=255,G=255,B=255)は透明扱いになりますので。<br />
<br />
あなたも頭にいろいろ載っけてみよう！<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/11/unkonose.html</link>
            <guid>http://blog.moro-tyo.net/2006/11/unkonose.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">cs</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Thu, 16 Nov 2006 21:40:34 +0900</pubDate>
        </item>
        
        <item>
            <title>数学的帰納法 は、帰納法 ではない</title>
            <description><![CDATA[ Wikipediaの"数学"のページ( <a href="http://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6">http://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6</a> )をなんとなく見てたら、<br />
<blockquote>数学は、量、構造、変化、空間といったものを対象として、いくつかの仮定から始めて、決められた演繹的推論をすすめることで得られる事実（定理）のみからなる体系を研究する学問である。</blockquote>って、書いてあった。<br />
<br />
あれ？そういえば、数学的帰納法とかいうのあったなぁ・・・と高校のころの記憶がよみがえった。<br />
数学は、"演繹的推論をすすめることで得られる事実（定理）のみからなる体系を研究する学問"なら、数学的帰納法ってなんなの？という疑問が沸いた。<br />

で、Wikipediaでいろいろ見てみた。<br />
<br />
演繹 ( <a href="http://ja.wikipedia.org/wiki/%E6%BC%94%E7%B9%B9">http://ja.wikipedia.org/wiki/%E6%BC%94%E7%B9%B9</a> )<br />
<blockquote>演繹法 は、一般的・普遍的な仮定からより個別的・特殊的な結論を得る推論方法である。対義語は帰納法。帰納の導出関係は蓋然的に正しいのみだが、演繹の導出関係は前提を認めるなら絶対的、必然的に正しい。</blockquote><br />
帰納 ( <a href="http://ja.wikipedia.org/wiki/%E5%B8%B0%E7%B4%8D">http://ja.wikipedia.org/wiki/%E5%B8%B0%E7%B4%8D</a> )<br />
<blockquote>帰納法 とは、個別的・特殊的な事例から一般的・普遍的な規則を見出そうとする推論の方法である。対義語は演繹法。演繹においては前提が真であれば結論も必然的に真であるが、帰納では前提が真であるからといって結論が必ずしも真であることは保証されない。<br />

...(中略)...一般的にいって帰納は、あくまでも確率・確度といった蓋然性の導出に留まる。<br />
...(中略)...帰納とは、個別・特殊的事実の多さから結論がどのくらい確からしいものかを導くための推理といえる。</blockquote><br />
数学的帰納法 ( <a href="http://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%9A%84%E5%B8%B0%E7%B4%8D%E6%B3%95">http://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%9A%84%E5%B8%B0%E7%B4%8D%E6%B3%95</a> )<br />
<blockquote>数学的帰納法 とは、有限回の議論で可算無限個の対象に対する命題を証明するための数学の論法である。</blockquote><br />
<br />
帰納法は確率的規則を導くのだけれど、数学的帰納法は対象としている範囲(可算無限個)では絶対的に正しい。<br />
ということは、数学的帰納法は帰納法ではないじゃんか。<br />
<br />

あとで調べたら、はてなキーワード( <a href="http://d.hatena.ne.jp/keyword/%BF%F4%B3%D8%C5%AA%B5%A2%C7%BC%CB%A1">http://d.hatena.ne.jp/keyword/%BF%F4%B3%D8%C5%AA%B5%A2%C7%BC%CB%A1</a> )にも書いてあった。<br />
<blockquote> ...(中略)...余録であるが数学的帰納法は、哲学的に言えば演繹法（Deduction）であって、帰納法（Induction）ではない。</blockquote><br />
<br />
数学的帰納法って、最後に"帰納法"って書いてあるから帰納法みたいだ。<br />
でも、数学的帰納法は帰納法的な考え方を用いているが演繹法である。<br />
こんな名前だと、みんな勘違いするよ！<br />
だから、帰納的演繹法 とかに名前変えたほうがいいんじゃないかな。<br />
]]></description>
            <link>http://blog.moro-tyo.net/2006/11/post-8.html</link>
            <guid>http://blog.moro-tyo.net/2006/11/post-8.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Sat, 04 Nov 2006 21:37:48 +0900</pubDate>
        </item>
        
        <item>
            <title>主成分分析、独立成分分析</title>
            <description><![CDATA[主成分分析(PCA)とは、特徴量の次元がバカでかくなりすぎた場合に行われる次元収縮の手法である。<br />
参考: <a href="http://www-pse.cheme.kyoto-u.ac.jp/%7Ekano/document/text-PCA.pdf">http://www-pse.cheme.kyoto-u.ac.jp/~kano/document/text-PCA.pdf</a><br />
　　　<a href="http://aoki2.si.gunma-u.ac.jp/lecture/PCA/index.html">http://aoki2.si.gunma-u.ac.jp/lecture/PCA/index.html</a><br />
主成分分析は広く知られている手法で、統計学で習った人も多いかもしれない。<br />
<br />
パターン認識の分野では、この主成分分析と組み合わせて、独立成分分析(ICA)がしばしば使われる。<br />

<br />
独立成分分析と主成分分析の処理は似ている。だが、主成分分析は(主成分の)軸は直交しなければいけないのに対して、独立成分分析では軸は直交しなくてもよいという点が違う。独立成分分析では、データ分布の独立性を見るのだ。<br />
<br />
独立成分分析は fastICA ( <a href="http://www.cis.hut.fi/projects/ica/fastica/">http://www.cis.hut.fi/projects/ica/fastica/</a> ) で簡単に計算できる。<br />
<br />
以下では、fastICA の例をもって説明する。<br />
<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/10/post-7.html</link>
            <guid>http://blog.moro-tyo.net/2006/10/post-7.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Mon, 30 Oct 2006 21:21:20 +0900</pubDate>
        </item>
        
        <item>
            <title>画像ファイルから全画素値を取ってくる時の速度比較</title>
            <description><![CDATA[ 画像ファイルの全画素値を配列にコピーする場合の速度比較を行った。<br />
<br />
比較するのは以下の3手法。<br />
<br />
・方法1: C#<br />
　- C# で Bitmap クラスの GetPixel メソッドを使った<br />
　- 普通の方法<br />
・方法2: C#(unsafe)<br />

　- C# で unsafe を使った<br />
　- ちょっと工夫した方法<br />
・方法3: C++<br />
　- C++ のクラスライブラリを作成し、C# から参照して使った<br />
　- 画像処理ライブラリとして、OpenCV を用いた<br />
<br />
一応、比較用に書いたソースは記事末に載っけときました。<br />
<br />
557x850 の 24ビットカラー JPEG画像の場合<br />
方法1: 21.6388260748251 (秒)<br />

方法2: 5.06153430618396 (秒)<br />
方法3: 0.0533208579219269 (秒)<br />
<br />
方法1の20秒は、ありえないぐらい遅い。<br />
unsafe を用いた方法2で処理時間は1/4になったが、C++を用いた方法3と比べると100倍近く遅い。<br />
<br />
方法1はポインタが使えないから遅いというのは分かるような気がするが、ポインタが使える方法2と方法3がこんなに違うのは不思議だ。<br />
<br />
JPEG のデコードで時間が掛かってるのか？と思って、ビットマップ画像でも比較。<br />
<br />
557x850 の 24ビットカラー ビットマップ画像の場合<br />

方法1: 21.81745337468 (秒)<br />
方法2: 5.01866893115639 (秒)<br />
方法3: 0.0364773279243997 (秒)<br />
<br />
あれ？方法1と方法2があんまり変わらんのに、方法3がますます速くなってるし。<br />
<br />
<br />
まとめ<br />
・大量の画像を相手にしなければいけないときは C++ を使おう。<br />
<br />
<br />

【追記(2007/11/24)】<br />
Bitmap.Width, Bitmap.Height は意外にコストが高い（内部的にDllImportしたgdiplus.dllを利用している）ので、forループ前に一旦変数に入れてやると多少パフォーマンスが改善されるそうです。(コメントからの情報)<br />
<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/10/post-6.html</link>
            <guid>http://blog.moro-tyo.net/2006/10/post-6.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Tue, 10 Oct 2006 00:14:29 +0900</pubDate>
        </item>
        
        <item>
            <title>サンプリング定理・フーリエ変換</title>
            <description><![CDATA[(真上から見たイメージの)おっぱいを標本化する場合。 <br />
おっぱいの周波数の2倍以上の点で、標本化しなければならない。 <br />
さもないと、おっぱいが、2つではなくなるかもしれない(2倍以上の点でも標本点が少ないとカップ数は変わる場合がある)。 <br />
<br />
また、おっぱいをフーリエ変換し、パワー(振幅)スペクトルを求めることにより、おおよそのカップ数が、推定できる。 <br />
<br />
さらに、おっぱいにローパスフィルタを適用することにより、高周波成分である乳頭が排除でき、R-18指定から、R-15指定に次元を落とすことができる。 <br />]]></description>
            <link>http://blog.moro-tyo.net/2006/08/post-5.html</link>
            <guid>http://blog.moro-tyo.net/2006/08/post-5.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Fri, 04 Aug 2006 00:10:57 +0900</pubDate>
        </item>
        
        <item>
            <title>[メモ] ボーカルリデューサー</title>
            <description><![CDATA[ MP3からボーカルを抜いてカラオケ状態にするボーカルリデューサー<br />
<a href="http://www.ringolab.com/note/daiya/archives/004666.html">http://www.ringolab.com/note/daiya/archives/004666.html</a><br />
<br />
ボーカルリデューサーとは<br />
・音楽ファイルからボーカル部分を自動認識技術で発見し、除去する。<br />
<br />
特徴<br />
・音楽のほとんどが、ボーカルが中央に定位していることを利用し、ボーカル部分を除去。<br />

・つまり、ボーカルは左右のスピーカで同じ音が流れるが、楽器音は左右のスピーカで違う音が流れるということを利用<br />
<br />
アルゴリズム概要<br />
・1. フーリエ変換、ハートレー変換などで周波数解析<br />
・2. 両チャンネルの振幅スペクトル・位相スペクトルを比較し、非常に近いもののみをリデュース<br />
<br />
まとめ<br />
・CDのようなにちゃんとステレオを意識して作ってある音楽ファイルではないと適応できない。<br />
・なので、汎用性はあまりない。<br />
<br />

たぶん、音を研究している人が自分が欲しいからという目的だけで作ったものだろう。<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/08/post-4.html</link>
            <guid>http://blog.moro-tyo.net/2006/08/post-4.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Thu, 03 Aug 2006 00:08:59 +0900</pubDate>
        </item>
        
        <item>
            <title>[メモ] System::String^ →　char*, wchar_t*, LPSTR, LPWSTR への変換 (C++/CLI)</title>
            <description><![CDATA[VS2005 C++/CLI で、アンマネージなライブラリを使う場合、ライブラリの関数の引数がアンマネージな文字列型(char*, wchar_t*, LPSTR, LPWSTR)の時がある。そんな時に必要な変換。<br />

<pre>using namespace System::Runtime::InteropServices;	//Marshal使うから

//変換元
String ^srcStr = "Hello";

//char*
char* dstChar;
dstChar = (char*)(void*)Marshal::StringToHGlobalAnsi(srcStr);

//wchar_t*
wchar_t *dstWchar_t;
int strLen = srcStr->Length;
dstWchar_t = (wchar_t*)malloc((strLen+1)*sizeof(wchar_t));
for(int i = 0 ; i < strLen ; i++) {
　　dstWchar_t[i] = srcStr[i];
}
dstWchar_t[strLen] = '\0';

//LPSTR
LPSTR dstLPSTR;
dstLPSTR = (LPSTR)dstChar;

//LPWSTR
LPWSTR dstLPWSTR;
dstLPWSTR = (LPWSTR)dstWchar_t;</pre>
wchar_t* への変換だが、文字数が高々知れてるのならば、malloc を使わずに<br />
wchar_t dstWchar_t[100];<br />
ってすればよい。 <br />
]]></description>
            <link>http://blog.moro-tyo.net/2006/07/-systemstring-char-wchar-t-lps.html</link>
            <guid>http://blog.moro-tyo.net/2006/07/-systemstring-char-wchar-t-lps.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Sat, 15 Jul 2006 00:05:40 +0900</pubDate>
        </item>
        
        <item>
            <title>[メモ] SmartOCR Lite Edition</title>
            <description><![CDATA[SmartOCR とは<br />
・日本語対応OCRソフト。<br />
　(OCRとは、光学文字認識(Optical Character Recognition) のこと。つまり、画像の中の文字をテキストとして認識してくれるもの)<br />
・認識率の高さと Lite Edition がフリーなことで、有名になった。<br />
・Lite Edition の他に Professional Edition や SmartOCR Library SDK の販売も行っていた。<br />
・しかし、開発元である スマートリーディング が解散してしまったために今では手に入らない。<br />
<br />
<br />
SmartOCR Lite Edition を試しに使ってみた。<br />
ちなみに設定はすべてデフォルト(文字位置や文字方向は自動認識)。<br />
<br />
<a href="http://blog.moro-tyo.net/img/SmartOCR01.jpg"><img alt="SmartOCR01.jpg" src="http://blog.moro-tyo.net/img/SmartOCR01-thumb-400x187.jpg" width="400" height="187" class="mt-image-none" style="" /></a>スクリーンショット(クリックで拡大)<br />左が元画像で右が認識結果。<br />
"一時的に"が"一時的促"になっているが、その他は正しく認識されている。<br />
<br />
<a href="http://blog.moro-tyo.net/img/SmartOCR02.jpg"><img alt="SmartOCR02.jpg" src="http://blog.moro-tyo.net/img/SmartOCR02-thumb-400x83.jpg" width="400" height="83" class="mt-image-none" style="" /></a>スクリーンショット(クリックで拡大)<br />メインの文字の"飲めないのに、お中元でビール・・・・・・いくらで売れる？"は正しく認識されている。<br />
右の"今も、誰かがトクしてる。"とか"オークション"という文字は認識できていない。<br />
あと、傾いた"お中元"という文字や、スロットが回ってるところを、わけの分からん文字として誤認識している。<br />
<br />
あと、他にも10枚ぐらい試した。<br />
<br />
<br />
まとめ<br />
・割と認識率はよいようだ。<br />
・小さい文字は認識しにくい。<br />
・やっぱ、漢字は誤認識がどうしても起こるようだ。<br />
・背景と文字のコントラストが低いと文字として認識できない時がる。<br />
・背景の周波数が激しい箇所が、わけの分からん文字として誤認識する。<br />
・フォントが特殊だと誤認識しやすい。<br />
<br />
<br />
これだけのものをフリーで提供しているのはすごい。<br />
オープンソースで開発されている OCR があるようだが、どれも日本語に対応していないし。<br />
<br />
SDK を販売していたそうだが、今は手に入らないのが悔やまれる(いくらで売ってたのかは知らないけど)。<br />
他の 日本語対応OCRソフト の SDK は、くそ高い(20万円以上とか)ので手が出ない。<br />
個人で OCR 組み込んだプログラム作るのは無理ってことかー？！<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/07/-smartocr-lite-edition.html</link>
            <guid>http://blog.moro-tyo.net/2006/07/-smartocr-lite-edition.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Thu, 13 Jul 2006 23:56:23 +0900</pubDate>
        </item>
        
        <item>
            <title>[メモ] サポートベクターマシン(SVM)</title>
            <description><![CDATA[ サポートベクターマシン(以下 SVM) とは<br />
・ニューラルネットワークの一種<br />
・教師ありクラスタリング<br />
<br />
SVM の基本的な考え方<br />
・元々2クラスの線形分離手法として提案される<br />
・単層パーセプトロンに似ているが、SVM はマージン最大化という手法をとっているのがポイント。<br />

・マージン最大化とは、超平面と学習データの隙間となるマージンをなるべく大きく取ろうというもの。<br />
　(ここでいう超平面とは、2つのクラスにぶった切る平面のこと)<br />
・ちなみに超平面と、ちょうどマージンの分だけ離れている学習データをサポートベクトルという。<br />
・このマージン最大化という考えを取り入れることによって、テストデータの識別精度を高めている。<br />
<br />
<br />
SVM の発展<br />
・線形分離不可能な問題への対応<br />
　- ソフトマージン(学習データが多少マージンにくい込んだり、反するクラスの空間にくい込んだりしても許す)で対応<br />
　　(↑まだ、超平面自体は線形であることに注意)<br />

・非線形問題への対応<br />
　- カーネルトリックにより非線形な問題も対応<br />
　　(ちなみに、PCA(主成分分析)や部分空間法もカーネルトリックにより、非線形に拡張可能)<br />
　- このカーネルトリックにより SVM の精度が飛躍的に向上し、SVM がメジャーになった。<br />
・2クラスより多いクラスタリング問題への対応<br />
　- 複数のSVMを組み合わせることにより対応<br />
<br />
<br />
SVM の利点<br />
・データの特徴量の次元が大きくなっても識別精度がよい(マージン最大化のおかげ)<br />

　- 一般的にデータの特徴量の次元をむやみに増やすと識別精度が悪くなる(ヒューズの現象、球面集中現象)。<br />
　　なので、本来次元数の数倍の学習データを用意しなければいけないとされている。<br />
　　しかし、SVM は特徴量の次元数が大きくても対応できるため、画像認識の分野で頻繁に使われる。<br />
　　(文字認識の問題では、元の画像をグレースケールにして 20x20Pixel に正規化して、そのまま400次元の特徴量として SVM にぶち込んでやるという手法もとられている。)<br />
・最適化するべきパラメータが少ない<br />
　- ニューラルネットワークでは、良い精度を得るためにパラメータを試行錯誤して決定する必要があるが、SVM では割と簡単に最適なパラメータが求められる。<br />
<br />
SVM の欠点<br />
・学習データが増えると計算量が膨大となる<br />

　- 特徴量の次元は大きくても対応できるが、学習データ数が増えるとタイヘン。<br />
・基本は2クラスの識別の手法<br />
　- 複数のSVMを組み合わせることで多クラスの識別が可能だが、多クラスを考慮に入れた識別関数の最適化をすることができない。<br />
<br />
参考 : 前田英作, "痛快！ サポートベクトルマシン ～古くて新しいパターン認識手法～", 情報処理学会誌, Vol.42, No.7, pp.676-683, (2001).<br />
　　　　<a href="http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/index.htm">http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/index.htm</a><br />
　　　　とか、あといろいろ見たよ。<br />
<br />
<br />
<br />

実際に計算してみよう！<br />
パッケージとしては、"LIBSVM"と"SVMlight"が有名なようだ。<br />
<a href="http://www.bi.a.u-tokyo.ac.jp/~tak/svm.html">http://www.bi.a.u-tokyo.ac.jp/~tak/svm.html</a><br />
R(オープンソースの統計処理ソフトウェア) のインタフェースが用意されているということで、LIBSVM を選択。<br />
<a href="http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/">http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/</a><br />
LIBSVM は、R の"e1071"というパッケージに入っています。<br />
<br />
パラメータをどのように設定したらいいかは以下の pdf を参照。<br />
<a href="http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf">http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf</a><br />

<br />
e1071 の仕様は以下の pdf を参照。<br />
<a href="http://cran.r-project.org/doc/packages/e1071.pdf">http://cran.r-project.org/doc/packages/e1071.pdf</a><br />
<br />
e1071 を使ったサンプル<br />
<a href="http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/R_example">http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/R_example</a><br />
(↑とか、e1071.pdf のサンプルとかを実際に入力して練習してみるといいよ)<br />
<br />
LIBSVM の FAQ<br />
<a href="http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/faq.html">http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/faq.html</a><br />

<br />
<br />
最適なパラメータの探し方<br />
・主に精度の良し悪しを決めるのは kernel の選び方と γ(gamma) と C(cost) の設定である。<br />
・上の guide.pdf を参考にすると設定法は以下となる<br />
　- kernel はデフォルトの RBF 一択でOK。<br />
　- γとC は、grid serch により最適な値をヒューリスティックに探す。<br />
　　grid serch は、例えば調べる値を γ=(0.5, 0.25) C=(1, 2, 4)として入力したら、<br />
　　(γ,C) = (0.5, 1),(0.5, 2),(0.5, 4),(0.25, 1),(0.25, 2),(0.25, 4)<br />
　　の 6 種類すべて、cross-validation(または、bootstrap) で性能評価し、一番制度の良いものを提示してくれる。<br />

　　(e1071 では、grid serch を tune という関数で行う。)<br />
　- 最初は大雑把な値で、次に詳細な値で、探すといいよ(coarse to fine(祖から密へ) の考え方で)。<br />
　- ただし、特徴量の次元がバカでかい(数千次元)などの特別な場合は、他の手法を取る必要があるよ。<br />
<br />
その他のパラメータについて<br />
・type について<br />
　- "C-classification" と "nu-classification" の違い<br />
　　FAQに該当箇所がある<br />
　　<a href="http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/faq.html#f411">http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/faq.html#f411</a><br />

　　基本的には同じということだし、デフォルトが"C-classification"だし、教科書的な方法は"C-classification"みたいだし(詳しくは以下の pdf 参照)、デフォルトままでよさそう。<br />
　　<a href="http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf">http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf</a><br />
・scale について<br />
　- デフォルトのTRUE だと、すべての特徴量の次元ごとでスケーリング(正規化)を行う。<br />
　- 特徴量の次元ごとに重みを変えたい場合は、scale を FALSE にして、自分で重みを考慮したスケーリングすると調整するとできるのかな？<br />
・class.weights について<br />
　- クラスの重みを変えることができる。<br />
　- 例えば、犬の画像と猫の画像をクラスタリングすることを考える。<br />

　　自分は犬の画像が大好きなので、犬の画像にクラスタリングされる画像が欲しいのだが、<br />
　　一枚の犬の画像も見逃したくはない、という場合に犬のクラスタの重みを大きくする。<br />
　　すると、犬の画像が猫の画像だと誤認識される確率は減り、犬の画像の再現率が上がる。<br />
　　でも、猫の画像が紛れ込む可能性が上がるけどね。<br />
　　という感じにクラスの重みを調整できる。<br />
<br />
<br />
type パラメータについてもっと詳しく<br />
・"C-classification" (or "nu-classification") (分類)について<br />
　- 普通のクラスタリング問題の時に使う。<br />

　- 例えば、犬の画像と猫の画像のクラスタリング問題を考えると<br />
　　テストデータの予測(predictの)結果は、犬クラスか猫クラスかという2値(2クラスタなので)で出力される。<br />
・"eps-regression" (or "nu-regression") (回帰)について<br />
　- 上の"C-classification"では、テストデータの予測結果は、犬クラスか猫クラスかという2値で与えられるが、<br />
　　このパラメータを使用すると、予測結果は数値として出力される。<br />
　　つまり、そのテストデータがどれくらい犬クラス(猫クラス)として尤もらしいかを知りたい時に使用する。<br />
　- ラベルは数値で与える。<br />
　- 例えば、学習データの犬の画像に -1、猫の画像に 1 のラベルを与えたとする。<br />
　　すると予測(predictの)結果は -0.10516366 や -0.80516366 という値として出力される。<br />

　　両方とも犬クラスとして判定されたことになるが、前者(-0.10516366)より後者(-0.80516366)の方が、犬の画像として尤もらしいことが分かる。<br />
　　なお、0 より小さい値を犬クラス、0 より大きい値を猫クラスと判定すれば、"C-classification" と同じことになる。<br />
　　たぶん。<br />
・"one-classification" (1クラスSVM)について<br />
　- 1つのクラスとその他にクラスタリングしたいときに使用する。<br />
　- 例えば、種々雑多な画像群から犬の画像だけ取って来たい場合<br />
　　犬の画像のみで学習し、犬の画像とそれ以外の画像にクラスタリングする。<br />
　- e1071 では、ラベルの引数を与えずに 関数svm でモデルを作れば、<br />
　　自動的に type="one-classification" となり、1クラスSVM となる。<br />

<br />
<br />
SVM 使った感想<br />
・精度タケー！<br />]]></description>
            <link>http://blog.moro-tyo.net/2006/07/-svm.html</link>
            <guid>http://blog.moro-tyo.net/2006/07/-svm.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">study</category>
            
            
            <pubDate>Thu, 13 Jul 2006 00:01:35 +0900</pubDate>
        </item>
        
    </channel>
</rss>
