1.全局閾值:機器視覺需要處理的圖像中包括目標特征、目標特征以外的背景和噪聲。全局閾值就是在設定的閾值范圍內將灰度圖像處理成白色像素,灰度圖的灰度范圍為0~255,此閾值處理方法適用于目標特征和背景對比度大的圖像。
2.自動閾值:使用OTSU算法計算最佳閾值并對圖像進行二值化處理。OTSU算法將二值后的白色像素和黑色像素看成是兩類,算法的思想則是尋找最佳的閾值使得二值后黑白兩類像素的類間方差最大化。
3.局部閾值:局部閾值可分為局部自動閾值和局部閾值。
A.局部閾值是根據ROI區域進行閾值分割。
B.局部自動閾值則是根據ROI區域內的像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值。亮度較高的局部自動閾值的區域二值化閾值通常會較大,而亮度較低的局部自動閾值的區域二值化閾值則會相應地變小。不同亮度、對比度、紋理的局部圖像區域將會擁有相對應的局部二值化閾值。
![機器視覺運動控制一體機實現圖像閾值分割](https://file.elecfans.com//web2/M00/33/F4/pYYBAGIhiXiAcC5tAADKs9yEdKA289.png)
背景
在實際的機器視覺項目應用當中圖像質量效果是視覺處理方案能否準確和穩定運行的關鍵因素。
圖像質量的最佳效果是需要將特征目標突出顯示,同時弱化與特征目標無關的背景和干擾噪點。圖像閾值分割處理是最簡單,也是最常用的圖像預處理方法,適用于處理目標特征和背景像素灰度值差異明顯的圖像。
在上期課程中,我們講述了如何使用VPLC系列視覺運控一體機使用相機進行相關采集操作的課程。本期課程正運動小助手給大家分享一下VPLC系列視覺運控一體機進行圖像閾值分割的課程。
01VPLC控制器
(一)VPLC516E構架圖
![機器視覺運動控制一體機實現圖像閾值分割](https://file.elecfans.com//web2/M00/33/F4/pYYBAGIhiXmAJjc5AAHwP9xOV5Q462.png)
(二)課前準備
1.電腦一臺,安裝ZDevelop3.10以上版本軟件
2.VPLC516E一臺
3.24V直流電源一個
4.網線一根
5.WinSCP軟件
6.電線若干
02課程主要使用的指令
![機器視覺運動控制一體機實現圖像閾值分割](https://file.elecfans.com//web2/M00/33/F4/pYYBAGIhiXmAZYaOAABlrdpko-A786.png)
03軟件實現
1.打開ZDevelop軟件:新建名稱為“圖像分割.zpj”項目→新建“HMI”文件→新建“Basic.bas”文件(用于編寫界面響應函數、并開啟HMI自動運行任務)→新建“相機采集.bas”文件(用于實現相機采集功能)→新建“初始化.bas”文件(用于初始化測量參數)→新建“draw.bas”文件(用于更新繪制ROI數據)→文件添加到項目。
![機器視覺運動控制一體機實現圖像閾值分割](https://file.elecfans.com//web2/M00/33/F4/pYYBAGIhiXmAMFGrAAAWZszcJ2U876.png)
2.設計HMI主界面和關聯它的控件變量。
3.編寫圖像比例縮放和平移的執行函數。
圖像分割執行程序
GLOBAL sub main()
? ?'先采集一張圖
? ?ZV_IMGCOPY(GrabImg,testImg)? ? '復制圖像?
? ?'全局圖像二值化分割
? ?if img_flag=0 THEN
? ? ? if auto_switch=0 THEN '手動閾值??
? ? ? ? ?ZV_THRESH(testImg,globalImg,ga_binaryzation(0),ga_binaryzation(1))? ? '閾值化生成二值圖像
? ? ? ? ?ZV_LATCH(globalImg,1)? ??
? ? ? elseif auto_switch=1 THEN? '自動閾值
? ? ? ? ?ZV_AUTOTHRESH(testImg,globalImg,0)? ? '自動閾值化生成二值圖像
? ? ? ? ?ZV_LATCH(globalImg,1)
? ? ? ? ?DMCPY? ga_binaryzation(0),table(0),2? ? ??
? ? ? endif
? ?'局部圖像二值化分割
? ?elseif img_flag=1 THEN? ??
? ? ? ZV_IMGCOPY(testImg,localImg)? ? '復制圖像
? ? ? ZV_REGENRECT(rect_region,d_roi_rect(0),d_roi_rect(1),d_roi_rect(2)-d_roi_rect(0),d_roi_rect(3)-d_roi_rect(1)) '生成矩形區域? ??
? ? ? if auto_switch=0 THEN '手動閾值? ? ? ?
? ? ? ? ?ZV_RETHRESH(localImg,rect_region,binaryzation_re,ga_binaryzation(0),ga_binaryzation(1))? ? '圖像二值化生成區域?
? ? ? ? ?ZV_REGION(localImg,rect_region,0,rgb(0,0,0))? ? '在img圖像中繪制指定區域黑色
? ? ? ? ?ZV_REGION(localImg,binaryzation_re,0,rgb(255,255,255))? ? '在img圖像中繪制指定區域成白色
? ? ? ? ?ZV_LATCH(localImg,0)??
? ? ? elseif auto_switch=1 THEN '自動閾值? ? ?
? ? ? ? ?ZV_REAUTOTHRESH(localImg,rect_region,binaryzation_re,0)? ? '圖像自動二值化生成區域??
? ? ? ? ?ZV_REGION(localImg,rect_region,0,rgb(0,0,0))? ? '在img圖像中繪制指定區域黑色
? ? ? ? ?ZV_REGION(localImg,binaryzation_re,0,rgb(255,255,255))? ? '在img圖像中繪制指定區域成白色
? ? ? ? ?ZV_LATCH(localImg,0)
? ? ? ? ?DMCPY? ga_binaryzation(0),table(0),2? ? ? ?
? ? ? endif? ??
?本次,正運動技術【機器視覺運動控制一體機小課堂】三分鐘實現圖像閾值分割,就分享到這里。
審核編輯:湯梓紅
?
?
評論