0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

halcon圓環(huán)類缺陷檢測的一種方法(極坐標變換法)

新機器視覺 ? 來源:CSDN ? 2023-07-11 15:15 ? 次閱讀

簡介

圓環(huán)類檢測在我們?nèi)粘5娜毕輽z測中經(jīng)常遇到。比如玻璃瓶口的缺陷檢測,硬幣的缺陷檢測,膠墊的缺陷檢測…

我們對于圓環(huán)檢測不像對于矩形等物體的檢測,檢測區(qū)域比較規(guī)整,便于我們使用形態(tài)學對區(qū)域進行篩選,但是圓環(huán)物品我們發(fā)現(xiàn)會出現(xiàn)一些問題,比如使用矩形形態(tài)學會對環(huán)形的邊界處理產(chǎn)生影響等等。在這種情況下我們可以使用極坐標變換的方法,將環(huán)形轉(zhuǎn)換成矩形進而對缺陷進行處理。

極坐標變換

定義

在圖像處理中,尤其是在處理環(huán)形、圓形圖像的過程中,會使用到極坐標變換。將方形圖像轉(zhuǎn)換成圓形,即“方轉(zhuǎn)圓”?;蛘邔崿F(xiàn)圓形轉(zhuǎn)換成方形“圓轉(zhuǎn)方”。

我們把圓形圖像轉(zhuǎn)換成方形圖像的過程稱為圖像的極坐標變換;反之則為圖像的反極坐標變換

原理

極坐標想必學過高中數(shù)學的人都聽過,一般的坐標系中用(x, y)值來描述一個點的位置,而在極坐標系中,則使用到原點的距離ρ和夾角θ來描述該點的位置。

首先,正常的圖像都是在直角坐標系下的,可以看做一個二維平面。我們要對圖像進行坐標變換,首先要把位置轉(zhuǎn)換到新的坐標系,然后將值賦過去。

這里有兩個值需要確定:1.位置 2.值。即變換后任一個像素的值與位置。

這里:變幻后的值不變。即求解變幻的位置關系式。

極坐標變換及其反變換的關鍵在于,根據(jù)極坐標變換前的圖像確定極坐標變換后的圖像上每個像素點的像素值。也即是找到“圓圖”和“方圖”間幾何坐標的對應關系。

證明:

27c1f3f2-1fa3-11ee-962d-dac502259ad0.png

如上圖所示,實現(xiàn)極坐標變換的關鍵即在于找到圓圖上任一點P(i,j),在方圖上對應的點p(m,n),然后通過插值算法實現(xiàn)圓圖上所有像素點的賦值。

方圖上,其行列數(shù)分別為M、N,方圖上的每一列對應為圓圖上的每條半徑,半徑方向存在著一個長度縮放因子delta_r = M/R,圓周方向被分為N等分,即角度因子為delta_t = 2π/N;

圓圖上,圖像坐標(i,j)和世界坐標(x,y)有著如下變換關系:x = j - R, y = R - i;

那么,圖中P點半徑長度為r = sqrt(xx + yy),角度theta = arctan(y/x);

圓圖上點P在方圖上對應行數(shù)為r/delta_r;

圓圖上點P在方圖上對應的列數(shù)n = thata/delta_t。

以上就是極坐標變換的基本原理,結合相應的插值算法,即可實現(xiàn)圖像的極坐標變換。

Halcon中的極坐標變換

在halcon中極坐標變換算子:

polar_trans_image_ext(針對圖像);polar_trans_region(針對區(qū)域);polar_trans_contour_xld(針對XLD輪廓)。

在halcon中反極坐標變換算子:

polar_trans_image_inv(針對圖像);polar_trans_region_inv(針對區(qū)域);polar_trans_contour_xld_inv(針對XLD輪廓)。

1、polar_trans_image_ext算子用法與參數(shù)剖析

算子原型:

polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

參數(shù)說明:

Image (input_object)(多通道)圖像(-array)→對象(byte * / int2 * / uint2 * / real *)*允許計算設備

輸入圖像。

PolarTransImage(output_object)(多通道)圖像(-array)→對象(字節(jié)/ int2 / uint2 /實數(shù))

輸出圖像。

Row(input_control)編號→(實數(shù)/整數(shù))

圓弧中心的行坐標。

默認值:256

建議值:0、16、32、64、128、240、256、480、512

Column(input_control)號→(實數(shù)/整數(shù))

圓弧中心的列坐標。

默認值:256

建議值:0、16、32、64、128、256、320、512、640

AngleStart(input_control)數(shù)字→(實數(shù))

要映射到輸出圖像第一列的射線角度。

默認值:0.0

建議值:0.0,0.78539816,1.57079632,3.141592654,6.2831853,12.566370616

