[总章]Halcon算子知识

发布时间:2024年01月15日

[20240111]

知识篇

图像增强:

核心方法:定位特征,逐步求精。

1、图像增强方法:

空域法(包括灰度变化、直方图修正、平滑、锐化、色彩增强等)、频域法(包括低通滤波、高频高提升滤波、同态滤波等)

2、目的:

改善视觉效果,提高图像清晰度;使图像转换成更适合人/机器分析处理的图形

3、灰度变化:

线性变换、非线性变换、指数变换;

4、直方图修正:

均衡化、规定化;

5、平滑(去除/衰减图像噪声和假轮廓):

空域平滑法(邻域/局部平滑法、阈值平均法、加权平均法、模板平滑法、多图像平均法)、频域平滑法(频域低通滤波法、理想低通滤波器ILPF、Butterworth低通滤波器BLPF、指数低通滤波器ELPF、梯形低通滤波器TLPF、中值滤波法/非线性平滑滤波法、)

6、锐化(加重目标轮廓,使模糊图像变清晰):

空域微差分法(空域锐化法、拉普拉斯锐化法、模板锐化法)、频域高提升滤波法(理想高通滤波器、Butterworth高通滤波器、指数高通滤波器、梯形高通滤波器)

7、图像平滑锐化时的注意事项

平滑锐化时,图像边界不处理;一般处理时仅对原图像进行处理;先平滑后锐化

8、图像增强分类:

分为灰度图像增强和彩色图像增强。

图像增强过程中不需要分析图像降质原因,处理后也不一定逼真原图像。

图像预处理:

增强对比度:

1、mean_image()+scale_image_max()+emphasize()[除噪声]

2、exp_image()+scale_image_max()[使黑色为0,白色为255,边缘清晰,但有损图像]

3、log_image()+scale_image_max()+scale_image_range()+scale_image_max()+emphasize()[使黑色更黑,白色更白]

4、illuminate()+emphasize()[使黑白分明,图像无损]

5、invert_image()+scale_image_range()+invert_image()+emphasize()+mean_image()+scale_image_max()+emphasize()[使黑白分明,白色255,黑色0,但有噪声且边缘不好]

6、equ_histo_image()[使直方图均值化]

7、coherence_enhancing_diff()+emphasize()[边缘清晰化,运行速度极慢]

8、mean_curvature_flow()+emphasize()[是像素平均化,运行时间慢]

9、fill_interlace()+shock_filter()[边缘非常清晰,但是图像有损坏,运行速度慢]

10、gen_image_const()+get_image_size()+gen_circle()+reduce_domain()+gray_opening()+emphasize()[清除噪声,使黑色更黑]

11、gen_image_const()+get_image_size()+gen_circle()+reduce_domain()+gray_closing()+emphasize()[清除噪声,使白色更白]

12、gray_range_rect()+exp_image()+log_image()+scale_image_max()+threshold()+connection()[可得完整XLD]

13、add_image()+emphasize()[清除噪声,白色更白]

14、gen_image_const()+get_image_size()+Illuminate()+sub_image()+emphasize()[清除噪声,白色更白,黑色更黑]

图像几何变换原理

参考网址

人脸识别:三步走解析人脸识别套路 - 简书

相机镜头测试:镜头分辨率及MTF测试

图像的仿射变换:图像的仿射变换 - 知乎

透视变换逻辑:【图像处理】透视变换 Perspective Transformation_verilog 图像透视变换-CSDN博客

图像的几何变换内容:

平移、缩放、旋转、仿射、透视等等。图像变换是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到不同图像的对应关系。理解变换的原理需要理解变换的构造方法以及矩阵的运算方法。

图像的几何变换分类:

刚性变换、仿射变换和透视变换,如下图:

仿射变换

是从一个二维坐标系变换到另一个二维坐标系,属于线性变换。通过已知3对坐标点可以求得变换矩阵。

透视变换

是从一个二维坐标系变换到一个三维坐标系,属于非线性变换。通过已知4对坐标点可以求得变换矩阵。

边缘检测:

步骤:平滑滤波——锐化滤波——边缘判定——边缘连接

相机畸变矫正:

相机畸变校正原理初步理解 - 程序员大本营

