画像の膨張(dilation)/伸縮(erosion)が行えるフリーのライブラリーをご存知の方がいらっしゃいましたらご教授下さい。自分でも探しているのですが、まだよいものが見つかりません。
一応、VCLとWIN32だけでできます。
簡易版
http://delphi.livedoor.biz/archives/50602241.html
画質重視
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/graphics/PaintImage.htm
せっかくご返事を頂いたのですが、私の言葉足らずでした。
拡大/縮小ではなく、2値画像の穴埋め(closing)を行うために使われるdilation/erosionです。
こんにちは。
dilation/erosion って、
http://www.fjt.info.gifu-u.ac.jp/jyugyou/subject2005/index3.html
こういうことですか?
もしそうなら、
erosion は、カレントピクセルの上下左右を見て、全部が黒のときは黒、それ以外は白
dilation は、カレントピクセルの上下左右を見て、一つでも黒があれば黒、それ以外は白
ということですよね? 自分でコードを書いても簡単です。
Delphi での2値画像へのアクセスは、例えばわたしの
http://junki.lix.jp/delphigr/033TBmpData1.htm
で扱っています。
junkiさん返事をして頂き、ありがとうございます。
結局、ご指摘の様に面倒くさがらずにコードを書きました。
適当に作っても全体の速度に影響しなかったので良しとします。
メモリが節約できるビット演算も考えましたが、手軽にレコードとポインタを利用して
…
type
RGB_ = record
B, G, R: byte;
end;
…
TRGB_array = array of RGB_;
PRGB_array = ^TRGB_array;
…
var pnt_ :PRGB_array;
…
RGBの各プレーンへScanLine[]とポインタでアクセスして[元画像のwidth+2,元画像のheight+2]の2元配列に一時的に代入して処理後に元に戻しました。
・
・
・
処理はこれですんだのですが、上記部分をコードに追加中に元のコードに処理間違いを見つけて、直したところ、マスクの穴埋めをしなくても十分に良好な結果が得られましたので、結局ボツにしてしまいました。昨晩から悩んでいたのはなんだったのか?
ツイート | ![]() |