1. 程式人生 > >Halcon一維測量1D Measuring解析

Halcon一維測量1D Measuring解析

一維測量(也叫一維計量或卡尺)的概念非常直觀。沿著一個預定的區域(主要是垂直於RIO感興趣區域的方向) 邊緣的位置。這裡的邊緣為從暗到亮或從亮到暗的過渡。 基於提取的邊緣,可以測量零件的尺寸。例如,可以測量 ROI內零件的寬度,並將邊緣定位在其左右兩側。 除了這些簡單的矩形ROI外,圓弧也可以用來測量,例如,齒輪上的齒輪寬度。 這種測量方法的優點是使用方便,執行時間短,而且有很高的的精度。只需幾個操作符,就可以實現高效能的應用。 另外,也可以使用HDevelop的測量助手,只需點選幾下滑鼠就可以進行測量。 # 基本概念 測量包括以下幾個主要步驟: ## 獲取影象 ## 建立測量物件 在獲取影象後,可以指定測量的位置,即描述要測量的線或弧的位置、方向等。 可以通過使用控制代碼handle來訪問測量物件。類似於檔案控制代碼,在使用該工具時需要這個控制代碼。每次執行測量時,這個控制代碼都會作為引數傳遞。 在像C++這樣的面向物件的語言中,可以使用measure類來代替使用控制代碼的低階方法。在這裡,用標準的面向物件方法實現建立和銷燬。 ## 測量 然後,可以通過指定測量物件和一些視覺引數,如最小對比度來應用測量。 # 擴充套件概念 在許多情況下,測量應用會比上面描述的更復雜,例如雜亂或不均勻的照明。此外,還可能要將特徵轉化為現實世界的單位,或將結果視覺化。 ## 衍射校準影象 為了進行高精度的測量,攝像機應該具有線性響應函式,即影象中的灰度值應該線性地取決於輸入的量。 由於某些相機沒有線性響應函式,因此 HALCON 提供了所謂的衍射校準(灰度值校準)。通過運算元radiometric_self_calibration,可以確定相機的反響應函式(離線),然後在執行測量前使用lut_trans將此函式應用於影象。 ## 對準ROI或影象 在某些應用中,要測量的直線或弧線必須相對於另一個物件對齊以方便測量。 ## 矯正影象 與對準類似,可能需要對影象進行修正,例如,消除鏡頭變形。 ![](https://img2020.cnblogs.com/blog/1570888/202007/1570888-20200709143449429-957207286.png) ## 建立測量物件 你可以用像draw_rectangle2這樣的操作符互動式地測量線或弧線,或者從檔案中讀取它的引數(read_string)。作為另一種選擇,它的座標可以基於其他視覺工具如Blob Analysis的結果生成 。特別是在測量線或弧線可能需要對準某個物件的時候。 如果總是沿著同一條線或弧線進行測量,可以離線建立測量物件,然後多次使用它。 如果要對齊測量,每個影象的線或弧的位置和方向將有所不同,在這種情況下,必須為每個影象建立一個新的測量物件。這個規則的一個例外是隻有位置改變而沒有方向改變,可以保留測量物件,並通過 translate_measure 調整其位置。 ## 將結果轉化為世界座標 如果已經校準了視覺系統,可以直接用image_points_to_world_plane將測量結果轉化為世界座標。 ## 結果視覺化 視覺化邊緣位置的最好方法是使用gen_contour_polygon_xld等運算子建立(短)XLD線段。 # 涉及運算元 ## 獲取影象 ## 衍射校準影象 基礎:radiometric_self_calibration(校驗徑向畸變), lut_trans(用灰度值查詢表變換影象) ## 對準ROI或影象 ## 矯正影象 ## 建立測量物件 基礎:gen_measure_rectangle2(提取垂直於矩形的直邊), gen_measure_arc(提取垂直於環形弧線的直邊), translate_measure(轉換測量物件) ## 測量 基礎:measure_pos(測量垂直於矩形或圓弧的直邊), measure_pairs(測量垂直於矩形或圓弧的直邊對) 進階:set_fuzzy_measure(指定模糊函式), fuzzy_measure_pos((通過指定模糊函式測量垂直於矩形或圓弧的直邊), fuzzy_measure_pairs, fuzzy_measure_pairing(可以使用引數Pairing來測量交錯對和包含對) ## 把結果轉化為世界座標 基礎:image_points_to_world_plane 進階:gen_contour_region_xld, contour_to_world_plane_xld ## 結果視覺化 進階:gen_contour_polygon_xld # 一維測量的替代方法 ## 邊緣提取(亞畫素精度) 測量邊緣引數的一個非常好的方法是用edges_sub_pix提取邊緣輪廓。這種方法的優點是它可以處理任意形狀。此外,它可以確定每個邊緣點的屬性,如邊緣方向。 # 小技巧 ## 抑制雜物或噪音 在許多應用中,一些雜物或噪音必須被抑制。測量運算子提供了多種方法來實現。最好的是提高邊緣提取的閾值,以消除模糊的邊緣。此外,平滑引數的值可以增加,以平滑不相關的邊緣。 當將邊緣分組為對時,如果噪聲邊緣在 "真實 "邊緣的附近並且具有相同的極性,則可能導致不正確的分組。在這種情況下,可以通過只選擇連續上升和下降邊緣序列中最強的邊緣來抑制噪聲邊緣。 ## 重用測量物件 因為建立一個測量物件需要一些時間,所以建議在有可能的情況下重複使用它們。例如,如果不需要對齊,可以離線建立測量物件,並重復使用該物件。如果對齊只涉及到轉換,那麼 translate_measure 可以用來修正位置。 ## 使用絕對灰度值閾值 作為邊緣提取的替代方法,可以使用操作符 measure_thresh 根據絕對灰度值閾值進行測量,可以使所有灰度值超過給定閾值的位置都會被選中。 # 高階 ## 模糊測量 如果存在不屬於測量範圍的額外邊緣,HALCON提供了一個擴充套件版本的測量:模糊測量。 這個工具允許定義所謂的模糊規則,它描述了更好的邊緣特徵。可能的特徵有位置、距離、灰度值或邊緣的振幅。這些函式通過create_funct_1d_pairs建立,並通過set_fuzzy_measure傳遞給工具。基於這些規則,工具將選擇最合適的邊緣。 這種方法的優點是即使使用很低的最小閾值或平滑,也能靈活處理額外的邊緣。 ## 灰度值的評估 要完全控制沿測量線或弧線的灰度值的評估,可以使用 measure_projection。該操作符以數字陣列的形式返回投影的灰度值,然後可以使用 HALCON 操作符進一步處理元組或函式。 具體專案案例下次再為大