AngleEnd(input_control)數(shù)字→(實數(shù))

要映射到輸出圖像最后一列的射線角度。

默認值:6.2831853

建議值:0.0,0.78539816,1.57079632,3.141592654,6.2831853,12.566370616

RadiusStart(input_control)數(shù)字→(實數(shù)/整數(shù))

要映射到輸出圖像第一行的圓的半徑。

默認值:0

建議值:0、16、32、64、100、128、256、512

典型值范圍:0≤RadiusStart

RadiusEnd(input_control)數(shù)字→(實數(shù)/整數(shù))

要映射到輸出圖像最后一行的圓的半徑。

默認值:100

建議值:0、16、32、64、100、128、256、512

典型值范圍:0≤RadiusEnd

Width(input_control)數(shù)→(整數(shù))

輸出圖像的寬度。

默認值:512

建議值:256、320、512、640、800、1024

典型值范圍:0≤寬度≤32767

Height(input_control)數(shù)→(整數(shù))

輸出圖像的高度。

默認值:512

建議值:240、256、480、512、600、1024

典型值范圍:0≤高度≤32767

Interpolation (input_control)字符串→(string)

內(nèi)插法進行變換。

默認值:“ nearest_neighbor”

值列表:‘bilinear’,‘nearest_neighbor’

2、polar_trans_region_inv算子用法與參數(shù)剖析

算子原型:

polar_trans_image_inv(PolarImage : XYTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

參數(shù)說明:

PolarImage(input_object)(multichannel-)image(-array)→object(byte * / int2 * / uint2 * / real *)*允許用于計算設備

輸入圖像。

XYTransImage(output_object)(多通道)圖像(-array)→對象(字節(jié)/ int2 / uint2 /實數(shù))

輸出圖像。

Row(input_control)編號→(實數(shù)/整數(shù))

圓弧中心的行坐標。

默認值:256

建議值:0、16、32、64、128、240、256、480、512

典型值范圍:0≤行≤32767

Column(input_control)號→(實數(shù)/整數(shù))

圓弧中心的列坐標。

默認值:256

建議值:0、16、32、64、128、256、320、512、640

典型值范圍:0≤列≤32767

AngleStart(input_control)數(shù)字→(實數(shù))

將輸入圖像的第一列映射到的射線角度。

默認值:0.0

建議值:0.0,0.78539816,1.57079632,3.141592654,6.2831853

AngleEnd(input_control)數(shù)字→(實數(shù))

將輸入圖像的最后一列映射到的射線角度。

默認值:6.2831853

建議值:0.0,0.78539816,1.57079632,3.141592654,6.2831853

RadiusStart(input_control)數(shù)字→(實數(shù)/整數(shù))

要將輸入圖像的第一行映射到的圓的半徑。

默認值:0

建議值:0、16、32、64、100、128、256、512

典型值范圍:0≤RadiusStart

RadiusEnd(input_control)數(shù)字→(實數(shù)/整數(shù))

要將輸入圖像的最后一行映射到的圓的半徑。

默認值:100

建議值:0、16、32、64、100、128、256、512

典型值范圍:0≤RadiusEnd

Width(input_control)數(shù)→(整數(shù))

輸出圖像的寬度。

默認值:512

建議值:256、320、512、640、800、1024

典型值范圍:0≤寬度≤32767

Height(input_control)數(shù)→(整數(shù))

輸出圖像的高度。

默認值:512

建議值:240、256、480、512、600、1024

典型值范圍:0≤高度≤32767

Interpolation (input_control)字符串→(string)

內(nèi)插法進行變換。

默認值:“ nearest_neighbor”

值列表:‘bilinear’,‘nearest_neighbor’

圓環(huán)類缺陷檢測思路與步驟

1. 使用Blob分析確定圓心位置與圓環(huán)半徑、變換起始終止的角度。

2. 使用XLD輪廓擬合對圓心等參數(shù)進行精確定位。(此步驟用于精確定位,有的檢測不需要)

3. 進行極坐標變換

4. 對極坐標變換后的圖像進行處理

5. 進行反極坐標變換

6. 顯示缺陷區(qū)域

Halcon實例

inspect_bottle_mouth.hdev

實例簡介

*此示例檢查瓶口是否有缺陷。

思路剖析

*首先,檢測瓶子的基本形態(tài),

*邊緣檢測和圓擬合。

*然后,通過極坐標變換對頸部區(qū)域進行變換。

*之后,在變換后的圖像中使用動態(tài)閾值

*檢測缺陷。最后,顯示結果。

應用實例1

項目介紹

27e380ee-1fa3-11ee-962d-dac502259ad0.png

要求:檢測邊緣的三個紅色圈圈內(nèi)的缺陷。

原圖:

280b7144-1fa3-11ee-962d-dac502259ad0.png

處理程序

read_image (Image, 'C:/Users/Administrator/Desktop/1.png')

rgb3_to_gray (Image, Image, Image, ImageGray)

dev_open_window_fit_image (ImageGray, 0, 0, -1, -1, WindowHandle)

dev_set_draw ('margin')

dev_set_line_width (3)

dev_set_draw ('margin')

* dev_set_draw ('fill')

get_image_size (ImageGray, Width, Height)

binary_threshold (GrayImage, Region, 'max_separability', 'dark', UsedThreshold)

connection (Region, ConnectedRegions)

select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)

