您的位置:

使用halcon进行缺陷检测

一、halcon缺陷检测的方法

1、主要是基于halcon软件提供的图像处理工具,来进行缺陷检测。其具体方法如下:

  a、图像预处理:首先对图片进行处理,如去噪、增强、二值化等。

  b、特征提取:通过对图像进行特征提取,得出不同的特征值,可以有效分类和区分缺陷。

  c、分类识别:根据之前提取的特征值来进行分类识别,将图像判别为有缺陷或无缺陷。

  d、最终输出:将判别结果输出,同时对于有缺陷的地方进行标注,便于后续处理。

二、halcon缺陷检测实例转opencv实现

1、halcon与opencv都是常用的图像处理库,halcon提供的操作函数与opencv的略有不同。我们可以将halcon的缺陷检测实例转化为opencv的代码实现。

2、例如halcon实现的二值化操作:

dev_set_color ('green')
dev_display (Image)
threshold (Image, Region, 128, 255)
dev_set_color ('red')
dev_display (Region)

可以在opencv中转化为:

Mat gray, binary;
cvtColor(inputImage, gray, COLOR_BGR2GRAY);
threshold (gray, binary, 128, 255, THRESH_BINARY);
imshow("result", binary);

三、halcon缺陷检测基本步骤

1、图像预处理:包括去噪、增强等操作。

median_image (Image, ImageMedian, 'circle', 3)
dyn_threshold (ImageMedian, RegionDynThresh, 10, 'dark')

2、特征提取:对图像的特征进行提取。

connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 100, 99999999)

3、分类识别:用已经提取的特征进行缺陷分类。

gen_classifier_ensemble (PositiveFeatures, NegativeFeatures, ClassifierHandle, 'hidden_layers=10,scale_factor=1.0')
apply_classifier_ensemble (SelectedFeatures, ClassifierHandle, 'default', Result)

4、最终输出:对于有缺陷的位置进行标注,并输出检测结果。

dev_set_color ('red')
dev_display (SelectedRegions)
disp_message (WindowHandle, 'Defect detected', 'window', 12, 12, 'red', [], [])

四、halcon缺陷检测例程

1、下面给出一个简单的halcon缺陷检测例程,对纸张的划痕进行检测。

