如果需要了解其他影像處理的文章,請移步小編的GitHub地址
傳送門:請點選我
如果點選有誤:https://github.com/LeBron-Jian/ComputerVisionPractice
VisionPro有很多的示例和運算元,這裡展示一個基礎的運算元Polar Unwrap Tool。我自己的筆記不會按照順序一一展示出來的,也許那個文章先OK,我會先release出來的。 其中大部分的圖片和步驟都是VisionPro的官方文件,我這裡只是自己的學習筆記,不做任何商用。
1,VisionPro 介面文件
極軸展開工具編輯控制元件為 PolarUnwrapTool API 提供圖形使用者介面,可用於將包含在定義區域內的圖形部分變換為矩形圖形。該工具生成一個輸出圖形,其中包含輸入區域的變換部分。該編輯控制元件可用於指定取樣模式,縮放因子和要使用的區域形狀型別。
有關該編輯控制元件頂部按鈕的說明,請參見主題控制元件參考。極軸展開工具編輯控制元件支援以下影像緩衝區:
- Current.InputImage 緩衝區包含該工具將分析的下一個影像以及輸入區域的圖形。
- LastRun.InputImage 緩衝區包含由極軸展開工具處理的最後一個影像以及您啟用的任何圖形。
- LastRun.OutputImage 緩衝區包含該工具生成的輸出影像。
1,設定
使用設定選項卡選擇要使用的取樣模式和縮放因子。
使用以下引數配置工具如何展開輸入圖形
2,區域
使用區域選項卡選擇輸入區域的形狀
使用以下引數配置輸入區域
3,圖形
使用圖形選項卡指定該工具生成和顯示的圖形
使用圖形選項卡的以下選項
2,工具原理——使用極軸展開工具展開圓形特徵
極軸展開工具可展開圖形的圓形或橢圓形部分以建立矩形圖形
應用程式通常使用極軸展開工具來建立輸入影像中徑向排列的特徵的直線排列。有關可與極軸展開工具一起使用的影像型別,請參閱主題視覺工具和支援的影像型別。
極軸展開工具透過以下步驟執行圖形變換:
- 1,構造一個變換,將您指定的圓形或者橢圓形環狀截面對映到矩形輸出圖形的邊界
- 2,使用此變換將輸出圖形中畫素的中心對映到輸入圖形中的相應點
- 3,在變換點處對輸入圖形中的畫素進行取樣,以計算輸出影像中的畫素值
2.1 預備知識-影像變換及其取樣
1,圖形變換
將一個圖形變換為另一個圖形的過程首先是在源圖形中定義一個區域,並描述如何將該區域變換為矩形輸出影像。例如,最簡單的影像變換是透過指定輸入影像的矩形部分和恆等變換來建立新的輸出影像,如下圖所示:
上圖中所示的變換在所選區域中的畫素和新影像中的畫素之間具有一一對應關係。然而,其他變換並不那麼簡單。例如,如果提供的矩形輸入區域相對於輸入影像中的畫素旋轉,則不可能簡單地轉錄影素值以建立無旋轉的矩形輸出影像,因為輸出影像中的整個畫素位置與輸入影像中的整個畫素位置之間不存在對應關係。
下圖顯示從旋轉輸入影像生成的輸出影像:
沒有直接對應關係的變換的其他示例包括極軸展開變換(如下圖所示)和棋盤校準工具生成的非線性變換。
2,變換方法
變換影像的而過程可以分為以下步驟:
1,計算將輸入區域對映到輸出影像邊界的數學變換。特定變換取決於需要執行的影像變換型別,下面是仿射變換,該變換選擇輸入影像中的矩形區域以生成輸出影像。
2,使用此變換將輸出影像中每個畫素的中心點對映到其在輸入影像中的相應位置,下圖中的紅色箭頭顯示輸出影像左上角畫素的中心到輸入影像中相應位置的變換。
3,使用本主題後面介紹的取樣方法之一,在變換點對輸入影像中的畫素值進行取樣,並將該值指定給輸出影像中的畫素,該畫素的中心在上一步中確定
3,取樣方法
選擇用於生成輸出影像的取樣方法確定變換後的輸出影像中的畫素值。如下圖所示,取樣點與輸入影像中的畫素不一致:
執行影像變換的視覺工具讓您可選擇取樣方法。您應該試著使用這些方法,確定哪種方法可以在準確性和執行速度之間達到最佳平衡。
4,最近鄰取樣
最近鄰取樣法,如下圖所示,將中心離取樣點最近的畫素的畫素值作為取樣畫素的值:
最近鄰取樣比任何其他取樣方法執行得更快,但它不會產生最準確的變換影像。
5,雙線性插值
雙線性插值取樣方法透過對中心距取樣點最近的四個畫素點的值進行距離加權平均來計算取樣值,如下圖所示:
雙線性插值產生比最近鄰方法更準確的變換,因為它考慮了輸入影像中更多畫素的值。雙線性插值使用以下公式計算取樣值:
其中 a、b、c、d 是下圖所示的四個距離,歸一化使得畫素中心之間的距離為 1,p1、p2、p3 和 p4 是下圖所示的四個畫素的值數字。
6,高精度
高精度取樣方法類似於雙線性插值,不同之處在於它在確定取樣畫素的值時考慮了額外的畫素。
一般來說,高精度插值提供比雙線性插值方法更高的取樣精度,但執行速度較慢。
2.2 輸入區域和變換
極軸展開工具可展開給定的 CircularAnnulusSection 或 EllipticalAnnulusSection 輸入區域,以便變換影像的 x 軸始終對應於該區域的角度方向,而變換影像的 y 軸始終對應於該區域的徑向方向。
RadialScale 和 AngleSpan 屬性的值確定輸出影像中 x 軸和 y 軸與輸入區域中半徑和角度的增減關係,如圖所示:
2.3 輸出影像尺寸(取樣率)
輸入區域中取樣點的數量確定輸出影像的畫素大小。極軸展開工具會自動計算輸出影像的大小,以便最大限度地減少影像畸變。對於圓形輸入區域,預設的 x 軸大小是內外圓弧長度的平均值,預設 y 軸大小是內外半徑的差值,如下圖所示:
對於橢圓輸入區域,預設的 x 軸大小是內外圓弧長度的平均值,預設 y 軸大小是最大和最小內外半徑之差的平均值,如下所示數字:
您可以透過為 ScalingX 和 ScalingY 屬性提供值來指定不同的輸出影像大小。該工具將計算出的輸出影像尺寸乘以您為這些縮放因子指定的值。
3,使用極軸展開工具
極軸展開工具支援最近鄰取樣和雙線性插值。有關使用極軸展開工具的更多資訊,請參閱下列各節:
3.1,變換和座標空間
當在 8 位或 16 位灰度影像上執行極軸展開工具時,該工具會計算將指定的輸入區域對映到矩形輸出影像的高度非線性變換。該工具不會將此變換新增到輸出影像的座標空間樹中。您應該將輸出影像視為新採集的影像。它的當前選定空間總是根(“@”)空間,影像的畫素空間(“#”)和根空間之間的變換總是恆等變換。
極軸展開工具不會讓您直接使用這種非線性變換。但是,您可以使用 GetInputPointFromOutputPoint 和 GetOutputPointFromInputPoint 方法將各個點從輸出影像對映到輸入影像並返回。
8位和16位灰度圖形的區別如下:
3.2 橢圓輸入區
極軸展開工具可以使用圓形或橢圓形環形截面作為其輸入區域。橢圓環形截面的常見用途是從採集影像時處於一定角度的圓形物件展開特徵,如下圖所示
3.3 展開超過360度
使用極軸展開工具可以展開多個整圓。可以透過指定大於 360° 或小於 –360° 的角度跨度來完成此操作。這種情況的一個應用是在事先不知道物件方向的情況下展開文字字串。透過展開 720°,可以確保採集整個字串的連續副本。
下圖顯示如何使用更大的角度跨度來確保輸出影像中包含文字字串的完整副本:
另一個常見的應用是檢測圓形物件中的缺陷,其中物件的方向未知。如果僅將物件展開 360°,則在缺陷位於輸出影像的一端的情況下,可能會遺漏缺陷。透過多展開 10° 到 30°,可以確保無論缺陷的位置如何,都會出現在輸出影像中。
下圖顯示,當缺陷位於角度跨度的起點或終點時,如果指定 AngleSpan 為 360°,則使用斑點工具測量基於面積的缺陷的應用程式是如何失敗的。透過將角度跨度增加到 380°,不再遺漏缺陷:
4,QuickBuild 示例
某些視覺應用程式要求您檢查以圓弧或整圈列印的文字,例如輪胎或醫藥帽。例如,下圖顯示具有曲線文字的零件、要展開的文字區域和展開的文字,然後可以將其傳遞給 OCRMax 或 OCVMax 工具:
下例顯示 QuickBuild 應用程式使用極軸展開工具生成列印在放大鏡表面周圍的文字輸出影像,其中鏡頭從一個影像旋轉到下一個影像,並且文字可能從展開的輸出影像中的任何位置開始。
- 配置 QuickBuild 以採集帶有圓形文字的零件的影像;來自相機或影像資料庫。
- 使用查詢圓工具定位零件,該工具會返回圓心處的 (x, y) 座標,並可用於定位稍後使用的極軸展開工具。
- 將極軸展開工具新增到您的 QuickBuild 應用程式,並將您零件的輸入影像傳遞給它。
- 右鍵單擊極軸展開工具並選擇新增引腳:
- 公開極軸展開區域中心的引數作為 QuickBuild 中的輸入終端:
QuickBuild 現在顯示下列輸入終端:
- 將查詢圓工具找到的圓的 (x,y) 座標連線到極軸展開工具中心的 (x,y) 座標:
- 使用極軸展開編輯控制元件的區域選項卡,使用互動圖形圈住零件上的文字。
將角度跨度設定為 580 以確保輸出影像中出現不間斷的字串。有關配置區域和設定超過 360 度的角度跨度的更多資訊,請參考上面內容
- 執行極軸展開工具並確認生成的展開影像至少包含一個完整的字串例項:
生成的輸出影像可以傳遞給其他工具來分析字串。例如下圖顯示了經過 OCRMax 工具分析後的字串: