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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

基于Halcon的高精度圆拟合算法思路

發布時間:2023/12/20 ChatGpt 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Halcon的高精度圆拟合算法思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究halcon的圓孔定位四個月了,這里分享一下我的心得,也是備忘

項目描述

  • 圖片尺寸1600*1200
  • 支持任意類型的圓孔檢測
  • 參數:圓的半徑,極性
  • 極性除了內黑外白,內白外黑,還有可能是黑色條帶中心,白色條帶中心
  • 時間:100ms以內
  • 圖像有可能虛焦
  • 用戶給出的直徑有可能有10%的偏差
  • 用戶給的極性可能是錯誤的
  • 圓環周圍可能有干擾邊緣,但必須找到最精準邊緣
  • 容差:2個像素以內
  • 寧可拒報,不允許誤報
  • Halcon圓檢測相關方法

    方法描述缺點比較好用的算子
    區域分割直接用對比度分割出關鍵的圓形當圓環和周圍顏色相近時,直接罷工segment_image_mser
    邊緣分析提取圖像中的關鍵邊緣,找到可能是圓弧的部分,拼接成一條完整圓弧,然后擬合平滑后的精度低,不平滑圖像中有很多零散圓弧干擾edges_sub_pix
    霍夫變換通過沿著區域點畫圓,找到大概率是圓心的區域當參數半徑和實際偏差較大時,得到的區域不準確hough_circle_trans
    二維邊緣測量在圓周一圈找閾值峰值點,用這些點進行擬合有圖像可能存在非常多的干擾峰值add_metrology_object_circle_measure
    NCC模板匹配基于模板和圖像的偏差當圖像圓中有復雜圖像時,無法找到結果find_ncc_models
    形狀模板匹配基于模板的邊緣對比度較差的圖像需要調低得分,但低得分容易帶來錯誤結果find_shape_models
    梯度圖關鍵點擬合先找到梯度圖中可能是圓弧的點,再用這些點進行擬合找的點不準確容易有偏差edges_image, fit_circle_contour_xld

    算法步驟
    通常,我們進行兩次定位

  • 粗定位:目的是獲得圓的大致位置,然后可以用reduce_domain縮小圖像范圍(減少精定位時間),粗定位有很多好用的方法,但是都有其局限性,這里就不贅述。
  • 精定位:為的是能找到更精確的邊緣,得到更高精度的結果
  • 算法描述
    因為遇到了很多糟心的圖片,所以樓主的算法也相應比較復雜
    下面是簡單的描述:

    • 粗定位 :
      1. create_shape_model 共需兩個模板,金字塔層數設為2(1太耗時,3以上有可能找不到目標圓),一個ignore_global_polarity,一個ignore_local_polarity,最好保存模板,因為生成模板是很耗時的操作
      2. 第一次 find_shape_models 找ignore_global_polarity的模板,分數0.8,個數5,不允許重疊
      3. 第二次 find_shape_models(第一次沒找到才需要) 找ignore_local_polarity的模板,分數0.8,個數5,不允許重疊
      4. 第三次 find_shape_models 平滑圖像(第二次沒找到才需要),找ignore_global_polarity的模板,分數0.8,個數5,不允許重疊
      注意:三次有任何一次有結果就可以直接作為粗定位結果,接下來對找到的結果逐個分析
    • 精定位 :
    • 預處理:
      reduce_domain 縮小范圍
      edges_image 獲取梯度圖,方向圖

    • 獲取梯度方向偏差圖片:
      因為圓環的梯度方向都是統一的,類似如下的圖片(有可能需要旋轉),我們可以用得到的梯度方向圖減去下圖,就可以得到梯度方向偏差圖,其中灰度接近0的點就是我們所需要的關鍵點

    • 對梯度方向偏差圖做極大值抑制,得到Image_Result
      nonmax_suppression_dir 這樣可以獲得最可能是圓周的邊緣點集

    • 找條帶邊緣
      find_shape_models 找梯度方向偏差圖的邊緣,極性ignore_global_polarity,分數0.8,只找最高分的結果,這個結果就是我們所需的邊緣

    • 對條帶邊緣做精擬合
      因為shape_model得到的結果不穩定,在邊緣有毛刺時容易有細微的偏差,所以我在這個結果周圍找到Image_Result中的關鍵點進性擬合

    • 找邊緣結果
      find_shape_models 找原圖的reduce_domain圖的邊緣,極性ignore_global_polarity,分數0.8,只找最高分的結果,這個結果就是我們所需的邊緣
      注意:如果粗定位使用了平滑,那這里也需要平滑,因為圖像可能存在很多噪點、條紋的干擾

    • 對原始邊緣做精擬合
      因為shape_model得到的結果不穩定,容易有細微的偏差,所以我在這個結果周圍找到Image_Result中的關鍵點進性擬合

    • 仍未找到目標圓的情況
      如果還沒找到圓,有兩種可能,
      1:圖像很差
      2:客戶的直徑或極性輸錯了

    • 權重定位法
      因為客戶給出的直徑有可能是錯誤,所以這里我使用過程中得到的半徑作為目標分析,而不再使用客戶給出的直徑,這樣也可以提高對不良結果的過濾。
      注意:精定位可以直接使用權重定位法,跳過上面的條帶結果和邊緣結果分析,但這樣遇到多層圓環時,容易帶來一半內環,一半外環的問題。

    • 得到關鍵點
      對Image_Result使用get_region_points,注意嚴格區分正負極性,分開分析

    • 給關鍵點賦予權重
      Weight = Amp (點的梯度) / Dist (點到圓心和理論直徑的偏差)
      注意:權重還可以添加很多要素,比如圓周的灰度一致性,梯度方向一致性等,這里只是個例子

    • 二值分割
      過濾出最權重較為顯著的點,構成contour,過濾掉circularity較低的結果

    • 擬合成圓
      fit_circle_contour_xld

    總結

    以上是生活随笔為你收集整理的基于Halcon的高精度圆拟合算法思路的全部內容,希望文章能夠幫你解決所遇到的問題。

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