smallest_circle (SelectedRegions, Row2, Column2, Radius)

gen_circle (Circle, Row2, Column2, Radius)

reduce_domain (ImageGray, Circle, ImageReduced2)

gray_closing_rect (ImageReduced2, ImageClosing1, 10, 4)

polar_trans_image_ext (ImageClosing1, PolarTransImage1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, 'nearest_neighbor')

mean_image (PolarTransImage1, ImageMean1, 500, 2)

dyn_threshold (PolarTransImage1, ImageMean1, RegionDynThresh1, 10, 'dark')

connection (RegionDynThresh1, ConnectedRegions1)

select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and',100, 9000000)

union1 (SelectedRegions1, RegionUnion)

closing_rectangle1 (RegionUnion, RegionClosing1, 10, 20)

connection (RegionClosing1, ConnectedRegions3)

opening_rectangle1 (ConnectedRegions3, RegionOpening1, 10, 20)

polar_trans_region_inv (RegionOpening1, XYTransRegion1, Row2, Column2, 0, 6.28319, Radius-100, Radius-10, 6.28*Radius, 90, Width, Height, 'nearest_neighbor')

smallest_circle (XYTransRegion1, Row, Column, Radius1)

gen_circle (Circle1, Row, Column, Radius1)

dev_display (ImageGray)

dev_display (Circle1)

處理效果

282a5a64-1fa3-11ee-962d-dac502259ad0.png

應用實例2

項目介紹

284fe306-1fa3-11ee-962d-dac502259ad0.png

要求:如圖所示,該圖為需要找出紅色圓圈內(nèi)焊點的位置 。

原圖:

287b3664-1fa3-11ee-962d-dac502259ad0.jpg

處理程序

read_image (Image, 'C:/Users/Administrator/Desktop/實際圖_副本.bmp')

rgb3_to_gray (Image, Image, Image, ImageGray)

dev_open_window_fit_image (ImageGray, 0, 0, -1, -1, WindowHandle)

dev_set_draw ('margin')

dev_set_line_width (5)

get_image_size (ImageGray, Width, Height)

auto_threshold (ImageGray, Regions, 2)

count_obj (Regions, Number)

select_obj (Regions, ObjectSelected, Number)

fill_up (ObjectSelected, RegionFillUp1)

connection (RegionFillUp1, ConnectedRegions1)

select_shape_std (ConnectedRegions1, SelectedRegions1, 'max_area', 70)

smallest_circle (SelectedRegions1, Row2, Column2, Radius)

gen_circle (Circle, Row2, Column2, Radius)

reduce_domain (ImageGray, Circle, ImageReduced2)

polar_trans_image_ext (ImageReduced2, PolarTransImage1, Row2, Column2, 0, 6.28319, Radius-210, Radius, 6.28*Radius, 210, 'nearest_neighbor')

mean_image (PolarTransImage1, ImageMean1, 200, 5)

dyn_threshold (PolarTransImage1, ImageMean1, RegionDynThresh1, 45, 'dark')

closing_circle (RegionDynThresh1, RegionClosing, 15.5)

connection (RegionClosing, ConnectedRegions2)

select_shape (ConnectedRegions2, SelectedRegions, ['width','height'], 'and', [380,80], [500,160])

polar_trans_region_inv (SelectedRegions, XYTransRegion1, Row2, Column2, 0, 6.28319, Radius-210, Radius, 6.28*Radius, 210, Width, Height, 'nearest_neighbor')

smallest_rectangle2 (XYTransRegion1, Row3, Column3, Phi, Length1, Length2)

gen_rectangle2 (Rectangle, Row3, Column3, Phi, Length1, Length2)

dev_display (ImageGray)

dev_display (Rectangle)

處理效果

289bcd84-1fa3-11ee-962d-dac502259ad0.png


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像
    +關注

    關注

    2

    文章

    1078

    瀏覽量

    40375
  • 像素
    +關注

    關注

    1

    文章

    202

    瀏覽量

    18547
  • HALCON
    +關注

    關注

    16

    文章

    63

    瀏覽量

    27167

