檢測-紋理表面凸起、凹痕、劃痕缺陷的檢測
此示例是一個綜合的示例,檢測的是皮革紋理表面上出現的凸起、凹痕、劃痕上的缺陷。使用的依然是光度立體法,只是不同的缺陷,需要使用的是不同引數所生成的影像。
示例程式碼如下:
* 使用光度立體的方法檢測皮革樣品
* Initialization
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
Message := 'Inspect leather samples using photometric stereo'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Part 1
*
* Show input images with different illumination
* 先顯示並且輸入同一影像在不同光照下的影像
* 此缺陷檢測,檢測的是紋理凸起缺陷
* 1. 一次性讀入多個影像
read_image (Images, 'photometric_stereo/leather_1_0' + [1:4])
* 迴圈,一次選擇一張影像
for I := 1 to 4 by 1
Message := 'Sample 1: Acquire image ' + I + ' of 4'
select_obj (Images, ObjectSelected, I)
dev_display (ObjectSelected)
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
wait_seconds (0.5)
endfor
*
*
* Apply photometric stereo to determine the albedo
Tilts := [6.1,95.0,-176.1,-86.8]
Slants := [41.4,42.6,41.7,40.9]
ResultType := ['gradient','albedo']
* 2. 用該運算元得到反照率影像和表面梯度影像
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, 'poisson', [], [])
*
* Display the albedo image
* 顯示反照率影像
dev_display (Albedo)
disp_message (WindowHandle, 'The defect is clearly visible in the albedo image', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Detect defects
* 3. 缺陷檢測
*
* 該二值化處理有幾個處理:均值處理->使用標準差進行二值化處理
var_threshold (Albedo, Region, 15, 15, 0.2, 0.05, 'light')
* 計算連通域,得到分隔開的連通域
connection (Region, ConnectedRegions)
* 以面積特徵,特徵直方圖選擇區域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10, 99999)
* 聯合,聯合成一個區域
union1 (SelectedRegions, RegionUnion)
* 閉運算
closing_circle (RegionUnion, RegionClosing, 3.5)
* 計算連通域,得到分開的連通域
connection (RegionClosing, Defects)
* 計算得到區域面積和中心座標
area_center (Defects, Area, Row, Column)
* 生成圓, 圈住缺陷部分
gen_circle (Circle, Row, Column, gen_tuple_const(|Row|,sqrt(Area) + 30))
* Display the defects
dev_display (Albedo)
dev_set_color ('red')
dev_set_draw ('margin')
dev_set_line_width (4)
dev_display (Circle)
disp_message (WindowHandle, 'Albedo image with defect', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Part 2
*
* Show input images with different illumination
* 讀入影像,一次讀入多張在不同光照下的影像
read_image (Images, 'photometric_stereo/leather_2_0' + [1:4])
for I := 1 to 4 by 1
Message := 'Sample 2: Acquire image ' + I + ' of 4'
select_obj (Images, ObjectSelected, I)
dev_display (ObjectSelected)
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
wait_seconds (0.5)
endfor
*
*
* Apply photometric stereo to determine the albedo
* 用該運算元得到反照率影像和表面梯度影像
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, 'poisson', [], [])
* 二值化
threshold (Albedo, Region1, 128, 255)
*
* Display the albedo image
* 僅僅只使用二值化的方法處理反照率影像,並不能檢測到缺陷區域
dev_display (Albedo)
Message := 'These defects are difficult to detect in the albedo image.'
Message[1] := 'Therefore, we use the gradient information to detect them.'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Detect texture defects using gradient information.
* We are looking for areas with little surface changes.
* 使用梯度資訊檢測紋理缺陷,尋找表面變化很小的區域
*
* 獲得高斯曲率影像
derivate_vector_field (Gradient, Curl, 1, 'curl')
derivate_gauss (Curl, CurlGradient, 1, 'gradient')
*
* Display changes of the curl of the gradient field
dev_display (CurlGradient)
Message := 'Changes in the gradient curl'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Detect texture defects
* 如下程式碼檢測紋理缺陷
* 此處缺陷檢測,檢測的是紋理的凹痕
* 對高斯曲率影像進行二值化處理
threshold (CurlGradient, Region, 0, 0.01)
* 選擇區域
rank_region (Region, RegionCount, 10, 10, 30)
* 計算連通域,得到分隔開的連通域
connection (RegionCount, ConnectedRegions)
* 以面積特徵,特徵直方圖選擇區域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2000, 99999)
* 聯合,聯合成一個區域
union1 (SelectedRegions, RegionUnion)
* 選擇區域
rank_region (RegionUnion, RegionCount1, 25, 25, 170)
* 計算連通域,得到分隔開的連通域
connection (RegionCount1, NoTextured)
*
* Display texture defects
* 在反照率影像上顯示選擇的區域
dev_display (Albedo)
dev_set_draw ('margin')
dev_set_color ('red')
dev_set_line_width (3)
dev_display (NoTextured)
disp_message (WindowHandle, 'Non-textured areas on leather', 'window', 12, 12, 'black', 'true')
stop ()
*
* Detect scratches using curvature information.
* We are looking for areas with high curvature
*
* 使用曲率資訊檢測劃痕,尋找高曲率區域
*
* 獲得高斯曲率影像
derivate_vector_field (Gradient, MeanCurvature, 1, 'mean_curvature')
*
* Display the mean curvature of the surface
* 顯示錶面的平均曲率
dev_display (MeanCurvature)
Message := 'Mean curvature of the surface'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_message (WindowHandle, 'Press F5', 'image', 720, 850, 'black', 'true')
stop ()
*
* Detect scratches
* 劃痕檢測
* 此處缺陷檢測,檢測的是劃痕
* 計算絕對值影像 因為高斯曲率影像中曲率會有負數
abs_image (MeanCurvature, ImageAbs)
* 二值化處理
threshold (ImageAbs, Region2, 0.15, 255)
* 計算連通域,得到分隔開的連通域
connection (Region2, ConnectedRegions1)
* 以面積特徵,特徵直方圖選擇區域
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999)
* 聯合,聯合成一個區域
union1 (SelectedRegions1, RegionUnion1)
* 閉運算
closing_circle (RegionUnion1, RegionClosing, 1.5)
* 計算連通域,得到分隔開的連通域
connection (RegionClosing, ConnectedRegions2)
* 以最大直徑特徵,特徵直方圖選擇區域
select_shape (ConnectedRegions2, SelectedRegions2, 'max_diameter', 'and', 50, 99999)
* 以灰度值選擇區域
select_gray (SelectedRegions2, MeanCurvature, SelectedRegions3, 'deviation', 'and', 0.2, 255)
*
* Display scratches
* 在反照率影像顯示抓痕
dev_display (Albedo)
dev_set_draw ('margin')
dev_set_color ('red')
dev_set_line_width (3)
dev_display (SelectedRegions3)
disp_message (WindowHandle, 'Deep scratch', 'window', 12, 12, 'black', 'true')
重點說明:
1. 第一部分的檢測,待檢測的是皮革表面的凸起,該檢測,直接使用的是反照率影像,進行預處理和Blob後,即可得到皮革凸起的缺陷。
2. 待檢測的是皮革表面的凹痕和劃痕,該檢測,示例中先直接對反照率影像進行二值化之後,確認該方法無法完成對皮革表面缺陷的檢測。
3. 第二部分的檢測,待檢測的是皮革表面的凹痕,先使用如下運算元得到高斯曲率影像:
derivate_vector_field (Gradient, Curl, 1, 'curl')
derivate_gauss (Curl, CurlGradient, 1, 'gradient')
然後使用該高斯曲率影像Blob分析,即可得到皮革凹痕的缺陷。
4. 第三部分的檢測,待檢測的是皮革表面的劃痕,先使用如下運算元得到高斯曲率影像:
derivate_vector_field (Gradient, MeanCurvature, 1, 'mean_curvature')
然後使用該高斯曲率影像Blob分析,即可得到皮革劃痕的缺陷。
5. 運算元rank_region,使用一個Mask依次對待處理的整個區域過濾,選擇需要的區域。
6. 運算元select_gray,按照灰度值來選擇區域。
更多最新文章,請關注公眾號:
執行流程:
凸起反照率影像如下:
在反照率影像中標記處凸起缺陷:
凹痕反照率影像:
凹痕高斯曲率影像:
在反照率影像中標記處凹痕:
劃痕的高斯曲率影像:
在反照率影像中標記處劃痕:
相關文章
- Halcon表面缺陷檢測-劃痕檢測
- 表面劃痕檢測方法
- 檢測金屬圓環表面的凹痕
- Halcon表面缺陷檢測-光度立體法檢測藥片包裝背面的缺陷
- Halcon表面缺陷檢測-光度立體法
- halcon缺陷檢測
- Halcon缺陷檢測例項轉OpenCV實現(二) PCB印刷缺陷檢測OpenCV
- Halcon缺陷檢測例項轉OpenCV實現(三) 物體凸缺陷檢測OpenCV
- 深度學習之瑕疵缺陷檢測深度學習
- detect_indent_fft.hdev相關例程學習(檢測凹痕)FFTdev
- 結合模板匹配與測量的剃鬚刀缺陷檢測
- 突破傳統缺陷檢測的界限,"Defect Spectrum"首次實現超高精度豐富語義的工業缺陷檢測
- halcon——缺陷檢測常用方法總結(測量擬合)
- 影像分析,使用Halcon進行缺陷檢測
- 布匹缺陷檢測baseline提升過程
- 華碩推智慧衝壓,用AI檢測髮絲紋理中的瑕疵AI
- 網格缺陷檢測(二值化閾值分析)
- 人臉檢測的harr檢測函式函式
- 文字檢測預處理地址
- halcon——缺陷檢測常用方法總結(特徵訓練)特徵
- halcon——缺陷檢測常用方法總結(光度立體)
- halcon視覺缺陷檢測系列(1)常用的6種方法視覺
- Halcon-表面檢測-----確定光度立體法系統的光源的方向
- OpenCV檢測篇(一)——貓臉檢測OpenCV
- 文章相似度檢測,相似度檢測工具,原創度檢測工具
- 機器視覺產品尺寸測量與外觀缺陷檢測應用視覺
- 網站漏洞檢測 滲透測試檢測手法網站
- 大模型在程式碼缺陷檢測領域的應用實踐大模型
- 微信域名檢測,域名攔截檢測介面
- QQ/微信域名檢測-域名檢測官方介面
- 目標檢測:二維碼檢測方案
- Applescript成功實現imessage資料篩選,imessage藍號檢測,無痕檢測是否註冊imessage的原理APP
- 微信域名檢測線上批次檢測如何實現?——利用域名檢測api介面實現批次檢測工具教程API
- Rom 檢測
- Emoji檢測
- 本本檢測
- 碰撞檢測
- 特徵檢測特徵