相机成像的过程实际就是将世界坐标系的点,转换到相机坐标系,投影得到图像坐标系,进而转化为像素坐标系的过程。而由于透镜精度和工艺会引入畸变(所谓畸变,就是指在世界坐标系中的直线转化到其他坐标系不在是直线),从而导致失真,为了解决这个问题,从而引入了相机畸变校正模型。

颜色分类:

https://www.cnblogs.com/xingyuanzier/p/12951150.html

颜色识别:

源码:

见目录

..\代码\颜色识别_Blob分析

..\代码\颜色分类

杂记篇

数组操作:

1.?t := [t1,t2] ? ? t1,t2连接成新的数组 ? ? ? ? ? ? ? ?

对应算子:tuple_concat

2.?i := |t| ? ? ? ? 得到数组长度 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tuple_length

3.?v := t[i] ? ? ? ?选取第i个元素0<= i < |t| ? ? ? ? ? ? ? ? ? ? ?tuple_select

4.?t := t[i1:i2] ? ?选取i1到i1的元素 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tuple_select_range

5.?t := subset(t,i) 选取数组t中的第i个元素 ? ? ? ? ? ? ? ? ? ? ? ?tuple_select

6.?t := remove(t,i) 去除数组t中的第i个元素 ? ? ? ? ? ? ? ? ? ? ? ?tuple_remove

7.?i := find(t1,t2) 找到t2数组在t1数组中出现位置索引

8.?(or -1 if no match) ? ? ? ? ? ? ? ? ? ? ? ? ?tuple_find

9.?t := uniq(t) ? ? 在t数组中把连续相同的值只保留一个 ? ? ? ? ? ? tuple_uniq

10.?select_obj(从对象数组中选择对象)

11.?concat_obj(连接两个标志性的对象元组,将数据传递给另外一个对象)

12.?tuple_regexp_select(选择匹配正则表达式的元组元素)

计算:

1.?polar_trans_image_ext(将环形圆弧转换为极坐标)(inspect_bottle_mouth.hdev)

2.?polar_trans_region_inv(将极坐标中的一个区域变换回笛卡尔坐标)(inspect_bottle_mouth.hdev)

Blob分析:

1.?获取图像;

2.?图像分割;

3.?区域处理;

4.?特征提取向着目标图像步步逼近。

算子篇

File(文件):

Image(图像):

1.?read_image(读取指定路径的图像)

2.?write_image(保存图像到指定路径)

3.?list_files(获取给定路径下的所有文件)

4.?list_image_files(获取给定路径下的所有文件)

Region(区域):

1.?read_region(读取指定路径ROI)

2.?write_region(保存ROI到指定路径)

Filters(滤波器):

Arithmetic(算术):

1.?abs_image(计算图像的绝对值)

2.?add_image(两个图像相加,灰度值相加)

3.?div_image(分割两个图像,灰度值相除)

4.?invert_image(图像反转,图像灰度值反转)

5.max_image(计算两个图像像素最大值)

6.?min_image(计算两个图像像素最小值)

7.?mult_image(图像相乘,灰度值相乘)

8.?scale_image(缩放图像灰度值)

9.?tile_images(将多个图像放到一个平铺放大图中)

10.?sub_image(图像相减,灰度值相减)

Color(颜色):

1.?rgb1_to_gray(将RGB图像转换为灰度图像)

2.?trans_from_rgb(将图像从RGB颜色空间转换为任意颜色空间)

3.?trans_from_rgb(将任意颜色空间转换为RGB颜色空间)

Edges(边缘):

1.close_edges(使用边缘震幅图像关闭边缘间隙,尝试修复完整的XLD)

2.?close_edges_length(使用边缘震幅图像关闭边缘间隙,尝试修复完整的XLD)

3.?edges_image(提取图像XLD)

4.?edges_sub_pix(精确提取图像XLD)

5.?frei_amp(使用frei-chen运算检测图像XLD)

6.?frei_dir(使用frei-chen运算检测图像XLD)

7.?highpass_image(从图像提取高频分量)

8.?kirsch_amp(使用kirsch算子检测图像XLD)

9.?kirsch_dir(使用kirsch算子检测图像XLD)

