画像の膨張/伸縮を行うコンポーネントは?

解決


nonn  2008-06-02 20:37:22  No: 30847

画像の膨張(dilation)/伸縮(erosion)が行えるフリーのライブラリーをご存知の方がいらっしゃいましたらご教授下さい。自分でも探しているのですが、まだよいものが見つかりません。


通りすがりん。  2008-06-02 21:29:55  No: 30848

一応、VCLとWIN32だけでできます。

簡易版
http://delphi.livedoor.biz/archives/50602241.html

画質重視
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/graphics/PaintImage.htm


nonn  2008-06-02 21:50:45  No: 30849

せっかくご返事を頂いたのですが、私の言葉足らずでした。
拡大/縮小ではなく、2値画像の穴埋め(closing)を行うために使われるdilation/erosionです。


junki  URL  2008-06-03 00:04:57  No: 30850

こんにちは。

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

で扱っています。


nonn  2008-06-03 03:40:34  No: 30851

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元配列に一時的に代入して処理後に元に戻しました。
    ・
    ・
    ・
処理はこれですんだのですが、上記部分をコードに追加中に元のコードに処理間違いを見つけて、直したところ、マスクの穴埋めをしなくても十分に良好な結果が得られましたので、結局ボツにしてしまいました。昨晩から悩んでいたのはなんだったのか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加