[总章]Halcon算子知识

[20240111]

知识篇

图像增强:

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

1、图像增强方法:

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

2、目的:

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

3、灰度变化:

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

4、直方图修正:

均衡化、规定化;

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

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

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

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

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

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

8、图像增强分类:

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

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

[总章]Halcon算子知识_第1张图片

图像预处理:

增强对比度:

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博客

图像的几何变换内容:

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

图像的几何变换分类:

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

[总章]Halcon算子知识_第2张图片

仿射变换

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

透视变换

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

[总章]Halcon算子知识_第3张图片

边缘检测:

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

相机畸变矫正:

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

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

颜色分类:

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

颜色识别:

[总章]Halcon算子知识_第4张图片

源码:

见目录

..\代码\颜色识别_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(画出两条线的交点)

你可能感兴趣的:(人工智能,计算机视觉)