Q
edges_sub_pix のようなサブピクセルオペレータを大きな画像サイズに対して使用する場合、多くのメモリーを消費します。その為、システムが十分な物理メモリーを持っていない場合にはスワップが発生してしまいます。使用メモリーを低減する方法、または使用した特定のメモリーを変数名を指定する事で解放する事は可能でしょうか?
A
edges_sub_pix はサブピクセル精度のデータを保存する為のデータ領域として、画像データの 50 倍のメモリー空間を確保します。つまり画像サイズの大きい、例えば1024*1024 pixel (=約 1 MB) の画像に対しては 50 MB程度のメモリーを消費します。512*512 pixelの画像では 12.5MB 程度です。これは reduce_domain などを使用して解析領域を小さくしても変化しません。なぜならreduce_domainなどの解析領域を小さくするオペレータは、基本的に画像サイズが変化しないからです。
edges_sub_pix などのメモリーを多く消費するオペレータでその消費量を低減したい場合には、 crop を使用して画像を切り取り画像サイズを小さくする必要があります。クロップを行うと画像サイズの異なる新しい画像が作成されるため、基準画像との位置の対応関係を考慮する必要があるかもしれません。その様な場合にはアフィン変換を使用してデータを元の位置へ戻す事が可能です。
domain で解析領域を限定する場合には、解析したい領域よりも少し大きな領域を指定して下さい。これは edges_sub_pix がまわりのグレイ値からエッジを決定するからです。サンプルプログラムを参照して下さい。
また、HALCONでは定義したオブジェクトが消費している特定のメモリーを任意に解放する事はできません。
clear_obj はその変数名を以降使用できないようにする為のもので、任意のメモリーを解放する事はできません。
関連オペレーター
move_region
crop_rectangle1
reduce_domain
edges_sub_pix
hom_mat2d_identity
hom_mat2d_translate
affine_trans_contour_xld
ファイル
サンプルプログラムはedges_reduced.zipをダウンロードしてください。
edges_reduced.dev
画像の切り取りによりメモリー使用量を低減するサンプルプログラム
edges_reduced.txt
画像の切り取りによりメモリー使用量を低減するサンプルプログラム(テキスト形式)