核心方法:定位特征,逐步求精。
空域法(包括灰度变化、直方图修正、平滑、锐化、色彩增强等)、频域法(包括低通滤波、高频高提升滤波、同态滤波等)
改善视觉效果,提高图像清晰度;使图像转换成更适合人/机器分析处理的图形
线性变换、非线性变换、指数变换;
均衡化、规定化;
空域平滑法(邻域/局部平滑法、阈值平均法、加权平均法、模板平滑法、多图像平均法)、频域平滑法(频域低通滤波法、理想低通滤波器ILPF、Butterworth低通滤波器BLPF、指数低通滤波器ELPF、梯形低通滤波器TLPF、中值滤波法/非线性平滑滤波法、)
空域微差分法(空域锐化法、拉普拉斯锐化法、模板锐化法)、频域高提升滤波法(理想高通滤波器、Butterworth高通滤波器、指数高通滤波器、梯形高通滤波器)
平滑锐化时,图像边界不处理;一般处理时仅对原图像进行处理;先平滑后锐化。
分为灰度图像增强和彩色图像增强。
图像增强过程中不需要分析图像降质原因,处理后也不一定逼真原图像。
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)
1. 获取图像;
2. 图像分割;
3. 区域处理;
4. 特征提取向着目标图像步步逼近。
1. read_image(读取指定路径的图像)
2. write_image(保存图像到指定路径)
3. list_files(获取给定路径下的所有文件)
4. list_image_files(获取给定路径下的所有文件)
1. read_region(读取指定路径ROI)
2. write_region(保存ROI到指定路径)
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(图像相减,灰度值相减)
1. rgb1_to_gray(将RGB图像转换为灰度图像)
2. trans_from_rgb(将图像从RGB颜色空间转换为任意颜色空间)
3. trans_from_rgb(将任意颜色空间转换为RGB颜色空间)
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)
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(冲击波滤波)
1. convol_fft(在频率域中使用筛选器对图像进行卷积)
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(极坐标与笛卡尔坐标互转)
1. mean_image(均值滤波,值选择公式:2D+1;一般与dyn_threshold共同使用)
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)
1. get_mbutton(等待鼠标动作)
2. get_tposition(获取鼠标位置)
3. set_tposition(设置鼠标位置)
4. set_mshape(设置鼠标形状)
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(设置窗口参数)
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(在窗口显示轮廓)
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(打开图像更新)
1. read_string(在窗口等待写入文本并读取)
2. write_string(在窗口打印文本)
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(设置条码参数)
20. get_image_size(获取图像大小)
1. open_framegrabber(打开相机)
2. set_framegrabber_param(设置相机参数,ExposureTime是曝光时间,GainRaw是曝光增益)
3. grab_image_start(开始拍照)
4. grab_image_async(获取拍照图像)
5. close_framegrabber(关闭相机)
1. access_channel(访问多通道图像的通道)
2. append_channel(增加图像通道)
3. compose2(将两个图像合并为双通道图像)
4. decompose2(将双通道图像拆分成两个图像)
5. image_to_channels(将多通道图像转换为单通道图像)
1. copy_Image(复制图像)
2. gen_image_const(创建有灰度值的图像)
3. region_to_mean(使用均值灰度值绘画图像)
1. add_channel(向ROI增加通道图像)
2. change_domain(更改图像范围)
3. full_domain(填充图像区域)
4. get_domain(获取图像区域)
5. rectangle1_domain(根据矩形减少区域)
6. reduce_domain(减少图像区域)
1. gray_histo(计算图像灰度直方图)
2. histo_to_thresh(根据灰度直方图确定阈值)
3. histo_2dim(计算双通道图像的灰度直方图)
4. intensity(计算图像灰度的均值和偏差)
5. min_max_gray(获取图像最大、最小灰度值)
6. select_gray(根据灰度要素筛选图像区域)
1. crop_domain(剪切图像区域)
2. crop_part(剪切矩形图像区域)
1.overpaint_gray(
将一个图像的灰度值覆盖到另一个图像中)
2. overpaint_region(将一个ROI覆盖到图像中)
3. paint_gray(将一个图像的灰度值绘制到另一个图像中)(用途:将局部图像灰度强/弱化,再重新绘画到原图像)
4. paint_region(将ROI绘制到图像中)
5. paint_xld(将XLD绘制到图像中)
6. set_grayval(在图像中绘画一个像素灰度点)
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(用矩形打开一个区域)
1. compare_obj(数组比较)
2. count_obj(统计数组大小)
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(选择数组元素)
1. gen_circle(创建一个圆)
2. gen_empty_region(创建一个空白区域)
3. gen_rectangle1(创建一个矩形)
4. gen_rectangle2(创建一个带角度的矩形)
5. gen_region_histo(将直方图转换成区域)
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(寻找区域最小的圆)
1. affine_trans_region(区域任意变换)
2. zoom_region(缩放区域)
3. move_region(移动区域)
1. complement(获取补充区域,即获取选中区域以外的所有区域,区域取反)
2. difference(计算两个区域的不同,区域相减)
3. intersection(计算两个区域的交集,区域相交)
4. union1(一个区域数组的合并,区域数组相加)
5. union2(两个区域的合并,区域相加)
1. connection(计算区域连接的组件,即将区域打散成区域数组)
2. fill_up(填充区域)
3. fill_up_shape(根据指定形状填充区域)
4. shape_trans(变换区域形状)
5. skeleton(计算区域骨架)
6. sort_region(根据区域相对位置对区域进行分类)
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相同,速度更快一些)
1. close_serial(关闭串口)
2. open_serial(打开串口)
3. read_serial(读取串口)
4. set_serial_param(设置串口参数)
5. write_serial(写入串口)
1. distance_pp(计算两点之间的距离)
2. distance_pl(计算点到直线距离)
3. distance_pr(计算点到区域的最长最短距离)
4. distance_lr(平面中,计算直线到区域的最长最短距离)
5. distance_rr(计算区域之间的最短距离)
1. tuple_sub(数组相减)
1. area_center_xld(获取XLD的中心坐标和面积)
2. height_width_ratio_xld(获取XLD的长和宽)
3. select_shape_xld(根据要求筛选XLD)
4. smallest_rectangle1_xld(获取XLD内最小的矩形XLD)
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(画出两条线的交点)