缺陷检测·

一、预处理+定位(分割)+特征

求两个区域的交集
intersection (Region1, Region2, RegionIntersection)
输入区域1(区域1 要与区域2 中所有区域相交,大于等于区域2)
输入区域2
输出交集区域

求区域在图像像中的最小最大灰度值
min_max_gray (RegionIntersection, ImageReduced, 0, Min, Max, Range)
输入区域  输入图像  百分比(0-50)  最小灰度值  最大灰度值  范围(最大灰度值,最小灰度值之差)

求区域特征
region_features (RegionOpening, 'area', Value)
输入区域  输入特征  输出值

求灰度特征
gray_features (SelectedRegions, H, 'mean', Value1)
输入区域  输入图像  输入特征  输出值

二、差分--定位(缺陷图减去标准图得到缺陷)

注意:进行差分运算的两个区域或图像一定要重合,大的减小的
gray_opening_shape (Pcb, ImageOpening, 7, 7, 'octagon')   //灰度开运算(增加暗像素)
gray_closing_shape (Pcb, ImageClosing, 7, 7, 'octagon')   //灰度闭运算(增加亮像素)
输入图像  输出图像  结构元素大小(高、宽)  结构元素形状(矩形,八角形,菱形)

图像差分(缺陷图减去标准图得到缺陷)
sub_image (Image1, Image2, ImageSub, 1, 128)
图像1   图像2   减法得到的图像    乘1   加128

图像相乘(图像整体像素变大,黑白像素对比度拉开)
mult_image (Image, Image, ImageResult, 0.05, 0)
图像1   图像2   乘法得到的图像    乘0.05   加0

将区域绘制到图像中
paint_region (RegionTrans, Image, ImageResult, 255, 'fill')
输入区域   输入图像   
输出图像   区域的灰度值   填充

区域差分
difference (Region1,Region2 , RegionDifference)
输入区域   输入要处理区域   
输出相减得到的区域

印刷差分步骤
前提:把所有图像都转标准位置让差分对比区域重合
1、创建差分模型
create_variation_model (Width, Height, 'byte', 'standard', ModelID1)
图像宽高  一个字节  算法  模型句柄
2、训练
train_variation_model (ImageAffine1, ModelID1)
训练的图片  模型句柄
3、获得标准图
get_variation_model (ImageRE, VarImage, ModelID1)
平滑图像   边缘图像   模型句柄
4、设置参数
prepare_variation_model (ModelID1, 20, 5)
模型句柄  阈值(越大要求越高)要求越低越容易找错(一些小边缘也能找出来)
5、循环采图进行差分
compare_variation_model (ImageReduced3, Region2, ModelID1)
对比图像   输出与模板图不同区域   句柄 

三、频域

傅里叶变换-针对光滑表面的微小缺陷(周期性正弦噪声)
空间到频域  -- 傅里叶变换  --输出频谱图

傅里叶正逆变换
空间图像转频域图像

fft_generic (ImageSub, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
输入图像   输出频域图像   空间到频域(to_freq) 符号(反着填,不然转回空间域图像会镜像)  归一化系数(亮度)位置(默认dc_center)   输出图像类型(频域图像选 'complex')

频域图像转空间图像
fft_generic (ImageSub, ImageFFT, 'from_freq', 1, 'sqrt', 'dc_center', 'real')
输入频域图像    输出图像   频域到空间(from_freq)   符号   归一化因子   位置(默认
dc_center)    输出图像类型(图像选 'real'  或  'byte')

生成低通滤波器
gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)
输出滤波器(中心有个小圆孔的图像,中间灰度值为1,四周为0,计算时只要中间低频率)   中心圆孔大小    归一化因子   位置   图像宽高

生成高通滤波器
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', Width, Height)
输出滤波器(中心有个小圆孔的图像,中间灰度值为0,四周为1,计算时只要四周高频率)   中心圆孔大小    归一化因子   位置   图像宽高

频域乘法
convol_fft (ImageLowpass, ImageLowpass, ImageConvol)
输入频域图像    输入滤波器   (频域图像放在前面)
输出结果频域图像

生成高斯滤波器
gen_gauss_filter (ImageGauss, 1, 1, 0, 'none', 'dc_center', 512, 512)
输出图像    sigmal水平值(越大越平滑(越大光斑越小))  sigmal垂直值    方向  归一化因子    位置     图像大小

根据灰度范围差处理()
gray_range_rect (ImageFFT, ImageResult, 11, 11)
输入图像
输出图像
掩膜大小

