JSON + CanvasでVisual Code Reading(3)
一昨日の続きです。元画像の各ピクセルの積和を何に使うのかという話でしたが、ヒントになりそうな文献を調べてみました。日本語の文献だと、以下のものが参考になりそうです×
[PDF] 谷川昌司, 日高章理, 佐野夏樹, 西田健次, 栗田多喜夫: 矩形特徴による弱識別器のブースティングによる対象検出手法の汎化性能向上のための工夫と車載カメラの映像中の車の検出への応用, 第11回画像センシングシンポジウム講演論文集, E-10, pp.139-142. 2005.
英語の文献だともうちょっと詳しいのがあります×
[PDF] Andreas Nüchter, Hartmut Surmann, Joachim Hertzberg: Automatic Classification of Objects in 3D Laser Range Scans, In Proc. 8th Conf. on Intelligent Autonomous Systems, 2004
日本語のほうから引用します×
矩形特徴は図1 に示すような局所領域に含まれる画素の輝度の総和の組み合わせで表される。矩形特徴の強度は白い部分に含まれる画素の輝度値の平均と黒い部分に含まれる画素の輝度の平均の差として表される。つまり、白い部分の平均輝度から黒い部分の平均輝度を引いた値を計算する。
(中略)
この演算は、あらかじめ以下に示す積分イメージを求めておくことで、比較的簡単な演算の組み合わせで計算できる。
なるほど。平均というのは足して割ったものなので、「足す」計算を最初にやって画像に保存していたわけですね。わかってしまえば単純な話でした×
ところで、積分を微分すると元に戻るという話を学校で習いました。この画像も、積和ルーチンの逆の操作をすると元に戻すことができます。またCanvasに描いてみます×
var dest_pos = 0; var k, u, prv = 0; for (var i = source.width;i < len;i++) { k = source.data[i]; u = source.data[i-source.width]; k -= u; k = k - prv; prv = source.data[i] - u; if (k < 0) k = 0; if (k > 255) k = 255; buf.data[dest_pos++] = k; buf.data[dest_pos++] = k; buf.data[dest_pos++] = k; buf.data[dest_pos++] = 255; }
出てきました!積和画像には元の画像の情報が完全に保存されていることが分かります×
……ところで sqsum のほうは? X > _ < X < また今度