5000人网站开发,php网站建设外国参考文献,免费网站空间10g,本地电脑做服务器 建网站目录 图像获取生成单通道图像图像运算加法运算减法运算乘法运算除法 仿射变换图像平滑#xff08;噪点处理#xff09;高斯滤波均值滤波中值滤波多图像均值 边缘滤波索贝尔滤波凯尼滤波 图像锐化索贝尔锐化拉普拉斯锐化高通滤波锐化几种锐化方式对比 图像获取 用到的函数噪点处理高斯滤波均值滤波中值滤波多图像均值 边缘滤波索贝尔滤波凯尼滤波 图像锐化索贝尔锐化拉普拉斯锐化高通滤波锐化几种锐化方式对比 图像获取 用到的函数 1.读取目录 list_files( Directory, Options : Files) Directory必须为一个目录 Files时读取到文件的变量 读出来就是目录数组 2.筛选文件数组 tuple_regexp_select( Data, Expression : Selection) Data为筛选的文件组 Expression为正则表达式 Selection为输出 3.读取图像 read_image( : Image : FileName : ) Image为读取后图像输出 FileName为图像文件名就是文件的路径 例子 注意:如果read_image时报格式错误就是读取的图片后缀格式和实际的格式不符合 也可以手动读取 拖拽也行 也可以用图像采集助手
生成单通道图像
*生成一张无灰度的图片即纯黑图片 gen_image_const(Image, ‘byte’, 15, 15) 第一个参数Image是生成的图像 第二个参数Type是图像生成的类型见下 第三个参数Width宽 第四个参数Height高 Type:
The operator gen_image_const creates an image of the indicated size. The width and height of the image are determined by Width and Height. HALCON supports the following image types:byte
1 byte per pixel, unsignedValue range: (0..255)int1
1 byte per pixel, signedValue range: (-128..127)uint2
2 bytes per pixel, unsignedValue range: (0..65535)int2
2 bytes per pixel, signedValue range: (-32768..32767)int4
4 bytes per pixel, signedValue range: (-2147483648..2147483647)int8
8 bytes per pixel, signed (only available on 64 bit systems)Value range: (-9223372036854775808..9223372036854775807)real
4 bytes per pixel, floating pointValue range: (-3.4e38..3.4e38)Precision: 6 significant decimal digitscomplex
Two matrices of type realvector_field_relative
Two matrices of type realInterpretation: Vectorsvector_field_absolute
Two matrices of type realInterpretation: Absolute coordinatesdirection
1 byte per pixel, unsignedValue range: (0..179)Interpretation: Angle divided by twoAttention: The values 180..254 are automatically set to the value 255, which is interpreted as undefined angle.cyclic
1 byte per pixel, unsigned, cyclic arithmeticsValue range: (0..255)With the operator set_system(init_new_image,true/false), it can be controlled whether the created image is initialized with 0 or not.*生成一张灰度渐变图片 gen_image_gray_ramp(ImageGrayRamp, 20, 1, 128, 7, 7, 15, 15) 根据下面的公式创建一个渐变的图像 ImageGrayRamp(r,c)Alpha×(r-row)Beta×(c-col)平均值2 第一个参数ImageGrayRamp是生成的图像 第二个参数Alpha是Alpha的值控制图像过度平滑度分布越小越平滑灰度值也就越少. 第三个参数Beta是Beta值控制图像的倾斜 第四个参数Mean是平均灰度值 第五个参数Row是row值 第六个参数Column是Column值 第七个参数Width宽 第八个参数Height高
*生成一张有灰度的图像单通道 gen_image_proto(ImageGrayRamp, ImageCleared, 128) 第一个参数Image是输出图像的尺寸和这个图像相同 第二个参数ImageCleared是生成的图像 第三个参数Grayval是图像的常量灰度值
*设置图像某点灰度值,ramp的意思是灰度渐变图像还是单通道 set_grayval(ImageGrayRamp, 7, 7, 255) 第一个参数Image是输入需要设置的图像 第二个参数Row是需要改变灰度的y坐标 第三个参数Column是需要改变灰度的x坐标 第四个参数Grayval是修改后的灰度值
图像运算
注意运算一般需要图像的大小通道数一致
加法运算
对于单通道图像的加法运算是将两幅图片的灰度值进行相加g’ : (g1 g2) * Mult Add add_image (ImageA, ImageB, ImageAdd, Mult , Add) 第1个参数ImageA是加数 第2个参数ImageB是加数 第3个参数ImageAdd结果图像 第4个参数Mult是Mult值 第5个参数Add是Add值
例子
list_files(C:/Users/24774/Desktop/新建文件夹/,[files],ImageFiles)
tuple_regexp_select(ImageFiles,[\\.(jpg|png|jpeg)$, ignore_case],ImageFiles)
*\\转义字符(|)选择ignore_case忽略大小写
*生成单通道纯黑图像
gen_image_const (ImageAdd, byte, 1000, 600)
*生成三个指定灰度的单通道图像大小和ImageAdd相同
gen_image_proto(ImageAdd, ImageA, 0)
gen_image_proto(ImageAdd, ImageB, 0)
gen_image_proto(ImageAdd, ImageC, 0)
*合并通道生成三通道彩色图片RGB
compose3(ImageA, ImageB, ImageC, ImageAdd)for Index:0 to |ImageFiles| - 1 by 1read_image(Image,ImageFiles[Index])*裁剪图像保证图像大小一致crop_part (Image, ImagePart, 0, 0, 1000, 600)*0.5对应值越大越清除但是重叠图像越亮10对应值越大重叠的部分越和谐但是越模糊add_image (ImageAdd, ImagePart, ImageAdd, 0.3, 100)
endfor减法运算
可以用于找两张图片的不同 对于单通道图像的减法运算是将两幅图片的灰度值进行相减g’ : (g1 - g2) * Mult Add sub_image(ImageMinuend, ImageSubtrahend, ImageSub, Mult, Add) 第1个参数ImageMinuend是被减数图像 第2个参数ImageSubtrahend是减数图像 第3个参数ImageSub结果图像 第4个参数Mult是Mult值 第5个参数Add是Add值
乘法运算
单通道图像中乘法会把灰度值相乘 例子
read_image (ImageA, C:/Users/24774/Desktop/新建文件夹/1716282654639.jpg)
rgb1_to_gray(ImageA,GrayImage)
gen_image_proto(ImageA, ImageB, 0)*生成一个矩形区域
gen_rectangle1(Rectangle, 112, 412, 312, 832)
*区域绘制到图像上fill为整个margin为边缘paint_region只接受单通道图像多通道请拆分画完合并
paint_region (Rectangle, ImageB, ImageB, 255, fill)
*乘法灰度值相乘g : g1 * g2 * Mult Add1.0哟不然1/2550g1 * g2 * Mult超过255会全白
mult_image (ImageB, GrayImage, ImageMult, 1.0/255, 0)除法
触发可以进行图像的亮度矫正。比如流水线上每天亮度不一样对图像就有影响我们可以通过触发减小这种影响就叫亮度矫正 div_image(ImageConverted1, ImageConverted2, Result, 1, 0) 公式g’ : g1 / g2 * Mult Add 第一个参数ImageConverted1为被除数 第二个参数ImageConverted2为除数 第三个参数Result为结果 第4个参数Mult是Mult值 第5个参数Add是Add值
仿射变换
先生成一个对角矩阵 对对角矩阵进行变换 通过对角矩阵对图像进行变换矩阵相乘
函数只说两个其他的看例子很简单。 affine_trans_image(Image, ImageAffineTrans. HomMat2D, Interpolation, AdaptImageSize) 第一个参数Image是被变换的图像 第二个参数ImageAffineTrans是变换后的图像 第三个参数HomMat2D是变换矩阵就是按照这个矩阵变换 第四个参数Interpolation是变换方法 nearest_neighbor 最近邻插值灰度值由最近像素的灰度值确定可能质量低速度非常快。 bilinear 双线性插值。灰度值是通过双线性插值从四个最近的像素确定的。如果仿射变换包含比例因子 1 的缩放则不执行平滑这可能会导致严重的锯齿效应中等质量和运行时间。 bicubic 双三次插值。灰度值是通过双三次插值从最近的像素确定的。如果仿射变换包含比例因子 1 的缩放则不执行平滑这可能会导致严重的锯齿效应放大质量高速度慢。 constant 双线性插值。灰度值是通过双线性插值从四个最近的像素确定的。如果仿射变换包含比例因子 1 的缩放则使用一种均值滤波器来防止混叠效应中等质量和运行时间。 weighted 双线性插值。灰度值是通过双线性插值从四个最近的像素确定的。如果仿射变换包含比例因子 1 的缩放则使用一种高斯滤波器来防止混叠效应高质量慢。 第五个参数AdaptImageSize是对齐方式false是左上角对齐true是右下角对齐 *倾斜变换矩阵 hom_mat2d_slant( HomMat2D, Theta, Axis, Px, Py, HomMat2DSlant) 第一个参数HomMat2D是待变换矩阵 第二个参数Theta是倾斜度 0 ≤ Theta ≤ 6.28318530718 第三个参数Axis是按什么坐标倾斜 ‘x’, ‘y’ 第四个参数Px变换的固定点x 坐标 第五个参数Py变换的固定点y 坐标 第六个参数HomMat2DSlant是变换后的矩阵 read_image (Image, C:/Users/24774/Desktop/新建文件夹/1716282654639.jpg)*生成对角矩阵
hom_mat2d_identity (HomMat2DIdentity)
*左上角xy平移300
hom_mat2d_translate (HomMat2DIdentity, 300, 300, HomMat2DTranslate)*平移仿射
affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, constant, false)*比例变换矩阵,0,0点为基准放大两倍
hom_mat2d_scale (HomMat2DIdentity, 2, 2, 0, 0, HomMat2DScale)
*比例变换仿射
affine_trans_image (Image, ImageAffineTrans, HomMat2DScale, constant, false)*旋转矩阵
hom_mat2d_rotate (HomMat2DIdentity, 0.78, 300, 300, HomMat2DRotate)
*旋转仿射
affine_trans_image (Image, ImageAffineTrans, HomMat2DRotate, constant, false)*倾斜变换矩阵
hom_mat2d_slant (HomMat2DIdentity, 1, y, 2, 2, HomMat2DSlant)
*倾斜变换仿射
affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, constant, false)
图像平滑噪点处理
用于减少图像中的噪声和细节从而使图像看起来更平滑和更柔和。其主要目的是去除图像中的高频成分例如噪声和细小的纹理同时保留低频成分例如大的结构和边缘。这在许多应用中非常有用例如减少相机传感器产生的噪声、降低图像中的细节以便于进一步处理如边缘检测或增强图像的视觉效果。
1 高斯噪声 即图像信号的噪声符合高斯分布属于白噪音的一种。 根据噪声分布的不同还有泊松分布等 2白噪声 白噪声是一种统计特性均匀的噪声其频率成分在整个频谱范围内是均匀分布的。如果一幅图像受到白噪声的影响每个像素的灰度值可能会被随机地增加或减少具体变化量遵循某个概率分布例如高斯分布。
与椒盐噪声的区别是分布均匀颜色不是均匀的可能按照某种分布颜色不止极黑极白。 3椒盐噪声 就像老电视的‘雪花’椒盐噪声(salt-and-pepper noise)又称脉冲噪声它随机改变一些像素值在二值图像上表现为使一些像素点变白一些像素点变黑。 是由图像传感器传输信道解码处理等产生的黑白相间的亮暗点噪声。即只有黑白点
高斯滤波
适用于消除高斯噪音。 gauss_filter(Image, ImageGauss, Size) Size值有: 3 (0.600) 5 (1.075) 7 (1.550) 9 (2.025) 11 (2.550)
均值滤波
mean_image(Image ImageMeanMaskWidth, MaskHeight) 第一个参数Image是需要滤波的图像 第二个参数ImageMean是输出图像 第三个参数MaskWidth是掩膜宽度 第四个参数MaskHeight是掩膜高度
中值滤波
median_image(Image, ImageMedian, MaskType, Radius, Margin) 第一个参数Image是需要滤波的图像 第二个参数ImageMedian是输出图像 第三个参数MaskType是掩膜方式有’circle’, ‘square’ 第四个参数Radius是掩膜半径 1 ≤ Radius ≤ 4095 第五个参数Margin是边界处理方式建议值‘mirrored’, ‘cyclic’, ‘continued’, 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
多图像均值
一般是将多张相同的灰度图像滤波 mean_n(Image, ImageMean) 第一个参数Image是需要运算的多通道灰度图像 第二个参数ImageMean为运算后的图像
Image需要使用append_channel将多个图像的通道全部添加到一个图像 比如MotionImage和Image灰度图像是单通道append_channelMotionImages, Image, MotionImage运行后MotionImage为2通道灰度图像。
*多图像均值滤波
NumImage : 3
for Index : 0 to NumImage - 1 by 1p : C:/Users/24774/Desktop/新建文件夹/ Index$ 02d*格式化Index$ 02d会变为前面没有字符串会编程Index00,Index01这种。有的话是前面字符串拼接上000102read_image (Image,C:/Users/24774/Desktop/新建文件夹/ Index$ 02d)crop_part (Image, ImagePart, 0, 0, 400, 400)if (Index 0)copy_obj (ImagePart, MotionImage, 1, 1)else*多个图片加入对应通道即合并图片append_channel (MotionImage, ImagePart, MotionImage)endif
endfor
*求通道平均
mean_n (MotionImage, ImageMean)边缘滤波
即过滤边缘突出边缘。 斜坡边缘比较常见
索贝尔滤波
索贝尔Sobel算子是一个离散微分算子 即使用倒数表示边缘像素变化的趋势。 图像是一个二维矩阵所以将到数分为了xy两个方向。 SOBEL_AMP计算图像的一阶导数并用作边缘检测器。该滤镜基于以下滤镜掩码即x方向和y方向倒数矩阵 再使用卷积
sobel_amp(Image, EdgeAmplitude, FilterType, Size) 第一个参数是Image是待边缘滤波图像 第二个参数是EdgeAmplitude是输出图像 第三个参数是FilterType是计算方式
第四个参数是Size是掩膜大小
凯尼滤波
1应用高斯滤波来平滑图像降噪 2获取图像的梯度信息在获取图像的强度信息的同时使用的是索贝尔算子来获取图像的梯度计算方式是sum_sqrt把y方向的求导值a和x方向的求导值b的平方和开根号并除以4。通过这个方式求取出梯度图像。 3应用非最大抑制技术来消除边误检最大抑制技术和在索贝尔算子里面介绍的thin函数相同即在沿边缘方向中如果中心值最大则保留这个值否则该中心点置为0通过这个方法生成边缘图像。 4应用双阈值的方法来决定可能的边界经过非极大抑制后的图像中仍然有很多噪声点。凯尼算法中应用了一种双阈值的技术。即设定一个阈值上界和阈值下界通常由人为指定图像中的像素点如果大于阈值上界则认为必然是边界称为强边界小于阈值下界则认为必然不是边界两者之间的则认为是候选项称为弱边界弱边界需进行进一步处理。双阈值方法是凯尼算子的核心思路。 5利用滞后技术来跟踪边界。 滞后技术指的是和强边界八连通相连的弱边界认为是边界其他的弱边界则被舍弃。 通过这5个步骤就获得了凯尼滤波的边界。
凯尼算子在边缘提取时不会丢失重要的边缘也不容易把噪声提取成边缘。抗噪声能力强而且可以比较好地检测到较弱的背景边缘。凯尼算法对于不同分辨率的图像不需要调节参数可以统一进行检测鲁棒性比较好。一般情况下提取到的边缘和实际的边缘偏差很小而且偏差一致。但是对于要精准求取边界的场景来说偏差还是存在的。 在HALCON中使用edges_image函数来实现凯尼滤波这个函数的参数中 edges_image(Image, ImaAmp, ImaDir, Filter, Alpha, NMS, Low, High) 第一个参数是Image是待边缘滤波图像 第二个参数是ImaAmp是边缘滤波的结果图像 第三个参数是ImaDir是方向滤波的结果图像 第四个参数是Filter是滤波方式 第五个参数是Alpha是Alpha值 在凯尼滤波中Alpha值影响高斯滤波器的标准差Alpha值越大图像越平滑 第六个参数是NMS是非最大抑制类型非极大值抑制就是掩膜大小是3那么3x3矩阵中如果中心是极大值则全部3x3全部设为极大值否则为0。 第七个参数是Low是凯尼滤波双阈值的低阈值 第八个参数是High是凯尼滤波双阈值的高阈值 如图6-27所示是素贝尔滤波和凯尼滤波的边缘滤波对比图图6-28所示是原始图像。可以看到凯尼滤波边缘的均一性更好边缘的波动更小这得益于非最大值抑制的效果。索贝尔滤波是根据相邻灰度数值计算出主体边缘凯尼滤波是通过非最大值抑制获得的边缘在噪声上索贝尔滤波会把一些噪声捕获为边缘而凯尼滤波得益于高斯滤波有效抑制了噪声。在运行时间方面,凯尼滤波的运算时间会比较长大概是索贝尔滤波的5倍以上。
图像锐化
即补偿边缘提高边缘高频信息但是噪声也属于高频信息所以锐化也会放大图像噪声。图像清晰用于增加图像的边缘的过度梯度使得图像边缘锐利不再平滑。
索贝尔锐化
索贝尔锐化是通过索贝尔滤波获取图像边缘以边缘为界限获取到图像的非主边缘同时消除非主边缘达到锐化效果。 没有特点的函数需要手动操作比较复杂这里暂时不做阐述
拉普拉斯锐化
依赖图像的变换程度二阶导数 laplace(Image, ImageLaplace, ResultType, MaskSize, FilterMask) 第一个参数Image是需要变换的图像 第二个参数ImageLaplace是变换后的图像 第三个参数ResultType是结果图像的类型 ResultType分为六种类型 1第一种absolute代表输出图像是绝对值数值使用的是高斯滤波进行平滑。 2第二种signed_clipped代表带符号的输出图像深度与输入图像深度相同使用的是 高斯滤波进行平滑。 3第三种 signed 代表输出图像是带正负符号的且输出图像类型的深度比输入图像 大使用的是高斯滤波进行平滑。 4)第四种absolute_binomial代表使用二项式滤波进行平滑输出图像是绝对值数值5第五种signed_clipped_binomial代表输出图像是带正负符号的且输出图像深度与输入图像深度相同使用的是二项式滤波进行平滑。 6)第六种signed_binomial代表输出图像是带正负符号的且输出图像类型的深度比 输入图像大使用的是二项式滤波进行平滑。 FilterMask的掩膜有三种形式 1第一种n_4对应于四邻域的二阶微分; 第四个参数MaskSize是掩膜的尺寸 第五个参数FilterMask是掩膜的类型 拉普拉斯提供了矩阵以计算每个像素处的二阶微分 laplace的结果是模糊边缘(非主边缘因为)还需要用原图像减去模糊边缘才能得到锐化后的图像
ImageLaplace 例如
laplace (Image, ImageLaplace, absolute, 3, n_4)
sub_image (Image, ImageLaplace, ImageSub, 1, 0)但是减法得考虑溢出即相减时某个值大于255了所以先将图像转化为int2再相减后转化回来
laplace (Image, ImageLaplace, absolute, 3, n_4)
convert_image_type(Image, ImageConverted, int2)
sub_image (ImageConverted, ImageLaplace, ImageSub, 1, 0)
convert_image_type(ImageConverted, ImageConvertedByte, byte)高通滤波锐化
高通滤波让高频正常通过而低于设置临界值的低频信号则被阻断、减弱。 highpass_image(Image, Highpass, Width, Height)高通滤波函数 Width,Height表示掩膜大小 获取到高频主边缘与原图像相加从而锐化与拉普拉斯锐化不一样 使用highpass_image需手动转化类型并相加。
halcon也直接提供了高通滤波函数emphasize(Image, ImageEmphasize, MaskWidth, MaskHeight, Factor) Factor是用于控制图像边界对比度强度。越大对比度越强
几种锐化方式对比
对于不太锐利的边缘复杂的边缘索贝尔锐化的涂抹感比较强。高通滤波比较好。拉普拉斯一般。