生成正弦形状的带通滤波器
gen_sin_bandpass (ImageFilter, 0.1, 'none', 'dc_center', 512, 512)
输出滤波器图像
输入正弦值    归一化因子   位置  图像大小

纹理检测
texture_laws (ImageFilter, ImageTexture, 'el', 2, 5)
输入图像
输出纹理图像 

分水领域法
把图像灰度值分成一块一块的区域,区域中心灰度值小,区域边缘灰度值大,区域边缘减去两边中心的最大灰度值之差小于设定阈值合并
watersheds_threshold (ImageMedian, Basins1, 10)
输入图像,输出区域,分水岭的阈值
用分水领域法分割图像后,再用灰度特征--熵(gray_entropy) 筛选区域  区域灰度值越杂乱熵越大

四、光度立体重建

光度立体重建
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, 'all', 'poisson', [], [])
输入图像(多张)  高度场  梯度场  反射率图   两个角度   结果类型    泊松方程   参数名  参数值

将梯度场转成曲率图
derivate_vector_field (Gradient, MeanCurvature, 3.0, 'mean_curvature')
梯度场  输出曲率  平滑系数   曲率类型
'divergence'
'curl'
'mean_curvature'
'gauss_curvature'

五、mlp分类器

ocr字符识别
创建分类器模型

create_ocr_class_mlp (8, 10, 'constant','default', ['六边形','圆','齿轮'], 20, 'normalization', 10, 42, OCRHandle)
物料宽高  插值算法  特征名称(默认值)  输出种类的名称  中间层隐式节点数量(神经元数量)  特征值的预处理('normalization'--映射到0和1)   特征值的对应预处理值(前面选 'normalization' 不用管这个值)  随机数种子  模型句柄

添加样本--生成trf文件
append_ocr_trainf (ObjectSelected, Image, ClassName[I], 'D:/train_ocr525.trf')
区域  图像  种类名称  保存路径

训练
trainf_ocr_class_mlp (OCRHandle, 'D:/train_ocr525.trf', 500, 0.1, 0.01, Error, ErrorLog)
模型句柄  样本文件路径    迭代次数(不能写太小)   权重阈值   误差阈值   输出误差   输出每次误差(每次误差组成的数组,最后一次误差就是输出误差)

识别
do_ocr_single_class_mlp (ObjectSelected1, Image, OCRHandle, 1, Class, Confidence)
区域  图像  模型句柄  种类个数(种类写几个输出几个结果和概率)  输出结果  概率

清除
clear_ocr_class_mlp (MLPHandle1)

mlp分类器
创建分类器(构建神经网络)

create_class_mlp (1, 10, 3, 'softmax', 'normalization', 10, 42, MLPHandle)
输入特征数量(输入层)   中间层隐式节点数    输出种类数量(输出层) 分类函数    特征值的预处理('normalization'--映射到0和1)   特征值的对应预处理值(前面选 'normalization' 不用管这个值)  随机数种子  模型句柄

添加样本
add_sample_class_mlp (MLPHandle, FeatureVector, ClassIDs[Index])
模型句柄   特征值(对应创建输入层) 种类对应索引(0开始)

训练
train_class_mlp (MLPHandle, 200, 0.1, 0.01, Error, ErrorLog)
模型句柄     迭代次数(不能写太小)   权重阈值   误差阈值   输出误差   输出每次误差(每次误差组成的数组,最后一次误差就是输出误差)

识别
classify_class_mlp (MLPHandle1, FeatureVector, 1, Class, Confidence)
输入句柄  输入特征值  种类个数(种类写几个输出几个结果和概率)  结果  概率

清除
clear_class_mlp (MLPHandle1)

保存模型
write_class_mlp (MLPHandle, 'D:/MyClass.gmc')

读入模型
read_class_mlp ('D:/MyClass.gmc', MLPHandle1)
FeatureVector:=real(FeatureVector)   real  实数

六、测量拟合

1、一维测量长度判断是否ok
2、二维测量拟合标准形状,原形状边缘点到拟合标准形状的距离做判断
     计算原轮廓每个点到拟合形状每个顶点的距离,再求出到每个最近顶点的距离,保证一个轮廓点连线一个顶点,去掉四个角的区域(比如小于7像素的点不要)
     计算所有轮廓点到一个矩形的距离,距离超过多少NG

得到xld轮廓各个点的坐标
get_contour_xld (Rectangle, Row1, Col)
输入轮廓   行列坐标

轮廓上的点到拟合矩形的距离
dist_rectangle2_contour_points_xld (Rectangle, 0, Row, Column, Phi1, L1, W1, Distances)
输入轮廓   忽略点    矩形中心的行列坐标   角度   半宽   半高   距离

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值