<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產品分類

      當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器 > FFC連接器

      類型分類:
      科普知識
      數據分類:
      FFC連接器

      機器視覺運動控制一體機應用例程(二) 顏色識別

      發布日期:2022-04-25 點擊率:36

      • 關鍵詞:正運動技術,機器視覺,運動控制一體機


      • 摘要:前面課程講述的所有的機器視覺功能如形狀匹配、BLOB檢測、數據碼識別以及OCR等功能,我們都是對單通道的灰度圖像進行處理。


      image.png


      前面課程講述的所有的機器視覺功能如形狀匹配、BLOB檢測、數據碼識別以及OCR等功能,我們都是對單通道的灰度圖像進行處理。


      本次課程我們將和大家一起分享使用ZDevelop軟件對采集到的彩色圖像進行顏色識別的實現方法。


      一檢測原理


      顏色是我們人眼能接收到的最直接的信息。在工業機器視覺的應用中,我們也可以根據提取到的顏色信息對待測特征進行判斷處理。


      工業應用中使用到的顏色信息一般是3通道的顏色信息,每一個通道都由8bit的數據信息進行描述,因此機器視覺中通常處理的彩色圖像是24bit的圖像。


      根據不同的顏色特征,采用不同的顏色空間模型對顏色通道進行描述,包括RGB模型、HSV模型、HSI模型。


      (一)RGB模型


      RGB模型是常用的顏色空間描述方式,它是通過對三色原紅(Red)、綠(Green)、藍(Blue)3中顏色的變化以及三種顏色不同的疊加情況呈現出不同的顏色效果。


       如下圖所示,紅、綠、藍每個顏色通道都由8bit圖像數據來描述,數值范圍(0~255)。每一種顏色都由三個顏色通道的數值來顯示。如(255,0,0)表示紅色,(0,255,0)表示綠色,(0,0,255)表示藍色,(255,255,255)表示白色,紅色和綠色的疊加表示黃色(255,255,0)。

      image.png

      RGB空間模型示意圖


      (二)HSV模型


      HSV模型包括了色調(Hue)、飽和度(Saturation)、純度(Value)。它對顏色的描述比RGB更接近人眼對色彩的感知。


      HSV模型常用倒立的圓錐體來表示,如下圖所示。色調決定顏色的本質,它反映出人眼所看到的顏色如紅色或是藍色;飽和度表示顏色的深淺程度,它也是指含白色的數量程度,白色越多飽和度越低,顏色越淺;純度反映的是光對顏色的影響程度,從上往下看是一個由白到黑的一個變化過程。


      image.png


      (三)HSI模型


      HSI模型使用了顏色三要素色調(Hue)、飽和度(Saturation)、亮度(Intensity)來描述顏色。


      HSI模型常用上下對稱的圓錐體來表示,如下圖所示。色調決定顏色的本質,它反映出人眼所看到的顏色如紅色或是藍色;飽和度表示顏色的深淺程度;亮度反映的是顏色的亮暗程度,從上往下看,它是一個由亮變暗的一個變化過程。


      image.png


      (四)顏色識別


      ZVision視覺指令中顏色識別的原理是先通過預先設置的RGB顏色通道的高低閾值范圍或者通過學習圖像上某一區域內的顏色特征生成顏色模型庫,然后在輸入圖像的指定區域選取某個檢測特征,將檢測特征和顏色模型庫中的顏色進行對比,輸出分數最高的顏色模型名稱。


      二應用場景


      1.分類計數


      可以訓練學習所有不同顏色的產品,通過顏色識別對不同顏色的產品進行分類并進行計數。


      2.提取待測目標特征


      如果待測目標特征具有特定的顏色如紅色,可以通過提取紅色通道的顏色信息將彩色圖像進行二值化,突出待測目標特征。


      3.輸出顏色信息


      可以輸出待測產品目標的具體顏色信息。


      三軟件演示


      image.png


      (一)實例演示

      1.打開ZDevelop軟件:新建項目→新建HMI文件→新建main.bas文件,用于編寫界面響應函數→新建global_variable.bas文件用于定義和初始化全局變量并開啟HMI自動運行任務→新建camera.bas文件用于實現相機采集功能→新建draw.bas文件用于更新繪制圖形刷新界面→文件添加到項目。


      image.png


      2.設計HMI啟動界面。


      image.png


      3.在global_variable.bas文件中定義全局變量,定義完成后運行Hmi.hmi文件。


      '''''全局變量大部分使用數組結構'''''

      ''注:basic編程中很多函數會以TABLE(系統的數據結構)做為參數

      ''table        說明                 table      說明

      ''11~12  鼠標操作時獲取的坐標        15~18 訓練學習ROI圖像坐標數據

      ''31~35  識別顏色ROI控件坐標數據    50    識別的顏色名稱

      ''41~42  識別顏色ROI中心圖像坐標數據  104    識別的顏色id

      ''70~85  識別顏色ROI繪制數據        98    輸入的識別分數

      ''25~28  訓練學習ROI控件坐標數據      


      '***********定義程序任務相關變量**********************


      '主任務狀態

      '0 - 未初始化

      '1 - 停止

      '2 - 運行中

      '3 - 正在停止

      GLOBAL DIM main_task_state

      main_task_state = 1


      '運行任務開關

      GLOBAL DIM run_switch

      run_switch = 0


      '采集任務開關

      '0 - 停止采集

      '1 - 請求采集

      GLOBAL DIM grab_switch

      grab_switch = 0


      '定位檢測主任務id - 10

      GLOBAL DIM main_task_id

      main_task_id = 10


      '相機連續采集線程id - 7

      GLOBAL DIM grab_task_id

      grab_task_id = 7


      '***********結束定義程序任務相關變量******************


      '***********定義相機采集相關變量**********************


      '相機種類,此處使用海康相機-"mvision"

      GLOBAL DIM CAMERA_TYPE(100)

      'CAMERA_TYPE = "mindvision;basler;mvision;huaray;zmotion"

      CAMERA_TYPE = "mvision"


      '相機個數

      GLOBAL cam_num

      cam_num = 0


      '相機模式,-1 連續采集,0-軟件觸發采集

      GLOBAL cam_mode

      cam_mode = 0


      '***********結束定義相機采集相關變量******************


      '定義使用ROI標志,1-使用ROI,0-使用全圖像區域

      GLOBAL DIM d_roi_arc_flag 

      d_roi_arc_flag = 0


      '定義鼠標按下標志位,1-已按下,0-未按下

      GLOBAL DIM is_set_roi_m_down

      is_set_roi_m_down = 0


      GLOBAL DIM d_detect_time '定義消耗的時間變量

      d_detect_time = 0


      '定義程序執行過程中采集的圖像變量、顏色樣本模板變量和模板列表變量

      GLOBAL ZVOBJECT grabImg,ColorMod,mod_list


      '定義檢測識別顏色的ROI區域

      GLOBAL DIM d_reg_roi(5)

      d_reg_roi(0)=260

      d_reg_roi(1)=210

      d_reg_roi(2)=300

      d_reg_roi(3)=225

      d_reg_roi(4)=0

      TABLE(31) = d_reg_roi(0) '將矩形ROI數據存放到起始地址為31的table數組中

      TABLE(32) = d_reg_roi(1)

      TABLE(33) = d_reg_roi(2)

      TABLE(34) = d_reg_roi(3)

      TABLE(35) = d_reg_roi(4)


      '定義訓練學習顏色樣本的ROI區域

      GLOBAL DIM d_learn_roi(4)

      d_learn_roi(0)=260

      d_learn_roi(1)=190

      d_learn_roi(2)=300

      d_learn_roi(3)=230

      TABLE(25) = d_learn_roi(0) '將矩形ROI數據存放到起始地址為25的table數組中

      TABLE(26) = d_learn_roi(1)

      TABLE(27) = d_learn_roi(2)

      TABLE(28) = d_learn_roi(3)


      '定義輸入需要進行學習的顏色樣本名稱

      GLOBAL DIM d_sample_name(128)

      d_sample_name=""


      '常用顏色變量

      GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

      C_RED   = RGB(255,  0,  0)

      C_GREEN = RGB(  0,255,  0)

      C_BLUE  = RGB(  0,  0,255)

      C_YELLOW= RGB(255,255,  0)


      '***********定義讀取本地文件功能相關變量**************

      ''注意,該功能只在使用仿真器時有效

      '定義是否使用本地圖片標志

      GLOBAL DIM d_use_imgfile

      d_use_imgfile=1


      '定義本地圖片索引

      GLOBAL DIM d_index


      '定義讀取圖片的路徑

      GLOBAL DIM File_Name(100)   


      '***********結束定義讀取本地文件功能相關變量**********


      '初始化全局變量完成后開啟HMI文件

      RUN"Hmi1.hmi",1

      4.關聯HMI啟動界面值控件變量。


      image.png


      5.在main.bas文件中添加HMI界面初始化函數并在Hmi系統設置中關聯初始化函數。


      end


      '注:

      '凡是要使用Region有關的算子在系統初始化時都要調用ZV_RESETCLIPSIZE(width, height)這個算子設置下圖像尺寸,以滿足相機分辨率,因為默認的是640*480尺寸


      'HMI界面初始化函數

      GLOBAL SUB hmi_init()

          grab_switch = 0              '停止采集

          main_task_state = 1          '主任務停止運行

          ZV_RESETCLIPSIZE(640, 480)   '初始化時依據圖像分辨率設置區域的裁剪尺寸,此處圖像分辨率為640x480

          ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10, 1), HMI_ConTROLSIZEY(10, 1)) '設置鎖存的大小

          TABLE(98)=60 '設置識別分數為60

          TABLE(50)=0

          ZV_SETSYSDBL("CamGetTimeout", 1000) '設置采集超時

          ZV_LATCHCLEAR(0)           '清空鎖存通道0

        

      END SUB


      image.png


      6.在camera.bas文件中添加HMI啟動界面中采集相關按鈕響應的函數并關聯動作函數。


      image.png


      說明:具體實現函數前面課程內容已經有操作演示,此處不做贅述。


      7.在draw.bas文件中添加檢測識別ROI更新繪制函數,并在自定義元件屬性窗口中關聯刷新函數和繪制函數。


      end


      '和繪制(即選擇ROI)有關的界面的刷新繪制函數放在這個bas文件里

          DIM is_redraw

          is_redraw = 0    

          DIM hit_pos,sr_mpos_x ,sr_mpos_y 


      '根據鼠標操作更新ROI位置區域函數

      GLOBAL SUB update_roi()

          if d_roi_arc_flag = 1 then   '如果選擇ROI類型為矩形

              SET_REDRAW    

              if mouse_scan(11) = 1 then  '掃描鼠標按下操作

                  '只有按下時可以改變擊中位置,獲取調整區域標志

                  hit_pos = ZV_HMIADJRECT2(table(11), table(12), 31, -1) 

                  is_redraw = 1    '將繪圖標志置1

              endif

        

              if mouse_scan(11) = -1 then  '掃描鼠標松開操作

                   '調整ROI的位置

                   ZV_HMIADJRECT2(table(11), table(12), 31, hit_pos)

                   is_redraw = 1   '將繪圖標志置1

              endif

          

             if (MOUSE_state(11)) then

                  '調整ROI的位置

                  ZV_HMIADJRECT2(table(11), table(12), 31, hit_pos)

                  is_redraw = 1   '將繪圖標志置1

             endif

          

              if (1 = is_redraw) then '繪制

                  is_redraw = 0    '將繪圖標志置0

                  ZV_POSTOIMG(0, 1, 31, 41)'將ROI的控件坐標數據轉到圖像坐標數據

                  d_reg_roi(0) = TABLE(41)'將ROI的圖像坐標數據賦值給定義的變量

                  d_reg_roi(1) = TABLE(42)

                  '將ROI在控件坐標系下的寬度、高度轉到像素寬度,并賦值給定義的變量

                  d_reg_roi(2) = ZV_LENTOIMG(0, TABLE(33))

                  d_reg_roi(3) = ZV_LENTOIMG(0, TABLE(34))

                  d_reg_roi(4) = TABLE(35)

                  

                  SET_REDRAW '全局繪制

              endif 

          else 

              SET_REDRAW  

          endif

      END SUB


      'ROI區域更新后實時繪制ROI區域

      GLOBAL SUB draw_roi()

          if d_roi_arc_flag = 1 then '如果ROI類型為矩形

              SET_COLOR(C_BLUE)    '設置繪制時畫筆的顏色為藍色

              ZV_HMIRECT2(31, 70) '將旋轉矩形roi分解為HMI支持的繪圖圖元并添加控制參數,便于HMI繪圖顯示

              DRAWLINE(TABLE(70), TABLE(71), TABLE(72), TABLE(73)) '繪制外矩形

              DRAWLINE(TABLE(72), TABLE(73), TABLE(74), TABLE(75))

              DRAWLINE(TABLE(74), TABLE(75), TABLE(76), TABLE(77))

              DRAWLINE(TABLE(76), TABLE(77), TABLE(70), TABLE(71))

              

              '繪制矩形中心到右邊線中心的箭頭

               DRAWLINE(TABLE(78), TABLE(79), TABLE(80), TABLE(81))

               DRAWLINE(TABLE(82), TABLE(83), TABLE(80), TABLE(81))

               DRAWLINE(TABLE(84), TABLE(85), TABLE(80), TABLE(81))

          endif 

      END SUB

      image.png


      8.點擊“元件”→“新建窗口”,新建訓練學習顏色模型窗口界面,并設計界面布局。


      image.png


      9.在main.bas文件中添加訓練學習顏色模型界面按下【訓練樣本】按鈕時響應的函數并關聯動作函數名。


      'HMI界面按下訓練樣本按鈕時響應的函數

      GLOBAL SUB btn_OpenLearning()

          ZV_LATCH(grabImg,0)

          HMI_SHOWWINDOW(11)

      END SUB

      image.png


      10.在draw.bas文件中添加訓練學習顏色ROI更新繪制函數,并在自定義元件屬性窗口中關聯刷新函數和繪制函數。


      '根據鼠標操作更新訓練顏色樣本的有效區域

      GLOBAL SUB update_learnroi()


           if mouse_scan(11) = 1 then    '掃描鼠標按下操作

                is_set_roi_m_down = 1       '鼠標按下標志置1

                sr_mpos_x = table(11)      '將當前鼠標按下位置的坐標賦值給變量

                sr_mpos_y = table(12)

                '只有按下時可以改變擊中位置,獲取鼠標點擊位置對應的擊中區域編號

                hit_pos = ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 25, -1) 

                is_redraw = 1              '繪圖標志置1

            endif

        

            if mouse_scan(11) = -1 then    '掃描鼠標松開操作

                is_set_roi_m_down = 0       '鼠標按下標志置0

                sr_mpos_x = table(11)       '將當前鼠標松開位置的坐標賦值給變量

                sr_mpos_y = table(12)

                '根據區域編號調整定位器區域位置

                ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 25, hit_pos)

                is_redraw = 1               '繪圖標志置1

            endif

            

          '如果鼠標按下時

            if (is_set_roi_m_down and MOUSE_state(11)) then

                sr_mpos_x = table(11)       '將當前鼠標按下位置的坐標賦值給變量

                sr_mpos_y = table(12)

                '根據區域編號調整定位器區域位置

                ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 25, hit_pos)

                is_redraw = 1               '繪圖標志置1

            endif 

          

          if (1 = is_redraw) then       '如果繪制標志=1

              is_redraw = 0              '將繪制標志置0

              '控件roi坐標轉圖像roi坐標,控件坐標存放在起始地址為25的數組,圖像坐標存放在起始地址為15的數組

              ZV_POSTOIMG(0, 2, 25, 15)

              '將圖像坐標的數據賦值給ROI變量中

              d_learn_roi(0) = TABLE(15)

              d_learn_roi(1) = TABLE(16)

              d_learn_roi(2) = TABLE(17)

              d_learn_roi(3) = TABLE(18)

              SET_REDRAW  '重新繪制全部區域

          endif

        

      END SUB


      '根據更新的鼠標位置坐標繪制訓練顏色樣本區域

      GLOBAL SUB draw_learnroi()

          '根據控件坐標數據繪制矩形

          DRAWRECT(TABLE(25), TABLE(26), TABLE(27), TABLE(28))

        

          local cx,cy   '定義局部變量

          cx = (TABLE(25) + TABLE(27)) / 2 '計算矩形的中心坐標x、y

          cy = (TABLE(26) + TABLE(28)) / 2

        

          DRAWLINE(cx-5, cy, cx+5, cy)  '繪制中心十字線

          DRAWLINE(cx, cy-5, cx, cy+5)

        

      END SUB

      image.png


      11.在main.bas文件中添加訓練學習顏色模型界面按下【學習樣本】按鈕時響應的函數并關聯動作函數名。


      '定義訓練顏色樣本界面按下學習樣本按鈕時響應的函數

      GLOBAL SUB btn_Learning()


          ZVOBJECT region

          ZV_REGENRECT(region,d_learn_roi(0),d_learn_roi(1),d_learn_roi(2)-d_learn_roi(0)+1,d_learn_roi(3)-d_learn_roi(1)+1) '生成矩形區域

          if (STRCOMP(d_sample_name, "")=0) then 

               ?"請先輸入需要學習的顏色樣本名稱!"

               return 

          else 

               ZV_CLRGENMODELRE_(grabImg,region,ColorMod,d_sample_name,0)'在 RGB 顏色空間生成顏色模型

               ZV_LISTINSERT(ColorMod,mod_list,-1)    '將顏色模型插入到列表

               ?"學習"d_sample_name"樣本成功!"

          endif

        

      END SUB

      image.png


      12.在main.bas文件中添加訓練學習顏色模型界面按下【清空樣本】按鈕時響應的函數并關聯動作函數名。


      '定義訓練顏色樣本界面按下清空樣本按鈕時響應的函數

      GLOBAL SUB btn_Clear()

          if(ZV_ISEMPTY(mod_list)=0) then '如果訓練樣本庫不為空

               ZV_CLEAR(mod_list)

               ?"已清空樣本列表!"

          endif

      END SUB

      image.png


      13.在main.bas文件中添加訓練學習顏色模型界面按下【確定】按鈕時響應的函數并關聯動作函數名。


      '定義訓練顏色樣本界面按下確定按鈕時響應的函數

      GLOBAL SUB btn_Confirm()

          HMI_CLOSEWINDOW(11)

      END SUB

      image.png

      14.在main.bas文件中添加HMI啟動界面按下【測試】按鈕響應的函數并關聯動作函數。


      '定義HMI界面按下測試按鈕時響應的函數

      GLOBAL SUB btn_test()

           TICKS=0

           ZVOBJECT regionMask

           TABLE(50)=0

           '

           

           if d_roi_arc_flag = 1 then '如果選擇的ROI類型是矩形

                '根據ROI數據生成旋轉矩形區域

                ZV_REGENRECT2(regionMask, d_reg_roi(0), d_reg_roi(1), d_reg_roi(2), d_reg_roi(3), d_reg_roi(4))

           else

                '生成全圖像區域

                 ZV_REGENFULLIMG(grabImg,regionMask)

           endif

           

           if(ZV_ISEMPTY(mod_list)=1) then '如果訓練樣本庫為空

                ?"顏色模型庫為空!"

                return

           else   

                ZV_CLRMODELCLASSIFY_(mod_list,grabImg,regionMask,128,50,104,98)'顏色識別 

           endif

           

           d_detect_time=abs(TICKS)

      END SUB

      15.在main.bas文件中添加HMI啟動界面按下【運行】按鈕響應的函數并關聯動作函數。


      '主界面點擊運行按鈕時響應的函數

      GLOBAL SUB btn_run()

          if(run_switch = 1) then  '如果已經開啟連續運行

               ?"已開啟連續運行,請勿重復操作!" '提示信息并退出子函數,不往下執行

               return 

          endif

        

          run_switch = 1      '主任務開關置1

          if (1 = run_switch) then   '如果主任務開關=1

              if (0 = PROC_STATUS(main_task_id)) then '如果main_task_id任務未開啟

                   RUNTASK  main_task_id, main_task    '開啟main_task任務

              endif

          endif

      END SUB


      '主任務執行的內容

      main_task:

          while(1)

              if (0 = run_switch) then '如果主任務開關=0即停止運行按鈕按下時

                  exit while           '退出循環

              endif

              

              '否則重復執行以下操作

              '執行單次采集響應函數獲取一幀圖像

              btn_grab() 

              '執行檢測識別顏色子程序          

              btn_test()

          wend

      END

      image.png


      16.在main.bas文件中添加HMI啟動界面按下【停止】按鈕響應的函數并關聯動作函數。


      '主界面點擊停止按鈕時響應的函數

      GLOBAL SUB btn_stop()

          if(run_switch = 0) then  '如果主任務開關=0

               ?"未開啟連續運行!"     '提示未開啟循環任務,并退出子函數不往下執行

               return 

          endif

          run_switch = 0            '主任務開關置0,退出循環

      END SUB

      image.png


      (二)仿真演示


      image.png

      image.png

      image.png


      本次,正運動技術機器視覺運動控制一體機應用例程(二)——顏色識別,就分享到這里。


      更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。


      本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。


      下一篇: PLC、DCS、FCS三大控

      上一篇: 機器視覺運動控制一體

      推薦產品

      更多
      主站蜘蛛池模板: 丁香狠狠色婷婷久久综合| 亚洲国产天堂久久综合网站| 成人亚洲综合天堂| 狠狠色丁香婷婷综合久久来 | 天天综合天天综合色在线| 香蕉蕉亚亚洲aav综合| 亚洲综合区图片小说区| 色婷婷五月综合丁香中文字幕| 情人伊人久久综合亚洲| 亚洲欧美国产国产综合一区| 99久久国产综合精品女同图片| 在线综合亚洲欧洲综合网站| 久久久久综合网久久| 久久亚洲欧洲国产综合| 色欲香天天综合网站| 色综合67194| 天天在线天天综合网色| 国产精品国色综合久久| 国产91久久综合| 久久综合九色综合97伊人麻豆| 青青青伊人色综合久久| 一本一道久久综合狠狠老| 亚洲色偷偷综合亚洲AV伊人| 色天天综合久久久久综合片| 五月天综合色激情| 亚洲欧洲综合在线| 91丁香亚洲综合社区| 亚洲婷婷第一狠人综合精品| 久久综合给久久狠狠97色| 久久国产精品亚洲综合| 无码专区久久综合久中文字幕| 久久香蕉综合色一综合色88| 亚洲亚洲人成综合网络| 狠狠色狠狠色综合伊人| 亚洲国产成人久久综合一| 亚洲综合男人的天堂色婷婷| 亚洲综合久久一本伊伊区| 好了av第四综合无码久久| 国产综合精品一区二区| 伊人婷婷色香五月综合缴激情| 狠狠色伊人亚洲综合成人|