バイナリイメージによって定義された形状境界のエッジに伝播したいポイントのセットがあります。形状の境界は、1px幅の白いエッジによって定義されます。
これらの点の座標は、2行n列の行列に格納されています。形状は凹状の境界を形成し、約2500ポイントで作られた穴はありません。形状の境界に伝播したいポイントが約80〜150あります。
一連の点から直交する方向に各点から光線を当てて、どの点で形状境界と交差するかを検出したいと思います。直交方向はすでに決定されています。必要な目的のために、ポイント1とポイント+ 1を使用して、ポイントに対して計算された等高線の法線を使用して計算されます。
これを行うための最良の方法は何でしょうか?使用できるレイトレーシングアルゴリズムのようなものはありますか?
よろしくお願いします!
編集:私は質問をより明確にすることを試み、問題を説明する画像を追加しました。画像では、灰色の線は形状の輪郭を表し、赤い点は伝播したい点を表し、緑の線は架空の直交投影光線を表しています。
代替テキストhttp://img504.imageshack.us/img504/3107/orth.png
別の編集:明確にするために、各ポイントの法線を計算するために使用されるコードを投稿しました。ここで、xtとytは、各点の座標を格納するベクトルです。通常の値を計算した後、linspace関数と要求された直交線の長さを使用して伝播できます。
%#derivaties of contour
dx=[xt(2)-xt(1) (xt(3:end)-xt(1:end-2))/2 xt(end)-xt(end-1)];
dy=[yt(2)-yt(1) (yt(3:end)-yt(1:end-2))/2 yt(end)-yt(end-1)];
%#normals of contourpoints
l=sqrt(dx.^2+dy.^2);
nx = -dy./l;
ny = dx./l;
normals = [nx,ny];