这样几条曲线X
,Y
可以映射到另一条曲线R
,这是可逆的,所以我仍然可以得到X
,Y
从R
。
有人对此有想法,或者我可以自己搜索一些术语吗?
更新
我认为这里应该做一些澄清。
map(X,Y) => R;
invertible_map(R) => (X,Y)
这样几条曲线X
,Y
可以映射到另一条曲线R
,这是可逆的,所以我仍然可以得到X
,Y
从R
。
有人对此有想法,或者我可以自己搜索一些术语吗?
更新
我认为这里应该做一些澄清。
map(X,Y) => R;
invertible_map(R) => (X,Y)
尽管我评论说您的问题太模糊,但我会对此进行尝试。
我的猜测是你有一条空间曲线,对应于三个维度(X,Y,R)中的三元组。在给定 r 值的情况下,您希望能够对 x 和 y 的值进行插值。
如果这条曲线被很好地定义为作为 r 的函数的插值,那么只需调用 interp1 两次。那是,
xhat = interp1(R,X,rhat);
yhat = interp1(R,Y,rhat);
随意使用 interp1 中的任何方法进行插值。
通过为插值定义明确,我的意思是说 R 没有重复并且是单调的,因此对于自变量 r 的任何值,我们可以为 x 和 y 中的每一个恢复一个值。
如果您的问题确实是其他问题,请更具体,以便我更正我的答案。
如果我理解正确,您想将高维曲线(我从您的帖子中理解的 2D)投影到低维空间(1D)上。然后,您在低维空间中选择几个点,然后您希望能够再次找到原始的高维坐标。
你陈述问题的方式,这是不可能的。每当您在较低维度上进行投影时,您都会丢失与该维度垂直的所有信息。例如,假设您将 3D 点绘制到 2D 平面上。如果您所拥有的只是平面中投影点的位置,那么您无法知道在进行投影之前它离平面有多远。
但是,如果您不丢弃,X
并且Y
一旦计算R
了和它对应的元素,你总是可以使用索引向量来查找你选择的点的坐标。R
R
X
Y
X
Y
因此,您的伪代码看起来像这样
map(X,Y) => R,idx %# idx is optional here if it's just 1:length(X)
[re_ordered_R,re_ordered_idx] = re_order(R,idx); %# idx optional, re_ordered_idx is important
%# find interesting value of R. Interesting_idx shows where the interesting value is in
%# reordered R. An example for this would be [maxVal,maxIdx] = max(re_ordered_R);
[interesting_value_of_R,interesting_idx] = find_interesting_R(re_ordered_R);
%# look up the corresponding X and Y
interesting_X = X(re_ordered_idx(interesting_idx));
编辑
您要么进行投影,要么进行坐标变换。如果您正在进行坐标变换,则很容易反转映射。如果您正在进行投影,则没有取消映射功能。
在任何一种情况下,只要您跟踪索引,即只要您知道X
第 i 个条目中的哪个条目R
对应于哪个条目,您的问题就解决了。
映射到曲线上很可能是一种投影。假设您要将定义的曲线映射y=x.^2
到曲线上y1=x1
。在这种情况下,您会将第一条曲线的每个点映射到第二条曲线上最近的点。然而,即使y1=x1
是在 2D 中定义的曲线,曲线本身也是 1D 空间。因此,一个点[0,0]
和一个点都[-1,1]
将映射到第二条曲线上的同一点,并且无法判断它们最初离第二条曲线有多远。
编辑 2
如果您有两个同心环,例如通过将其投影到两个环之间的内侧曲线上来映射到一个同心环,那么您也在进行投影。您将无法分辨出这两个环最初距内侧曲线有多远。
但是,为什么要使用傅里叶变换来查找对象边界?是否可以使用edge
(在过滤图像之后)或bwboundaries
(在对图像进行阈值处理之后)?