OpenCV

画像中の線は、OpenCVのcvLineAA関数で描画してみたもの。AntiAliasはGaussianBlurでやっているとの事。WuのAlgorithmと比べて品質は良い感じ。

source codeを斜め読みした限りでは、固定小数点方式っぽいし、table使ってるし
bit演算で工夫してるみたいだし、なんか速そうな感じがした。今度icvLineAAのBenchmarkでも取ってみようかな。座標系が整数なのがちょっとした制限だろうか。

Fast Floating Point Line Scan-Conversion and Antialiasing
http://graphics.gmu.edu/raster/floatLine.pdf
ここの論文に書かれているAlgorithmを実装したものも見てみたい気がする。

C言語でよく使われている関数のnaming ruleで、接頭辞を何文字か独自の文字を付ける事によって名前がぶつからないようにするやり方があるが、これが個人的に好きではなかった。でも、namespaceで分けて同名の関数を作ればよいかというと、毎回明示的に指定するのが億劫な時もあるかなと思う。OpenCVは内部的に使う関数にはicvという接頭辞を付けている。例えばicvLineAA等。これを、icv::LineAAと毎回打つのは面倒くさいかな。まぁどうでも良い事かも。namespace名を簡潔にすれば問題ないかも。(D言語の場合はmodule名。しかも.でaccess可能)

既にC言語の世界で作られているlibraryを使う際は、郷に習った方が良さそう。
例えば、OpenGLの関数の接頭辞にglが付くのが嫌だからっていって、gl::とかいうnamespaceに入れてしまうと、source codeの記述levelでの互換性が失われてしまう。

OpenCVもそのうちC++で書き直すかも、というような発言がOpenCVのMLにあった。GCCVC++Toolkit等、優れたcompilerが無料で手に入るからだそうだ。C++はCと比べると便利な機能が数多くあるし、かなりすっきりしたcodeになると思うので期待。