在影象處理中,得到目標邊緣的點,希望擬合精確的直線方程,一下**給出一些二維點,即可輸出直線方程,精確到亞畫素級:
//求直線方程
struct ptonline
;bool cmpacs(ptonline &a, ptonline &b)
void removeptx(vector&points, double smallpart, double bigpart)//對x座標從大到小排列,smallpart為尾部的點集,bigpart為首部的點集
sort(vecline.begin(), vecline.end(), cmpacs);
points.clear();
for (int i = removenum1; i < vecline.size() - removenum2; i++)
}void removepty(vector&points, double smallpart, double bigpart)//對y座標從大到小排列,smallpart為尾部的點集,bigpart為首部的點集
sort(vecline.begin(), vecline.end(), cmpacs);
points.clear();
for (int i = removenum1; i < vecline.size() - removenum2; i++)
}bool linefit(vectorrec, double &a1, double &b1, double &c1)
for (int i = 0; i < size; i++)
}if (count == size)
double a = 0, b = 0, c = 0;
if (size < 2)
double x_mean = 0;
double y_mean = 0;
for (int i = 0; i < size; i++)
x_mean /= size;
y_mean /= size; //至此,計算出了 x y 的均值
double dxx = 0, dxy = 0, dyy = 0;
for (int i = 0; i < size; i++)
double lambda = ((dxx + dyy) - sqrt((dxx - dyy) * (dxx - dyy) + 4 * dxy * dxy)) / 2.0;
double den = sqrt(dxy * dxy + (lambda - dxx) * (lambda - dxx));
a = dxy / den;
b = (lambda - dxx) / den;
c = -a * x_mean - b * y_mean;
for (int i = 0; i1.5)
}vectorrecnew(size);
for (int i = 0; i < size; i++)
if (size < 2)
double x_mean1 = 0;
double y_mean1 = 0;
for (int i = 0; i < size; i++)
x_mean1 /= size;
y_mean1 /= size; //至此,計算出了 x y 的均值
double dxx1 = 0, dxy1 = 0, dyy1 = 0;
for (int i = 0; i < size; i++)
double lambda1 = ((dxx1 + dyy1) - sqrt((dxx1 - dyy1) * (dxx1 - dyy1) + 4 * dxy1 * dxy1)) / 2.0;
double den1 = sqrt(dxy * dxy + (lambda - dxx) * (lambda - dxx));
a1 = dxy1 / den1;
b1 = (lambda1 - dxx1) / den1;
c1 = -a1 * x_mean1 - b1 * y_mean1;
return true;
}
求直線的引數方程
如果二維空間內有兩個點 2,1 和 0,2 那麼經過這兩點的直線方程是什麼?初中的知識可以告訴我們,斜率是 k displaystyle frac 現在使用向量和引數方程來理解這個問題。假設在二維空間內有兩個向量 a 2,1 和 b 0,2 如下圖所示 乙個不太準確的說法是,將 b a 的兩端延長,...
一般方程與引數方程求直線交點
一 乙個例子 如上圖,有兩條直線,設l1,l2。l1上有兩點 0,0 10,10 l2上有兩點 0,10 10,0 它們的交點是 5,5 求解交點有兩種效率較高的常用方法,一般方程法與引數方程法,以下將分別描述其原理及實現。二 一般方程法 直線的一般方程為f x ax by c 0。既然我們已經知道...
C 求直線方程並求直線延長線上的某點的演算法
a1 a2 b1 b2 c1 c2 兩直線平行 a1 a2 b1 b2 c1 c2 兩直線重合 橫截距a c a 縱截距b c b 表示斜率為k,且過 x0,y0 的直線 表示與x軸 y軸相交,且x軸截距為a,y軸截距為b的直線 表示斜率為k且y軸截距為b的直線 表示過 x1,y1 和 x2,y2 ...