《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 阈值处理

《HALCON机器视觉与算法原理编程实践》第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算子
《HALCON机器视觉与算法原理编程实践》第6章 图像分割-学习笔记_第2张图片

6.2 区域生长法

《HALCON机器视觉与算法原理编程实践》第6章 图像分割-学习笔记_第3张图片
区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:

  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)

你可能感兴趣的:(#,1.1,halcon,#,0.4,机器视觉)