数字图像的坐标系
数字图像,也称为数字图像或数字图像,是使用有限数值像素的二维图像的表示。 用数组或矩阵表示。 其坐标系与平面坐标系的定义不同。 每个像素的坐标(u,v)分别是该像素在阵列中的列数和行数。 因此(u,v)是以像素(Pixel)为单位的像素坐标系坐标。 X轴从坐向右为正,Y轴从上到下为正,原点为左上角的(0,0)位置;? ? ?
对于给定的N个点,是否存在三个共线点以及如何将它们拟合成一条直线?
在图像处理中,通常可以获得图像的一系列点,例如边缘和轮廓。 那么如何判断这些点是否是直线呢?
如图所示:找出图中的几对平行线;
问题描述:假设已知点A、B、C、D,尝试找出一对相互平行的平行线,即(AB||CD)和(AD||BC)
解法:利用平行线的垂直性,根据平行线的定义图中的平行直线表示一簇,我们知道,若直线AB与直线CD平行,则直线AB中任一点到直线CD的垂直距离相等。 根据上一篇文章(1)我们可以知道,点到直线距离的计算公式为:
假设A点和B点组成的直线方程为A*X+B*Y+C = 0; 分别求C点和D点到直线AB的垂直距离。 如果它们的距离相等,则C点和D点组成的直线与AB平行。 这样就找到了一组平行对。 特别是,如果计算出的距离为0,则认为这些点在直线上。 在这种情况下,它们被认为不平行;
对于给定的 N 个点,对这些点进行排序
问题描述:已知多边形点集C={P1,P2,...,PN}是无序排列的,需要对点集进行排序。
求解方法:利用向量的叉积,具体推导见(2)。
极角的定义:是指以x轴的正半轴为起始边,建立极坐标,逆时针旋转的角度。 这个角度的范围是[0,2π]。
因此,点集的排序问题可以理解为:分别求出每个点的极角,然后根据极角的大小进行排序。 (特别地,你可以设置一个矢量OP
算法流程:
①将所有点放在二维坐标系中,那么纵坐标最小的点一定是凸包上的点,如图中A所示。 ③计算各点相对于A的角度α,并将各点按从小到大的顺序排序。 当α相同时,离P较近的排在第一位。 例如上图得到的结果为P、C、B、D、E。
对于给定的N个点,这N个点组成的多边形是凸多边形吗?
凸包是计算几何(图形)中的概念。 点集Q的凸包(hull)是指一个最小凸多边形,使得Q中的点要么在多边形边上,要么在多边形内。 如图所示,黑色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。
解决方法:(Scan方法)如图:
算法流程为:
对所有点进行排序,使用上面介绍的方法对点进行排序;
② 对于排序后的点,如果两个相邻点组合成一条边,则边搜索符合左手判断:
如果它与前一条边具有左手关系,则它不是凸包上的点,否则它是凸包上的点。
如上图所示,E点可以通过左转向量ED得到,因此E不是凸包上的点。
如上图所示,将向量GF右转至GH即可得到点G,因此G是凸包上的点;
功能于:
void cv::convexHull ( InputArray points,OutputArray hull,bool clockwise = false,bool returnPoints = true )
参数说明
:输入二维点集,Mat类型数据即可
hull:输出参数,用于输出函数调用后找到的凸包
:操作方向。 当标识符为真时,输出凸包为顺时针方向,否则为逆时针方向。
:操作标识符。 默认值是true。 在这种情况下,返回每个凸包的每个点。 否则,返回凸包每个点的索引。 当 std:: 作为数组输出时图中的平行直线表示一簇,该标识符被忽略。
给定N个顶点,对于给定点P,判断P是否在多边形内部(P是否是边界上的点)
功能:
double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)
用于测试一个点是否在多边形内
①设置为true时,返回实际距离值。 如果返回值为正,则表示该点在多边形内部,如果返回值为负,则表示该点在多边形外部,如果返回值为0,则表示该点在多边形上。
②设置为false时,返回-1、0、1三个固定值。 如果返回值为+1,则表示该点在多边形内部,如果返回值为-1,则表示该点在多边形外部,如果返回值为0,则表示该点在多边形上。
对于给定的多边形,求面积
问题描述:点集C={P1,P2,...,PN}已知,并在平面上有序排列。 如何求点集包围的多边形的面积?
求解方法:利用向量的叉积,具体推导见(2)。
如图所示,点P1、P2、P3、P4、P5是平面上的五个点,O点是原点。 找到该区域。
由向量叉积的定义可知:
从上面的表达式我们可以知道,假设已知N个点,通过计算这N个点的叉积就可以得到封闭多边形的面积。
功能于:
double contourArea(InputArray contour, bool oriented=false )
:输入点通常是图像的轮廓点。
bool =false:顺时针或逆时针,一般默认选择false
返回值:表示轮廓在某个方向上的面积值,
参考
线段叉积【计算几何】多边形点集排序【】凸包算法求凸包P3829【】信用卡凸包【计算几何】多边形相交