Last modified 12 years ago Last modified on 04/27/06 11:28:53

mist::euclidean::distance_transform の出力がユークリッド距離だと思って計算していたら,どうも値が違うようです.これは「2乗」ユークリッド距離ということでしょうか.

mist::euclidean::distance_transform は,画素のアスペクトを考慮したユークリッド2乗距離を計算します.MISTで実装しているユークリッド2乗距離変換では,X軸方向の画素の大きさを1としたときの比を用いて2乗距離値を計算しています.画素の大きさを考慮したユークリッド距離を利用したい場合は, 計算結果の平方根に画素のX軸方向の解像度(大きさ)を掛けてください.


3次元画像の細線化処理を使用する際に,出力画像の型を array3<unsigned char> にすると、適切な細線化画像が求まらないことがあるようです.

MISTで実装されている細線化アルゴリズムでは,出力画像の画像に対してユークリッド2乗距離変換し,その後,細線化処理を行います.そのため,出力画像が array3<unsigned char> の場合には,画像のサイズによっては距離変換が最後まで正しく行われません.これは,2乗距離の最大値が unsinged char の最大値で制限されるためです.細線化を利用する場合には,array3<unsigned short> か,それよりも大きい値を表現できる型を利用してください.


array3<unsigned char> の画像に対してラベリング処理を行ったのですが,各領域に正しくラベルが振られません.

MISTで実装しているラベリング処理では,array3<unsigned char> の画像に対して各領域のラベルを順次割り振っていきます.その際,処理中に割り振られるラベル数が unsigned char の最大値よりも大きくなった場合は,正しくラベルが割り振られません.ここで,ラベル数とは最終的に得られる領域の数ではなく,作業中に発生する一時的なラベル数のことを意味しています.そのため,最終的に得られる領域数(最終的なラベル数)がunsigned char の最大値よりも小さい場合でも,正しく計算されない場合があります.ラベリング処理を利用する場合には,ラベル数がオーバーフローしないように注意が必要であり,array3<unsigned short> や array3<unsigned int>を利用することをお勧めします.