【问题标题】:Constrained high order polynomial regression约束高阶多项式回归
【发布时间】:2015-08-31 19:16:12
【问题描述】:

我正在做一些骨骼分割,而分割的结果是围绕该骨骼以圆形图案放置的点。然而,由于它是使用 qCT 扫描进行的,所以我所拥有的点上有很多噪音(例如来自肉体)。所以整体的问题是如何去除这些噪音。

我目前正在做的是将其转换为移位数据上的极坐标,这样我就可以根据角度获得从骨骼中心到点的距离数据。

[THETA,RHO] = car2pol(N(1,:),N(2,:),center);
[THETA, id] = unique(THETA);

获得这些数据后,我会进行高阶 (30) 多项式回归,它可以很好地消除噪声并产生漂亮的平滑曲线。

[p,~,mu] = polyfit(THETA,RHO,30);
RHO = polyval(p,THETA,[],mu); 

然后我将其转换回笛卡尔坐标:

[x,y] = pol2car(THETA,RHO,center);

我这里唯一的问题是回归后起点和终点不一定是同一点,它们应该是。所以我的问题是,你能做某种类型的约束多项式回归,我可以强制第一个点的 y 值与另一个端点的 y 值具有相同的值吗?或者有没有其他方法可以做到这一点?

【问题讨论】:

  • 没有数值工作示例很难说,但它与 THETA 的相位环绕有关吗?另外,为什么边界点应该具有相同的 y 值?
  • 因为角度-pi的中心到点的距离应该与角度pi的中心到点的距离相同。我只是在极坐标中工作以平滑数据,然后我想回到笛卡尔坐标,但如果端点不一样,那么曲线在那一点就不平滑。

标签: matlab regression


【解决方案1】:

我会推荐傅立叶回归,而不是多项式回归,即

rho = a0 + a1 * cos(theta) + a2 * cos(2*theta) + a3 * cos(3*theta) + ...
           b1 * sin(theta) + b2 * sin(2*theta) + b3 * sin(3*theta) + ...

例如,给出以下几点

>> plot(x, y, '.')

你可以转换成极坐标

>> [theta, r] = cart2pol(x, y);

并创建一个正弦和余弦数组

>> X = ones(size(theta, 1), 1);
>> for n = 1:N
       X(:, end+1) = cos(n * theta);
       X(:, end+1) = sin(n * theta);
   end

并运行标准线性回归

>> b = regress(r, X);

然后您可以获取预测并将其转换回笛卡尔坐标来绘制它

>> rhat = X * b;
>> [xhat,yhat] = pol2cart(theta, rhat);

给了

>> plot(x, y, '.');
>> hold on;
>> plot(xhat, yhat, 'r', 'LineWidth', 2)

【讨论】:

  • 这太棒了。但是我不明白为什么这实际上解决了我遇到的问题。为什么总是在同一点开始和结束?
  • 因为所有回归量(cos(theta)、sin(theta) 等)都是周期性的,所以它们在 theta = 0 和 theta = 2*pi 处具有相同的值。
  • 好帖子。谢谢你。 +1。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多