一、Halcon编程之图像处理
1、读取图片
1、读取单个图片:
1.1 直接用算子read_image
read_image (Image, 'D:/3.tiff')
2、读取多个图片
2.1 定义一个存放图片路径的数组,通过循环读取
imagepath:=[]
imagepath[0]:=['D:/1.tiff']
imagepath[1]:=['D:/2.tiff']
imagepath[2]:=['D:/3.tiff']
for Index := 1 to 5 by 1
read_image (Image,imagepath[Index])
endfor
2.2 循环遍历读取
for i := 1 to 3 by 1
read_image (Image,'D:/'+i+'.tiff')
endfor
2.3 循环遍历读取
list_files ('D:/Images', ['files','directories','recursive','max_depth 2','max_files 8','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
* Image Acquisition 02: Do something
endfor
3、工具栏—>读取图像
4、通过工具栏的【助手】
2、图像预处理
一般来说,我们采集到的图像会有一些小黑点,小斑点,不平滑等因素会会影响我们后期的算法,此时就需要我们对其图片进行预处理。
下面是一些预处理基本算子:
1、消除噪声:mean_image/binomial_filter
mean_image(Image,ImageMean,MaskWidth,MaskHeight)
参数:
Image:输入图像
ImageMean:输出图像
MaskWidth:遮掩的宽度【要过滤的宽度】
默认值: 9
建议值: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101
典型区域值: 1 ≤ MaskWidth ≤ 501
MaskHeight:遮掩的高度【要过滤的高度】
默认值: 9
建议值: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101
典型区域值: 1 ≤ MaskHeight ≤ 501
binomial_filter(Image,ImageBinomial,MaskWidth,MaskHeight)
参数:
Image :输入图像
ImageBinomial:输出图像
MaskWidth :遮掩的宽度【要过滤的宽度】
默认值: 5
可选值: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37
MaskHeight :遮掩高度【要过滤的高度】
默认值: 5
可选值: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37
2、抑制小斑点或者细线:median_image
median_image(Image,ImageMedian,MaskType,Radius,Margin)
参数:
Image:输入图像
ImageMedian:输出图像
MaskType:掩饰类型
Filter mask type.
默认值: 'circle'
可选值: 'circle', 'square'
可选值 (为计算机设备): 'square'
Radius :半径
默认值: 1
可选值 (为计算机设备): 1, 2
建议值: 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 19, 25, 31, 39, 47, 59
典型区域类型值: 1 ≤ Radius ≤ 4095
Margin :
边界处理.
默认值: 'mirrored'
可选值 (为计算机设备): 'mirrored'
建议值: 'mirrored', 'cyclic', 'continued', 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
3、平滑:smooth_image
smooth_image(Image,ImageSmooth,Filter,Alpha)
参数:
Image :输入图像
ImageSmooth:输出图像
Filter :过滤
默认值: 'deriche2'
可选值: 'deriche1', 'deriche2', 'gauss', 'shen'
Alpha :
过滤参数: 小值导致强烈的平滑(亦然用 bei 'gauss').
默认值: 0.5
建议值: 0.1, 0.2, 0.3, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 7.0, 10.0
典型的范围值: 0.01 ≤ Alpha ≤ 50.0
最小增量: 0.01
建议增加: 0.1
限制: Alpha > 0
4、保存边缘的平滑:anisotropic_diffusion
anisotropic_diffusion(Image,ImageAniso,Mode,Contrast,Theta,Iterations)
参数:
Image:输入图像
ImageAniso:输出图像
Mode:
扩散系数函数的振幅
默认值: 'weickert'
可选值: 'parabolic', 'perona-malik', 'weickert'
Contrast:
对比,差别
默认值: 5.0
建议值: 2.0, 5.0, 10.0, 20.0, 50.0, 100.0
限制: Contrast > 0
Theta:
时间步
默认值: 1.0
建议值: 0.5, 1.0, 3.0
限制: Theta > 0
Iterations:
迭代次数
默认值: 10
建议值: 1, 3, 10, 100, 500
限制: Iterations >= 1
5、scale_image
scale_image(Image : ImageScaled : Mult, Add : )缩放图像的灰度值。最佳Mult和Add值的选取由下:
其中:GMin为图像的最大灰度值,GMax为图像的最小灰度值。
可配合算子min_max_gray(Regions, Image : : Percent : Min, Max, Range)得到。
min_max_gray(Regions, Image : : Percent : Min, Max, Range)确定区域内的最小和最大灰度值
min_max_gray创建输入图像图像区域内灰度值绝对值的直方图(参见gray_histo),并计算与输入图像区域相对应的像素百分比。然后它会在直方图的两边以这个像素的数量向内移动,并确定最小和最大的灰度值。
6、Sigma_image