halcon学习之图像分割

同样大家看看原理和halcon的说明文档,这里推荐一本书叫做《机器视觉算法原理与编程实践》,我是跟着这个学的,感觉不难学习,然后就可以看大量的官方例程了

*1.基于直方图的自动阈值分割方法
read_image (Image, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/shapes')
rgb1_to_gray (Image, GrayImage)
auto_threshold (GrayImage, Regions, 8)
*画直方图
gray_histo (GrayImage, GrayImage, AbsoluteHisto, RelativeHisto)
*平滑前的直方图
gen_region_histo (Region, AbsoluteHisto, 255, 15, 1)
create_funct_1d_array (AbsoluteHisto, 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)

*2.自动全局阈值分割
read_image (Image1, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/codes')
rgb1_to_gray (Image1, GrayImage1)
binary_threshold (GrayImage1, Region1, 'max_separability', 'dark', UsedThreshold)

*3.局部阈值分割
read_image (Image2, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/text')
rgb1_to_gray (Image2, GrayImage2)
*因为对比度较低,因此使用图像相乘,增强对比度
mult_image (GrayImage2, GrayImage2, ImageResult, 0.005, 0)
*使用平滑滤波器对原始图像进行适当的平滑
mean_image (ImageResult, ImageMean, 50, 50)
*动态阈值分割,提取字符区域
dyn_threshold (ImageResult, ImageMean, RegionDynThresh, 4, 'not_equal')
*开运算
opening_circle (RegionDynThresh, RegionOpening, 1.5)

*再举一个例子
read_image (Image3, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/garlic')
rgb1_to_gray (Image3, GrayImage3)

*先平滑一下
mean_image (GrayImage3, ImageMean1, 30, 30)

*动态阈值分割,然后提取
dyn_threshold (GrayImage3, ImageMean1, RegionDynThresh1, 30, 'not_equal')

*腐蚀
erosion_circle (RegionDynThresh1, RegionErosion, 1.5)

*其他阈值分割方法
*var_threshold
read_image (Image4, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/holes')
rgb1_to_gray (Image4, GrayImage4)
var_threshold (GrayImage4, Region2, 15, 15, 0.2, 32, 'dark')

char_threshold (GrayImage4, Region2, Characters, 2, 95, Threshold)
dual_threshold (GrayImage4, RegionCrossings, 20, 5, 2)
*2.区域生长法,该算法主要是通过相似区域的相连区域,以此找到符合条件的像素点集合,因此需要现在图像中选择一个种子点的像素
*以此种子的领域开始搜索,符合条件就添加进来,,最终代表同一个物体就在同一个种子区域了
*主要算子为regiongrowing
read_image (Image5, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/village')
mean_image (Image5, ImageMean2, 5, 5)
regiongrowing (ImageMean2, Regions1, 1, 1, 3, 100)
closing_circle (Regions1, RegionClosing, 3.5)
connection (RegionClosing, ConnectedRegions)
*regiongrowing_mean算子
*和上面的不同是需要输入的均值后的图像
read_image (Image5, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/village')
median_image (Image5, ImageMedian, 'circle', 2, 'mirrored')
*先通过regiongrowing粗略定位种子区域,然后使用regiongrowing_mean在细节分割
regiongrowing (ImageMedian, Regions1, 1, 1, 3, 100)
closing_circle (Regions1, RegionClosing, 3.5)
shape_trans (RegionClosing, RegionTrans, 'inner_circle')
connection (RegionTrans, ConnectedRegions)
area_center (ConnectedRegions, Area, Row, Column)
regiongrowing_mean (ImageMedian, Regions2, Row, Column, 25, 100)

 

*3.分水岭算法
read_image (Image, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/woodboard')
rgb1_to_gray (Image, GrayImage)
gauss_filter (GrayImage, ImageGauss, 11)
watersheds (ImageGauss, Basins, Watersheds)
watersheds_threshold (ImageGauss, Basins1, 50)

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/105741396