10.?laplace(使用laplace算子检测图像XLD)

11.?prewitt_amp(使用prewitt算子检测图像XLD)

12.?roberts(使用roberts算子检测图像XLD)

13.?sobel_amp(使用sobel算子检测图像XLD)

14.?skeleton(计算区域XLD)

Enhancement(增强):

1.?coherence_enhancing_diff(一致性扩散增强)

2.?emphasize(增强图像的对比度,均值增强)

3.?equ_histo_image(图像直方图线性化)

4.?exp_image(图像指数变换,增强亮部像素值,使黑色更黑,搭配scale_image_max算子一起使用)

5.?illuminate(增加图像亮度,打灯,均值增强)

6.?invert_image(图像像素反转)

7.?log_image(图像对数变换,增强暗部像素值,使白色更白,搭配scale_image_max算子一起使用)

8.?mean_curvature_flow(江南平均曲率流应用于图像,减小图像噪声)

9.?scale_image_max(将最小、最大灰度值变换为0,255)(运用之前,使用mean_image平滑去除小噪声)

10.?scale_image_range(将范围内像素增强)

11.?shock_filter(冲击波滤波)

FFT(博立叶变换):

1.?convol_fft(在频率域中使用筛选器对图像进行卷积)

Geometric Transformations(几何变换)

1.?hom_mat2d_identity(创建二位变换矩阵)

2.?affine_trans_region(区域任意变换)

3.?vector_angle_to_rigid(刚性仿射变换)

4.?hom_mat2d_translate(平移二维变换矩阵)

5.?hom_mat2d_scale(缩放二维变换矩阵)

6.?hom_mat2d_rotate(旋转二维变换矩阵)

7.?move_region(平移区域)

8.?zoom_region(缩放区域)

9.?mirror_region(镜像区域)

10.?transpose_region(倒置区域)

11.?polar_trans_region , polar_trans_region_Inv(极坐标与笛卡尔坐标互转)

Smoothing(平滑):

1.?mean_image(均值滤波,值选择公式:2D+1;一般与dyn_threshold共同使用)

Graphics(图形):

Drawing(画图):

1.?draw_point(在窗口画一个点)

2.?draw_regionl(在窗口画一个ROI)

3.?draw_rectangle1(根据坐标系,在图像中画一个矩形)

4.?draw_rectangle2(画一个带角度的矩形)

5.?gen_rectangle1(生成一个矩形ROI)

6.?gen_region(生成一个ROI)

7.?gen_empty_region(生成一个空白ROI)

Mouse(鼠标):

1.?get_mbutton(等待鼠标动作)

2.?get_tposition(获取鼠标位置)

3.?set_tposition(设置鼠标位置)

4.?set_mshape(设置鼠标形状)

Object(对象):

1.?attach_drawing_object_to_window(将现有绘画对象附加到窗口)

2.?attach_background_to_window(将背景图附加到窗口)

3.?clear_drawing_object(清除绘制对象)

4.?create_drawing_object_circle_sector(创建一个可交互的扇形对象)

5.?create_drawing_object_rectangle2(创建一个可交互移动的矩形对象)

6.?create_drawing_object_text(创建一个可交互移动的文本对象)

7.?perform_measurement(计算绘画对象与图像的交点)

8.?display_results(将点坐标显示到窗口中)

9.?detach_background_from_window(从窗口分离背景图)

10.?detach_drawing_object_from_window(从窗口分离绘画对象)

11.?set_drawing_object_params(设置绘画对象的颜色)

12.?set_window_param(设置窗口参数)

Output(输出):

1.?disp_arc(在窗口显示弧形)

2.?disp_arrow(在窗口显示箭头)

3.?disp_circle(在窗口显示圆形)

4.?disp_cross(在窗口显示交叉)

5.?disp_ellipse(在窗口显示椭圆)

6.?disp_line(在窗口显示直线)

7.?disp_rectangle1(在窗口显示矩形)

8.?disp_rectangle2(在窗口显示矩形)

9.?disp_region(在窗口显示区域)

10.?disp_xld(在窗口显示轮廓)

Parameters(参数):

1.?dev_close_window(关闭图像窗口)

2.?dev_display(在窗口显示图像)

