日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

halcon 粘连物体分割

發布時間:2024/1/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 halcon 粘连物体分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號:機器視覺那些事兒

“古人云,一生二,二生三,三生萬物。古人有云,水之清則無敵。故名三清!”

此次選取的案例依然是官方Blob案例–基于歐式距離的分水嶺算法的區域分割。Halcon的官方例程,都是頂級工程師的思想精華,大多實際項目的難度并沒有官方例程復雜,由于官方例程針對的是有一定Halcon基礎的,本人在此次處理時添加了詳細的中文注釋,做出一定的調整,更容易讓讀者理解和接受。

  • 原理簡介
  • 第1步:

    使用區域距離變換算子獲取距離信息圖

    distance_transform(Region:DistanceImage:Metric,Foreground,Width,Height)

    距離變換簡化了分水嶺算法的復雜度。距離變換針對二值圖像,目標像素為1,背景像素為0。距離變換的結果圖像是一個灰度圖像,灰度值就是圖像中該像素距離其最近的背景像素的距離。

    假設兩個像素點P1(x1,y1),P2(x2,y2)

    距離D = sqrt((x1-x2)(x1-x2) + (y1-y2)(y1-y2))

    第2步:

    使用閾值分水嶺算子獲取盆地
    watersheds_threshold(Image : Basins : Threshold : )

    分水嶺算法是一種基于拓撲理論的數學形態學的分割方法,基本思想是把圖像看做拓撲地貌,圖像中的每一點像素的灰度值表示該店的海拔高度,高灰度代表山脈,低灰度代表盆地,每一個局部極小值及其影響區域成為集水盆,而集水盆的邊界形成分水嶺。

    第3步:
    根據第一步分水嶺算法分離結果,若盆地部分的灰度< threshold,則被合并到一起。設B1和B2分別為相鄰盆地的最小灰度值,W為將盆地分割為兩個盆地的最小灰度值。

    則分割結果為:

    2.程序使用的算子

    distance_transform(Region:DistanceImage:Metric,Foreground,Width,Height)區域距離變換

    watersheds_threshold(Image : Basins : Threshold : )閾值分水嶺

    connection(Region : ConnectedRegions : : )計算區域的連通域

    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 20, 99999) 根據區域特征(面積、長度等)提取區域

    distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )計算區域的距離變換

    convert_image_type(Image : ImageConverted : NewType : )轉換圖像類型(byte* / direction* / cyclic* / int1* / int2* / uint2* / int4* / int8 / real* / complex*)

    invert_image(Image : ImageInvert : : )反轉圖像

    scale_image_max(Image : ImageScaleMax : : )將圖像灰度范圍擴大到【0,255】

    intersection(Region1, Region2 : RegionIntersection : : )計算區域的交集

    4.算法思路

    • (1)簡單的閾值分割;

    • (2)計算連通域connection;

    • (3)基于距離變換的分水嶺區域分割,使用算子distance_tansform,watersheds

    • (4)盆地與原連通域求交集,分離粘連顆粒;

      5.現學現用

    (1)讀入原圖,簡單的閾值分割

    *采集圖像

    dev_close_window ()
    read_image (Image, ‘pellets’)

    *計算圖片大小,并以原圖尺寸顯示
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
    dev_display (Image)
    stop ()

    *01 簡單的閾值分割
    threshold (Image, Region, 105, 255)

    閾值分割

    (2)計算連通域connection

    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 20, 99999)
    dev_set_draw (‘margin’)
    dev_display (Image)
    dev_display (SelectedRegions)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

    計算連通域并篩選連通域

    部分顆粒粘連處在一個連通域

    (3)基于距離變換的分水嶺區域分割,使用算子distance_tansform,watersheds

    *03 基于距離變換的分水嶺區域分割,使用算子distance_tansform,watersheds
    *距離變換
    distance_transform (SelectedRegions, DistanceImage, ‘octagonal’, ‘true’, 380, 350)
    *轉換圖像類型,將real類型轉換為byte,因為分水嶺迭代運算的圖像為‘byte’類型
    convert_image_type (DistanceImage, DistanceImageByte, ‘byte’)
    *反轉圖像,使得高灰度值在邊緣代表山脈,低灰度值在里面代表盆地
    invert_image (DistanceImageByte, DistanceImageInv)

    *擴大圖像灰度范圍【0,255】,增加對比度

    scale_image_max (DistanceImageInv, DistanceImageInvScaled)
    watersheds_threshold (DistanceImageInv, Basins, 5)
    dev_display (DistanceImageInvScaled)
    dev_display (Basins)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

    分水嶺圖

    已成功分割粘連顆粒

    (4)盆地與原連通域求交集,分離粘連顆粒;

    *04 盆地與原連通域求交集,分離粘連顆粒

    intersection (Basins, SelectedRegions, SegmentedPellets)

    最終效果圖

    成功分割粘連顆粒

    原圖及完整源代碼見百度網盤:

    鏈接:https://pan.baidu.com/s/1FV2zYWK2gnA0duFdLnIlXA 密碼:h7t7

    總結

    以上是生活随笔為你收集整理的halcon 粘连物体分割的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。