Q
オペレータ:edges_sub_pixで“not memory available”というエラーが発生してしまいますがどうすればよいですか?
A
このようなエラーが発生する原因として、edges_sub_pixに必要なメモリ容量を確保できていないということが考えられます。
edges_sub_pixの必要メモリ容量は 60 * Width * Height [Bytes] という式で求まります。ここでWidth,Heightは対象領域が長方形の画像に適用した場合の横幅、縦幅に相当します。対象領域が長方形でない場合は、その面積値が計算式中のWidth*Heightに相当することになります。
領域の面積値に依存することから、ラインセンサなどを用いて取得した大容量の画像であっても、reduce_domainなどを用いて適用範囲を適切に絞り込んでおくことでメモリ容量を大幅に抑える効果が期待できます。これによりメモリ容量を確保でき、エラーを防ぐことができます。
上記のような方法を用いてもエラーが発生してしまう場合には、HALCONが背後で確保している一時メモリが原因であることが考えられます。
プログラム中で大きな画像を扱う際には、膨大な一時メモリがキャッシュされています。このような場合にはオペレータ:set_system('temporary_mem_cache', 'false')をedges_sub_pixの直前に呼び出してください。それにより一時メモリを開放することができます。ただし、'temporary_mem_cache'はHALCON8.0から実装されたオプションであることに注意してください。
またこのオプションは、処理過程において、オペレータごとに内部的に使用される一時メモリを蓄積しておくかどうかの選択になります。デフォルトは'true'となっていますが、メモリに余裕がある場合はtrueの方が高速な処理をご期待いただけます。
関連オペレーター
reduce_domain
set_system