3.?dev_disp_text(在窗口打印文本)

4.?dev_open_file_dialog(打开文件选择对话框)

5.?dev_open_window(打开图像窗口)

6.?dev_set_color(设置图像颜色)

7.?dev_set_line_width(设置轮廓宽度)

8.?dev_set_window(激活图像窗口)

9.?dev_update_off(关闭图像更新)

10.?dev_update_on(打开图像更新)

Text(文本):

1.?read_string(在窗口等待写入文本并读取)

2.?write_string(在窗口打印文本)

Identification(识别):

Bar Code(条码):

13.?create_bar_code_model(创建条码识别模型)

14.?decode_bar_code_rectangle2(在矩形框内识别条码)

15.?find_bar_code(检测和读取图像中的条码)

16.?get_bar_code_object(访问条码的标志对象,即将条码用绿色框框选中)

17.?get_bar_code_result(获取识别条码字符串)

18.?get_bar_code_param(获取条码参数)

19.?set_bar_code_param(设置条码参数)

Image(图像):

Access(访问):

20.?get_image_size(获取图像大小)

Acquisition(拍照):

1.?open_framegrabber(打开相机)

2.?set_framegrabber_param(设置相机参数,ExposureTime是曝光时间,GainRaw是曝光增益)

3.?grab_image_start(开始拍照)

4.?grab_image_async(获取拍照图像)

5.?close_framegrabber(关闭相机)

Channel(通道):

1.?access_channel(访问多通道图像的通道)

2.?append_channel(增加图像通道)

3.?compose2(将两个图像合并为双通道图像)

4.?decompose2(将双通道图像拆分成两个图像)

5.?image_to_channels(将多通道图像转换为单通道图像)

Creation(创造):

1.?copy_Image(复制图像)

2.?gen_image_const(创建有灰度值的图像)

3.?region_to_mean(使用均值灰度值绘画图像)

Domain(区域):

1.?add_channel(向ROI增加通道图像)

2.?change_domain(更改图像范围)

3.?full_domain(填充图像区域)

4.?get_domain(获取图像区域)

5.?rectangle1_domain(根据矩形减少区域)

6.?reduce_domain(减少图像区域)

Features(特征):

1.?gray_histo(计算图像灰度直方图)

2.?histo_to_thresh(根据灰度直方图确定阈值)

3.?histo_2dim(计算双通道图像的灰度直方图)

4.?intensity(计算图像灰度的均值和偏差)

5.?min_max_gray(获取图像最大、最小灰度值)

6.?select_gray(根据灰度要素筛选图像区域)

Format(格式):

1.?crop_domain(剪切图像区域)

2.?crop_part(剪切矩形图像区域)

Mainpulation(操作):

1.overpaint_gray(

将一个图像的灰度值覆盖到另一个图像中)

2.?overpaint_region(将一个ROI覆盖到图像中)

3.?paint_gray(将一个图像的灰度值绘制到另一个图像中)(用途:将局部图像灰度强/弱化,再重新绘画到原图像)

4.?paint_region(将ROI绘制到图像中)

5.?paint_xld(将XLD绘制到图像中)

6.?set_grayval(在图像中绘画一个像素灰度点)

Morphology(形态学):

Region(区域):

1.?boundary(获取区域边界)

2.?closing(关闭区域)(先膨胀后收缩)(用于填坑)

3.?closing_circle(使用圆形结构元素关闭区域)

4.?closing_rectangle1(使用矩形关闭区域)

5.?dilation_circle(使用圆形膨胀区域)

6.dilation_rectangle1

(使用矩形膨胀区域)

7.?dilation1(膨胀区域)

8.?erosion(侵蚀区域)

9.?erosion_circle(使用圆形侵蚀区域)

10.?erosion_rectangle1(使用矩形侵蚀区域)

11.?opening(打开区域)(先侵蚀后膨胀)

12.?opening_circle(用圆形打开一个区域)

13.?opening_rectangle1(用矩形打开一个区域)

Object(数组):

Information(信息):

1.?compare_obj(数组比较)

2.?count_obj(统计数组大小)

Manipulation(操作):

1.?concat_obj(数组合并)

2.?copy_obj(复制数组)

