【发布时间】:2011-02-09 12:08:12
【问题描述】:
我有一组点,我想将它们传播到由二进制图像定义的形状边界的边缘。形状边界由 1px 宽的白色边缘定义。
我将这些点的坐标存储在一个 2 行乘 n 列的矩阵中。该形状形成一个凹形边界,其内部没有孔,由大约 2500 个点组成。我希望在形状边界上传播大约 80 到 150 个点。
我想从一组点中的每个点沿正交方向投射一条射线,并检测它与形状边界的交点。正交方向已经确定。出于所需的目的,它是使用为点计算的轮廓的法线计算的,使用点 1 和点 + 1。
最好的方法是什么? 是否有某种可以使用的光线追踪算法?
非常感谢您的任何帮助!
编辑:我试图使问题更清晰,并添加了描述问题的图像。图中灰线表示形状轮廓,红点表示点 我想传播,绿线是一条假想的正交投射射线。
alt text 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];
【问题讨论】:
-
绿线与什么正交? “正交方向已经确定”是指我们可以将其视为给定的数据的一部分吗?
标签: matlab image-processing raytracing point propagation