read_image (Image, 'paper_scratch.jpg')
median_image (Image, ImageMedian, 'circle', 3)
dyn_threshold (ImageMedian, RegionDynThresh, 10, 'dark')
connection (RegionDynThresh, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
gen_features_object_generic (SelectedRegions, Image, Features, 'border_origin', [1,1],[0,0.5],[],0)
gen_classifier_ensemble (PositiveFeatures, NegativeFeatures, ClassifierHandle, 'hidden_layers=10,scale_factor=1.0')
apply_classifier_ensemble (Features, ClassifierHandle, 'default', Result)
dev_set_color ('red')
dev_display (SelectedRegions)
disp_message (WindowHandle, 'Defect detected', 'window', 12, 12, 'red', [], [])

五、halcon缺陷检测实例

1、铝制品表面缺陷检测:

  a、图像预处理:使用思路与前面的例子类似,但这里的图像规模更大,需要使用更先进的图像处理技术。

read_image (Image, 'aluminum_defects.jpg')
rgb1_to_gray (Image, GrayImage)
dyn_threshold (GrayImage, RegionDynThresh, 20, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 1000)

  b、特征提取:铝质产品的特征与纸张自然有所不同,需要特别处理。

for i:=1 to Hv_Edim1(SelectedRegions)
    region_features (SelectedRegions[i], GrayImage, ['rectangularity','convexity'], FeatureVector)
    select_obj (SelectedRegions, SelectedRegion, i)
    set_object_features (SelectedRegion, FeatureVector, ['rectangularity','convexity'])
endfor
feature_reduction (PositiveFeatures, NegativeFeatures, 'pca', AdaboostHandleReducedFeatures, 3)

  c、分类识别:分类识别过程中使用了adaboost算法。

gen_classifier_adaboost (AdaboostHandleReducedFeatures, 'auto', num_steps, ClassifierHandle)
apply_classifier_feature_set (ClassifierHandle, GrayImage, ['rectangularity','convexity'], 'default', Result)

  d、最终输出:将检测结果输出,并进行标注。

if Hv_Elem(Result, 1) = 1.0 then
    gen_rectangle1 (Rectangle1, Rows, Cols, Rows + Height, Cols + Width)
    dev_set_color ('red')
    dev_display (Rectangle1)
    disp_message (WindowHandle, 'Defect detected', 'window', 12, 12, 'red', [], [])
endif

六、halcon缺陷检测基本流程

1、首先进行图像预处理,并将图像进行二值化。

2、然后对图像特征进行提取,不同的缺陷类型需要提取的特征不同。

3、接着对已经提取的特征进行分类识别,将不同的缺陷分类。

4、最后输出检测结果,并对有缺陷的部位进行标注,方便后续处理。

七、halcon划痕检测

1、划痕缺陷是指物体表面因受到外力导致刮痕等状况的缺陷。检测划痕缺陷需要对图像进行预处理、滤波、二值化等步骤,然后利用特征提取算法和分类识别技术进行检测。

2、下面给出一个halcon划痕检测的例程。

read_image (Image, 'scratch.jpg')
median_image (Image, ImageMedian, 'circle', 3)
dyn_threshold (ImageMedian, RegionDynThresh, 10, 'dark')
connection (RegionDynThresh, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
gen_features_object_generic (SelectedRegions, Image, Features, 'border_origin', [1,1],[0,0.5],[],0)
gen_classifier_ensemble (PositiveFeatures, NegativeFeatures, ClassifierHandle, 'hidden_layers=10,scale_factor=1.0')
apply_classifier_ensemble (Features, ClassifierHandle, 'default', Result)
dev_set_color ('red')
dev_display (SelectedRegions)
disp_message (WindowHandle, 'Defect detected', 'window', 12, 12, 'red', [], [])

八、halcon目标检测

1、halcon可以用来进行目标检测,因为目标检测也可以看作是一种缺陷检测。但与其他类型的缺陷检测不同,目标检测需要经过更多的特征提取、特征匹配等步骤。

2、下面给出一个halcon目标检测的例程。

read_image (Image, 'object.jpg')
reduce_domain (Image, ImageReduced, Region)
mean_image (ImageReduced, MeanImage, 5, 5)
subtract_image (ImageReduced, MeanImage, SubImage, 1, 0)
abs_image (SubImage, AbsImage)
dyn_threshold (AbsImage, RegionDynThresh, 20, 'dark')
connection (RegionDynThresh, ConnectedRegions)
features_object_from_image (ImageReduced, ConnectedRegions, Features, 'point_invariant', ['do_edges','convexity'])
read_features (Features, 'object_feature.tuple')
gen_classifier_knn (Features, ['num_neighbors=3'], ClassifierHandle)
classify_image_knn (Image, ObjectRect, ClassifierHandle, [], [], ObjectScore)
dev_set_color ('green')
dev_display (ObjectRect)

九、halcon表面缺陷检测

1、表面缺陷检测相对于其他类型的缺陷检测,主要就是注重表面积分形态信息的提取,表面粗糙度的计算和缺陷检测。可以通过使用halcon提供的表面缺陷检测算法来实现。

2、下面给出一个halcon表面缺陷检测的例程。

read_image (Image, 'surface.jpg')
gradient_image (Image, GradientAmplitude, GradientDirection, 'advanced', 'bilinear')
regiongrowing_gray (Image, Seeds, Region, 15, 15, 5, 20, 'false', [])
open_rect1 (Region, RegionOpened, 5, 5)
erosion1 (RegionOpened, RegionEroded, 5)
difference_image (RegionOpened, RegionEroded, RegionDiff)
laplace_of_gaussian (Image, LoGImage, 3)
dyn_threshold (LoGImage, RegionEdge, 5, 'not_dark')
intersection (RegionEdge, RegionDiff, RegionEdgeReduced)
以上是halcon缺陷检测的一些方法、步骤、例程等介绍,希望能对读者有所帮助。