3.?gen_empty_obj(创建空数组)

4.?insert_obj(插入数组)

5.?obj_diff(数组相减)

6.?remove_obj(删除数组元素)

7.?replace_obj(替换数组元素)

8.?select_obj(选择数组元素)

Regions(区域):

Creation(创建):

1.?gen_circle(创建一个圆)

2.?gen_empty_region(创建一个空白区域)

3.?gen_rectangle1(创建一个矩形)

4.?gen_rectangle2(创建一个带角度的矩形)

5.?gen_region_histo(将直方图转换成区域)

Features(特征):

1.?area_center(计算区域的面积和中心坐标)

2.?circularity(计算区域的圆度)

3.?inner_circle(创建区域内部最大的圆)

4.?inner_rectangle1(创建区域内部最大的矩形)

5.?select_shape(根据形状特征选择区域)

6.?select_shape_std(选择区域内指定形状)

7.?select_shape_xld(根据形状特征选择轮廓或者多边形)

8.?smallest_circle(寻找区域最小的圆)

Geomagnetic Transformations(图像变换):

1.?affine_trans_region(区域任意变换)

2.?zoom_region(缩放区域)

3.?move_region(移动区域)

Sets(集合):

1.?complement(获取补充区域,即获取选中区域以外的所有区域,区域取反)

2.?difference(计算两个区域的不同,区域相减)

3.?intersection(计算两个区域的交集,区域相交)

4.?union1(一个区域数组的合并,区域数组相加)

5.?union2(两个区域的合并,区域相加)

Transformations(变换):

1.?connection(计算区域连接的组件,即将区域打散成区域数组)

2.?fill_up(填充区域)

3.?fill_up_shape(根据指定形状填充区域)

4.?shape_trans(变换区域形状)

5.?skeleton(计算区域骨架)

6.?sort_region(根据区域相对位置对区域进行分类)

Segmentation(分割):

Threshold(阈值分割):

1.?auto_threshold(使用由直方图确定的阈值分割图像)

2.?binary_threshold(二值化阈值分割图像)

3.?dyn_threshold(动态阈值分割图像)

4.?histo_to_thresh(根据直方图获取灰度阈值)

5.?local_threshold(使用局部阈值分割图像)

6.?threshold(全局阈值分割图像)

7.?threshold_sub_pix(以子像素精度提取图像的水平交叉)

8.?fast_threshold(使用全局阈值对图像进行快速阈值化;与threshold相同,速度更快一些)

System(系统):

Serial(串口通讯):

1.?close_serial(关闭串口)

2.?open_serial(打开串口)

3.?read_serial(读取串口)

4.?set_serial_param(设置串口参数)

5.?write_serial(写入串口)

Tool(工具):

Geometry(几何):

1.?distance_pp(计算两点之间的距离)

2.?distance_pl(计算点到直线距离)

3.?distance_pr(计算点到区域的最长最短距离)

4.?distance_lr(平面中,计算直线到区域的最长最短距离)

5.?distance_rr(计算区域之间的最短距离)

Tuple(工具):

Arithmetic(算术):

1.?tuple_sub(数组相减)

XLD(轮廓):

Access(访问):

1.?area_center_xld(获取XLD的中心坐标和面积)

2.?height_width_ratio_xld(获取XLD的长和宽)

3.?select_shape_xld(根据要求筛选XLD)

4.?smallest_rectangle1_xld(获取XLD内最小的矩形XLD)

Creation(创造):

1.?gen_contour_region_xld(根据ROI生成XLD)

2.?gen_region_contour_xld(根据XLD生成ROI)

开发:

1.?dev_close_window(关闭当前图片窗口)

2.?dev_disp_text(在图像窗口显示文本)

3.?dev_display(在图像窗口显示图像)

4.?dev_open_file_dialog(选择文件弹窗)

5.?dev_open_window(打开图像窗口)

6.?dev_set_color(设置单个颜色)

7.?dev_set_colored(设置多个颜色)

8.?dev_update_off(关闭图像窗口更新)

9.?gen_region_points(根据坐标画点)

10.?intersection_ll(画出两条线的交点)

文章来源:https://blog.csdn.net/weixin_42645007/article/details/135528430
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。