《HALCON机器视觉与算法原理编程实践》第6章图像分割

文章目录

  • 6.1 阈值处理
    • 6.1.1 全局阈值
    • 6.1.2 基于直方图的自动阈值分割方法
    • 6.1.3 自动全局阈值分割方法
    • 6.1.4 局部阈值分割方法
    • 6.1.4 其它阈值分割方法
  • 6.2 区域生长法
    • 6.2.1 regiongrowing 算子
    • 6.2.2 regiongrowing_mean 算子
  • 6.3 分水岭算法

6.1 阈值处理

图像阈值处理是实现图像分割的一种方法,常用的阈值分割方法有简单阈值,自适应阈值,Otsu’s二值化等。

6.1.1 全局阈值

read_image (Image,'data/codes.jpg')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, DarkArea, 0, 128)

6.1.2 基于直方图的自动阈值分割方法

read_image (Image,'data/shapes')
rgb1_to_gray (Image, GrayImage)
auto_threshold(GrayImage,Regions,8.0)**下面是直方图波形对比
*gray_histo (GrayImage, GrayImage, AbsoluteHisto1, RelativeHisto1)
*gen_region_histo (Histo1, AbsoluteHisto1, 255, 5, 1)
*dev_clear_window ()
*create_funct_1d_array (AbsoluteHisto1, Function)
*smooth_funct_1d_gauss (Function, 8.0, SmoothedFunction)
*dev_set_color ('red')
*funct_1d_to_pairs (SmoothedFunction, XValues, YValues)
*gen_region_histo (Histo2, YValues, 255, 255, 1)

6.1.3 自动全局阈值分割方法

read_image (Image, 'data/codes.jpg')rgb1_to_gray (Image, GrayImage)binary_threshold (GrayImage, RegionMaxSeparabilityLight, 'max_separability', 'dark', UsedThreshold)

6.1.4 局部阈值分割方法

read_image (Image, 'data/text.jpg')
*将图像转换为灰度rgb1_to_gray (Image, GrayImage)
*由于图像对比度比较低,对图像进行相乘,增强对比度mult_image (GrayImage, GrayImage, ImageResult, 0.005, 0)
*使用平滑滤波器对原始图像进行适当平滑mean_image (ImageResult, ImageMean, 50,50)
*动态阈值分割,提取字符区域dyn_threshold (ImageResult, ImageMean, RegionDynThresh, 4, 'not_equal')
*开运算,去除无意义的小的杂点opening_circle (RegionDynThresh, RegionOpening, 1.5)
dev_clear_window()
dev_display (RegionOpening)
read_image (Image, 'data/garlic')*将图像转换为灰度rgb1_to_gray (Image, GrayImage)*使用平滑滤波器对原始图像进行适当平滑mean_image (GrayImage, ImageMean, 30,30)*动态阈值分割,提取字符区域dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 30, 'not_equal')*腐蚀操作,去除杂点erosion_circle (RegionDynThresh, RegionClosing, 1.5)

6.1.4 其它阈值分割方法

(1)var_threshold算子

read_image (Image,'data/holes.jpg')rgb1_to_gray (Image, GrayImage)*设置矩形,选择感兴趣区域gen_rectangle1 (Rectangle, 170, 80, 370, 510)reduce_domain (GrayImage, Rectangle, ImageReduced)var_threshold (ImageReduced, Region, 15, 15, 0.2, 35, 'dark')

(2)char_threshold 算子

read_image (Char, 'data/char')rgb1_to_gray (Char, GrayImage)char_threshold (GrayImage, GrayImage, Characters, 6, 95, Threshold)

(3)dual_threshold算子

6.2 区域生长法

区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:

  1. 给定种子点(种子点如何选取?)
    种子点的选取很多时候都采用人工交互的方法实现,也有用其他方式的,比如寻找物体并提取物体内部点作为种子点。

  2. 确定在生长过程中能将相邻像素包括进来的准则
    灰度图像的差值;彩色图像的颜色等等。都是关于像素与像素间的关系描述。

  3. 生长的停止条件

6.2.1 regiongrowing 算子

read_image(Image,'data/village')*对原图进行了均值处理,选用了5*5的滤波器mean_image(Image,Mean,5,5)*使用了区域生长算子寻找颜色相似的邻域regiongrowing(Mean,Regions,1,1,3.0,100)*对提取区域做了形态学处理,使区域更加平滑和完整closing_circle (Regions, RegionClosing, 3.5)

6.2.2 regiongrowing_mean 算子

read_image (Image, 'data/village')*对原图进行了均值处理,选用了“circle”类型的中值滤波器median_image (Image, ImageMedian, 'circle', 2, 'mirrored')*使用了区域生长算子寻找颜色相似的邻域regiongrowing (ImageMedian, Regions, 1, 1, 3, 500)*对图像进行粗略的区域分割,提取满足条件的各个独立区域shape_trans (Regions, Centers, 'inner_center')connection (Centers, SingleCenters)*对初步提取的区域计算出了中心点坐标area_center (SingleCenters, Area, Row, Column)*以均值灰度图像为输入,进行区域生长计算,计算的起始坐标为上一步的各区域中心regiongrowing_mean (ImageMedian, RegionsMean, Row, Column, 25, 100)

6.3 分水岭算法

*输入待检测的木材图像read_image (Image, 'data/woodboard')*将原始图转化为灰度图。便与后续的平滑处理rgb1_to_gray (Image, GrayImage)*对单通道图像进行高斯平滑处理,以去除噪声gauss_filter (GrayImage, ImageGauss, 11)*对高斯平滑后的图像进行分水岭处理,阈值分割,提取出盆地区域watersheds (ImageGauss, Basins1, Watersheds)watersheds_threshold(ImageGauss, Basins, 50)
(0)

相关推荐