數(shù)字圖像的坐標(biāo)系
數(shù)字圖像,也稱(chēng)為數(shù)字圖像或數(shù)字圖像,是使用有限數(shù)值像素的二維圖像的表示。 用數(shù)組或矩陣表示。 其坐標(biāo)系與平面坐標(biāo)系的定義不同。 每個(gè)像素的坐標(biāo)(u,v)分別是該像素在陣列中的列數(shù)和行數(shù)。 因此(u,v)是以像素(Pixel)為單位的像素坐標(biāo)系坐標(biāo)。 X軸從坐向右為正,Y軸從上到下為正,原點(diǎn)為左上角的(0,0)位置;? ? ?
對(duì)于給定的N個(gè)點(diǎn),是否存在三個(gè)共線點(diǎn)以及如何將它們擬合成一條直線?
在圖像處理中,通常可以獲得圖像的一系列點(diǎn),例如邊緣和輪廓。 那么如何判斷這些點(diǎn)是否是直線呢?
如圖所示:找出圖中的幾對(duì)平行線;
問(wèn)題描述:假設(shè)已知點(diǎn)A、B、C、D,嘗試找出一對(duì)相互平行的平行線,即(AB||CD)和(AD||BC)
解法:利用平行線的垂直性,根據(jù)平行線的定義圖中的平行直線表示一簇,我們知道,若直線AB與直線CD平行,則直線AB中任一點(diǎn)到直線CD的垂直距離相等。 根據(jù)上一篇文章(1)我們可以知道,點(diǎn)到直線距離的計(jì)算公式為:
假設(shè)A點(diǎn)和B點(diǎn)組成的直線方程為A*X+B*Y+C = 0; 分別求C點(diǎn)和D點(diǎn)到直線AB的垂直距離。 如果它們的距離相等,則C點(diǎn)和D點(diǎn)組成的直線與AB平行。 這樣就找到了一組平行對(duì)。 特別是,如果計(jì)算出的距離為0,則認(rèn)為這些點(diǎn)在直線上。 在這種情況下,它們被認(rèn)為不平行;
對(duì)于給定的 N 個(gè)點(diǎn),對(duì)這些點(diǎn)進(jìn)行排序
問(wèn)題描述:已知多邊形點(diǎn)集C={P1,P2,...,PN}是無(wú)序排列的,需要對(duì)點(diǎn)集進(jìn)行排序。
求解方法:利用向量的叉積,具體推導(dǎo)見(jiàn)(2)。
極角的定義:是指以x軸的正半軸為起始邊,建立極坐標(biāo),逆時(shí)針旋轉(zhuǎn)的角度。 這個(gè)角度的范圍是[0,2π]。
因此,點(diǎn)集的排序問(wèn)題可以理解為:分別求出每個(gè)點(diǎn)的極角,然后根據(jù)極角的大小進(jìn)行排序。 (特別地,你可以設(shè)置一個(gè)矢量OP
算法流程:
①將所有點(diǎn)放在二維坐標(biāo)系中,那么縱坐標(biāo)最小的點(diǎn)一定是凸包上的點(diǎn),如圖中A所示。 ③計(jì)算各點(diǎn)相對(duì)于A的角度α,并將各點(diǎn)按從小到大的順序排序。 當(dāng)α相同時(shí),離P較近的排在第一位。 例如上圖得到的結(jié)果為P、C、B、D、E。
對(duì)于給定的N個(gè)點(diǎn),這N個(gè)點(diǎn)組成的多邊形是凸多邊形嗎?
凸包是計(jì)算幾何(圖形)中的概念。 點(diǎn)集Q的凸包(hull)是指一個(gè)最小凸多邊形,使得Q中的點(diǎn)要么在多邊形邊上,要么在多邊形內(nèi)。 如圖所示,黑色線段表示的多邊形就是點(diǎn)集Q={p0,p1,...p12}的凸包。
解決方法:(Scan方法)如圖:
算法流程為:
對(duì)所有點(diǎn)進(jìn)行排序,使用上面介紹的方法對(duì)點(diǎn)進(jìn)行排序;
② 對(duì)于排序后的點(diǎn),如果兩個(gè)相鄰點(diǎn)組合成一條邊,則邊搜索符合左手判斷:
如果它與前一條邊具有左手關(guān)系,則它不是凸包上的點(diǎn),否則它是凸包上的點(diǎn)。
如上圖所示,E點(diǎn)可以通過(guò)左轉(zhuǎn)向量ED得到,因此E不是凸包上的點(diǎn)。
如上圖所示,將向量GF右轉(zhuǎn)至GH即可得到點(diǎn)G,因此G是凸包上的點(diǎn);
功能于:
void cv::convexHull ( InputArray points,OutputArray hull,bool clockwise = false,bool returnPoints = true )
參數(shù)說(shuō)明
:輸入二維點(diǎn)集,Mat類(lèi)型數(shù)據(jù)即可
hull:輸出參數(shù),用于輸出函數(shù)調(diào)用后找到的凸包
:操作方向。 當(dāng)標(biāo)識(shí)符為真時(shí),輸出凸包為順時(shí)針?lè)较?,否則為逆時(shí)針?lè)较颉?span style="display:none">WhG物理好資源網(wǎng)(原物理ok網(wǎng))
:操作標(biāo)識(shí)符。 默認(rèn)值是true。 在這種情況下,返回每個(gè)凸包的每個(gè)點(diǎn)。 否則,返回凸包每個(gè)點(diǎn)的索引。 當(dāng) std:: 作為數(shù)組輸出時(shí)圖中的平行直線表示一簇,該標(biāo)識(shí)符被忽略。
給定N個(gè)頂點(diǎn),對(duì)于給定點(diǎn)P,判斷P是否在多邊形內(nèi)部(P是否是邊界上的點(diǎn))
功能:
double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)
用于測(cè)試一個(gè)點(diǎn)是否在多邊形內(nèi)
①設(shè)置為true時(shí),返回實(shí)際距離值。 如果返回值為正,則表示該點(diǎn)在多邊形內(nèi)部,如果返回值為負(fù),則表示該點(diǎn)在多邊形外部,如果返回值為0,則表示該點(diǎn)在多邊形上。
②設(shè)置為false時(shí),返回-1、0、1三個(gè)固定值。 如果返回值為+1,則表示該點(diǎn)在多邊形內(nèi)部,如果返回值為-1,則表示該點(diǎn)在多邊形外部,如果返回值為0,則表示該點(diǎn)在多邊形上。
對(duì)于給定的多邊形,求面積
問(wèn)題描述:點(diǎn)集C={P1,P2,...,PN}已知,并在平面上有序排列。 如何求點(diǎn)集包圍的多邊形的面積?
求解方法:利用向量的叉積,具體推導(dǎo)見(jiàn)(2)。
如圖所示,點(diǎn)P1、P2、P3、P4、P5是平面上的五個(gè)點(diǎn),O點(diǎn)是原點(diǎn)。 找到該區(qū)域。
由向量叉積的定義可知:
從上面的表達(dá)式我們可以知道,假設(shè)已知N個(gè)點(diǎn),通過(guò)計(jì)算這N個(gè)點(diǎn)的叉積就可以得到封閉多邊形的面積。
功能于:
double contourArea(InputArray contour, bool oriented=false )
:輸入點(diǎn)通常是圖像的輪廓點(diǎn)。
bool =false:順時(shí)針或逆時(shí)針,一般默認(rèn)選擇false
返回值:表示輪廓在某個(gè)方向上的面積值,
參考
線段叉積【計(jì)算幾何】多邊形點(diǎn)集排序【】凸包算法求凸包P3829【】信用卡凸包【計(jì)算幾何】多邊形相交
