eri*_*isu 12 c math geometry image-processing
已经创建了Hough变换的c ++实现来检测图像中的线条.使用rho,theta表示找到的行,如维基百科所述:
"参数r表示直线与原点之间的距离,而θ是从原点到该最近点的矢量角度"
如何使用r,θ描述两条线的x,y空间中的交点?
这里参考我目前用于转换进出霍夫空间的函数:
//get 'r' (length of a line from pole (corner, 0,0, distance from center) perpendicular to a line intersecting point x,y at a given angle) given the point and the angle (in radians)
inline float point2Hough(int x, int y, float theta) {
return((((float)x)*cosf(theta))+((float)y)*sinf(theta));
}
//get point y for a line at angle theta with a distance from the pole of r intersecting x? bad explanation! >_<
inline float hough2Point(int x, int r, float theta) {
float y;
if(theta!=0) {
y=(-cosf(theta)/sinf(theta))*x+((float)r/sinf(theta));
} else {
y=(float)r; //wth theta may == 0?!
}
return(y);
}
Run Code Online (Sandbox Code Playgroud)
如果这是明显的事情,请提前抱歉..
eri*_*isu 10
之前从未遇到过矩阵数学,因此需要进行一些研究和实验来确定Fredrico答案的进展情况.谢谢,无论如何都需要了解矩阵.^^
函数找到两个参数化线相交的位置:
//Find point (x,y) where two parameterized lines intersect :p Returns 0 if lines are parallel
int parametricIntersect(float r1, float t1, float r2, float t2, int *x, int *y) {
float ct1=cosf(t1); //matrix element a
float st1=sinf(t1); //b
float ct2=cosf(t2); //c
float st2=sinf(t2); //d
float d=ct1*st2-st1*ct2; //determinative (rearranged matrix for inverse)
if(d!=0.0f) {
*x=(int)((st2*r1-st1*r2)/d);
*y=(int)((-ct2*r1+ct1*r2)/d);
return(1);
} else { //lines are parallel and will NEVER intersect!
return(0);
}
}
Run Code Online (Sandbox Code Playgroud)