原文標題:halcon 圓環(huán)類缺陷檢測的一種方法(極坐標變換法)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于labview的極坐標控制

    用LabVIEW編制個完整應用軟件,完成以下功能:1、繪制極坐標圖,如下圖類似效果,要求具有角度和極軸刻度;2、在極坐標圖繪制心形曲線,點擊按鈕可計算顯示曲線的3dB寬度(從最大值下降0.707
    發(fā)表于 06-23 21:56

    Labview里面使用Halcon的函數(shù)。 方法:直接調(diào)用Halcon的函數(shù)。

    本帖最后由 高順周 于 2016-10-14 19:06 編輯 在Labview使用Halcon,有兩方式。一種是創(chuàng)造Halcon
    發(fā)表于 08-15 14:14

    三分鐘學會Altium Designer 圓弧形陣列粘貼和極坐標的使用

    需要的朋友看看。實現(xiàn)以上效果(其實我也不知道專業(yè)的名稱叫什么)有兩種方法:1、陣列粘貼的方法 2、極坐標陣列粘貼第步,畫個封閉圓環(huán)(需要在
    發(fā)表于 01-13 13:48

    AD18中極坐標的添加方法

    管理器)”,點擊“Add”,選擇添加“Add Polar Grid(添加極坐標)”,然后按照上面的步驟2繼續(xù)完成極坐標的添加。PS:因為AD18將柵格管理器這欄移到了“Properties”中,所以
    發(fā)表于 07-10 06:25

    Altium Designer 19極坐標的添加方法

    方法:1. 在“Properties”中找到“Grid Manager(柵格管理器)”,點擊“Add”,選擇添加“Add Polar Grid(添加極坐標)”; 2. 完成極坐標的添
    發(fā)表于 10-22 16:45

    Allegro極坐標布局方法

    下allegro極坐標布局方法!記得多余時間來撩我?。?!好了廢話不多說了,開始?。?!首先,將網(wǎng)標導入PCB中(封裝記得都做對)然后,快速放入器件緊接著,畫個圓形,并選擇個要放在圓上
    發(fā)表于 12-31 00:01

    雙線性變換法設計數(shù)字Butterworth和Chebyshe

    用雙線性變換法設計IIR濾波器、實驗目的1、了解兩工程上最常用的變換方法:脈沖響應不變法和雙線性變換
    發(fā)表于 05-10 10:00 ?77次下載

    一種基于Haar小波變換的彩色圖像人臉檢測方法

    本文提出了一種基于 Haar 小波變換的彩色圖像人臉檢測方法。首先進行彩色空間的變換檢測出圖像
    發(fā)表于 08-29 09:37 ?16次下載

    非隔離三電平變換器中分壓電容均壓的一種方法

    非隔離三電平變換器中分壓電容均壓的一種方法
    發(fā)表于 04-21 00:08 ?1038次閱讀

    matlab坐標變換

    matlab坐標變換 坐標變換 cart2pol 笛卡兒坐標變換
    發(fā)表于 06-18 14:47 ?2401次閱讀

    頻率響應法--極坐標

    頻率響應法--極坐標圖 
    發(fā)表于 07-27 14:26 ?3802次閱讀

    一種基于極坐標變換的點模式匹配算法

    變換得到對數(shù)極坐標的特征圖,并利用幾何不變矩方法對特征圖進行描述。由特征描述向量的比較,獲得粗匹配結果,然后通過幾何約束迭代的方法獲取最終的點集匹配結果。本文貢獻如下:
    發(fā)表于 12-05 19:08 ?2次下載

    基于傅里葉極坐標變換的織物瑕疵檢測方法

    本文研究的目的是檢測不同光照下紡織工業(yè)中織布的瑕疵,不同光照下的織布圖像清晰度不同,但卻都非常有周期性,有方向性。所以本文提出了一種基于傅里葉極坐標變換
    發(fā)表于 12-12 18:35 ?1次下載

    一種快速評估混凝土缺陷的無損檢測方法

    混凝土材料中的缺陷檢測,對于土木工程和結構應用至關重要。據(jù)麥姆斯咨詢報道,日本芝浦工業(yè)大學(Shibaura Institute of Technology)開發(fā)了一種新的激光檢測
    的頭像 發(fā)表于 03-17 09:38 ?1421次閱讀

    基于Halcon圖像處理的表面缺陷檢測方案

    本文采用Halcon圖像處理軟件來搭建工業(yè)標簽表面缺陷檢測檢測系統(tǒng),主要檢測過程為:利用工業(yè)相機對傳送帶上待檢的工業(yè)標簽進行圖像采集和預處
    發(fā)表于 07-13 12:19 ?1401次閱讀
    基于<b class='flag-5'>Halcon</b>圖像處理的表面<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>方案