日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目实战 五 拟合直线 获得中线

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目实战 五 拟合直线 获得中线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

? ? ? ? 項目中常見的最常見的擬合一般多是擬合直線和擬合圓,但是我個人最初在自學halcon 的時候總是一看到類似直線的東西就直接擬合,一看到類似圓的東西就直接擬合圓,但是我們在做項目的時候要有很多的禁忌,要考慮到很多的東西,所以要讓算法有更強的兼容性,下面我們來一起看一這個擬合直線如何擬合:

1、傳入一張圖片,和一個ROI

2、使用二維卡尺找出擬合直線的點(這一步很重要)

3、從第二步的點來擬合圓,但是我們會設點一個點到直線的最小距離,用這個距離來判斷直線的擬合優越性,刪除掉一些到跳點,防止一些個別點導致擬合直線不理想的問題

4、輸出

從上面我們可以得到一條 或者多條直線,那如果是求出兩條直線的中線,如何來求呢?

1 、首先傳入兩條中線

2、判斷這兩天直線的角度以及這兩天直線是不是相交

3、如果相交,求直線上(線段的端點)在另外一條直線上的投影點,直接取中點,同理求另外一個端點的投影,求中點,連起來就是中線

4、如果有相交,那么這個就比較復雜點,首先我們要計算兩個端點(直線出入的端點)到2 中計算得出的點到點的距離d1 d2

5、然后以2中的交點(假設r,c)r,c,d1 以及r,c,d2畫圓,然后計算另外一條直線與這兩個圓之間的交點

6、上圖中的兩個端點就是我們最想要的兩個點?

7、最后輸出

二、擬合直線

核心代碼:?

* 使用二維測量來找點create_metrology_model (MetrologyHandle)*設置句柄模型的大小set_metrology_model_image_size (MetrologyHandle, Width, Height)add_metrology_object_generic (MetrologyHandle, 'line', [Row1,Col1,Row2,Col2], Len2[Len2Index], RectWidth[RectWidthIndex], Sigma[SigmaIndex], Threshold[ThresholdIndex], [], [], temp)* 設置參數set_metrology_object_param (MetrologyHandle, 'all', ['measure_transition','num_measures','measure_select'], [Transtion[TransitionIndex], Count[CountIndex], Select[SelectIndex]])* set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', Select[SelectIndex]) *使用參數apply_metrology_model (Image, MetrologyHandle)* 得到結果get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Rows, Columns)gen_cross_contour_xld (Cross1, Rows, Columns, 6, 0.78)clear_metrology_model (MetrologyHandle)*擬合直線fit_line_contour_xld (Contour, 'drop', -1, 0, 5, 2, TempRowBegin, TempColBegin, TempRowEnd, TempColEnd, TempNr, TempNc, TempDist)* 計算擬合的直線和點之間的距離distance_pl (Rows, Columns, TempRowBegin, TempColBegin, TempRowEnd, TempColEnd, Distance)tuple_max (Distance, Max)* 在聯系的刪除點中是不是有足夠的點來擬合* 刪除max/2的點if(Max < MinDist[MinDistIndex])breakendif* 刪除不符合點到直線距離的點tuple_less_elem (Distance, Max/2, Less)tuple_find (Less, 0, Indices)tuple_remove (Rows, Indices, ValidRows)tuple_remove (Columns, Indices, ValidCols)

三、獲得中線

核心代碼:

*求直線和圓的交叉點gen_circle_contour_xld (ContCircle, Row, Column, Distance1, 0, 6.28318, 'positive', 1)gen_circle_contour_xld (ContCircle2, Row, Column, Distance2, 0, 6.28318, 'positive', 1)intersection_line_circle (line2[0], line2[1], line2[2], line2[3], Row, Column, Distance1, 0, 6.28318, 'positive', Row1, Column1)intersection_line_circle (line2[0], line2[1], line2[2], line2[3], Row, Column, Distance2, 0, 6.28318, 'positive', Row2, Column2)* 顯示交點

總結

以上是生活随笔為你收集整理的项目实战 五 拟合直线 获得中线的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。