快捷键
序号 | 快捷键 | 快捷键的作用 |
---|---|---|
1 | Tab | 当你输入算子时,可以补充后面的内容 |
2 | F1 | 帮助,解释光标所在行算子 |
3 | F2 | 重置程序,从头再来 |
4 | F3 | 激活(注释后取消注释) |
5 | F4 | 注释程序 |
6 | F5 | 运行,运行到结束,出结果 |
7 | F6 | 单步运行,一句句运行 |
8 | F7 | 单步跳入函数 |
9 | F8 | 单步跳出函数 |
10 | F9 | 停止 |
11 | F0 | 设置断点 |
12 | Ctrl + N | 新建一个新的 HDevelop 程序 |
13 | Ctrl + O | 打开一个 HDevelop 程序 |
14 | Ctrl + E | 浏览官方提供的例程 |
15 | Ctrl + R | 添加图像到当前程序 |
16 | Ctrl + F | 查找 / 替代 |
17 | Ctrl + Z | 撤销 |
18 | Ctrl + Y | 恢复撤销的操作 |
19 | Ctrl + Q | 退出 |
20 | Ctrl + Shift + I | 代码自动对齐 |
联合编程
示例代码
面向对象
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HalconWin._04_28
{
public partial class Form1 : Form
{
//声明图标类变量
HObject ho_Image, ho_GrayImage;
HObject ho_Region1 = null;
HObject ho_SortedRegions1, ho_ObjectSelected1 = null;
HObject ho_ConnectedwordRegions = null;
HTuple hv_OCRHandle = new HTuple();
HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
HTuple hv_Number = new HTuple();
HTuple hv_Class = new HTuple();
HTuple hv_Confidence = new HTuple();
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
ho_Image.Dispose();
ho_GrayImage.Dispose();
ho_Region1.Dispose();
ho_SortedRegions1.Dispose();
ho_ObjectSelected1.Dispose();
ho_ConnectedwordRegions.Dispose();
hv_OCRHandle.Dispose();
hv_Width.Dispose();
hv_Height.Dispose();
hv_Number.Dispose();
hv_Class.Dispose();
hv_Confidence.Dispose();
// 释放资源
}
public Form1()
{
InitializeComponent();
HOperatorSet.GenEmptyObj(out ho_ConnectedwordRegions);
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_Region1);
HOperatorSet.GenEmptyObj(out ho_SortedRegions1);
HOperatorSet.GenEmptyObj(out ho_ObjectSelected1);
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp";
openFileDialog.Title = "Select an Image File";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
HOperatorSet.ReadImage(out ho_Image, filePath);
HOperatorSet.SetColor(hWindowControl1.HalconWindow, "green");
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);
HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);
}
}
private void button2_Click(object sender, EventArgs e)
{
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
HOperatorSet.DispObj(ho_GrayImage, hWindowControl1.HalconWindow);
HOperatorSet.Threshold(ho_GrayImage, out ho_Region1, 125, 255);
HOperatorSet.Connection(ho_Region1, out ho_ConnectedwordRegions);
HOperatorSet.SelectShape(ho_ConnectedwordRegions, out ho_ObjectSelected1, "area", "and", 700, 2500);
HOperatorSet.SortRegion(ho_ObjectSelected1, out ho_SortedRegions1, "upper_left", "true", "column");
HOperatorSet.CountObj(ho_SortedRegions1, out hv_Number);
HOperatorSet.ReadOcrClassMlp("F:\\Halcon\\Test\\04-27\\yszx.omc", out hv_OCRHandle);
HOperatorSet.DoOcrMultiClassMlp(ho_SortedRegions1, ho_GrayImage, hv_OCRHandle, out hv_Class, out hv_Confidence);
for (int i = 0;i < hv_Class.Length; i++)
{
lblOCR.Text += hv_Class.TupleSelect(i);
}
}
}
}
面向过程
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HalconWin._04_29
{
public partial class Form1 : Form
{
HObject ho_Image = null;
HImage hi_Image = null;
HImage ho_Gray_Image = null;
HImage ImageReduced = null;
HImage ImageAffineTrans = null;
HRegion hRegion = null;
HRegion hRegion_ConnectedRegions = null;
HRegion hRegion_SelectedRegions = null;
HRegion RegionFillUp = null;
HRegion RegionTrans = null;
HTuple Phi = null;
HTuple area = new HTuple();
HTuple row = new HTuple();
HTuple column = new HTuple();
HHomMat2D homMat2D = new HHomMat2D();
public Form1()
{
InitializeComponent();
HOperatorSet.GenEmptyObj(out ho_Image);
hSmartWindowControl1.MouseWheel += HSmartWindowControl1_MouseWheel;
}
private void HSmartWindowControl1_MouseWheel(object sender, MouseEventArgs e)
{
hSmartWindowControl1.HSmartWindowControl_MouseWheel(sender, e);
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.tiff";
openFileDialog.Title = "Select an Image File";
openFileDialog.CheckFileExists = true;
openFileDialog.Multiselect = false;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
// 面向对象编程
// HOperatorSet.ReadImage(out HObject ho_Image, filePath);
// 面向过程编程
hi_Image = new HImage(filePath);
//hSmartWindowControl1.HalconWindow.DispObj(ho_Image);
hSmartWindowControl1.HalconWindow.DispObj(hi_Image);
hSmartWindowControl1.SetFullImagePart();
}
}
private void button2_Click(object sender, EventArgs e)
{
pGrid.SelectedObject = new Thresold();
pGrid.SelectedGridItemChanged += PGrid_SelectedGridItemChanged;
}
private void PGrid_SelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
{
PropertyGrid grid = sender as PropertyGrid;
Thresold thresold = grid.SelectedObject as Thresold;
hRegion = ho_Gray_Image.Threshold(thresold.MinGray, thresold.MaxGray);
hSmartWindowControl1.HalconWindow.SetColor("green");
hSmartWindowControl1.HalconWindow.DispObj(hRegion);
}
private void button3_Click(object sender, EventArgs e)
{
ho_Gray_Image = hi_Image.Rgb1ToGray();
hSmartWindowControl1.HalconWindow.DispObj(ho_Gray_Image);
}
private void button4_Click(object sender, EventArgs e)
{
hRegion_ConnectedRegions = hRegion.Connection();
hSmartWindowControl1.HalconWindow.ClearWindow();
hSmartWindowControl1.HalconWindow.SetColored(12);
hSmartWindowControl1.HalconWindow.DispObj(hRegion_ConnectedRegions);
hSmartWindowControl1.SetFullImagePart();
}
private void button5_Click(object sender, EventArgs e)
{
//解除事件的订阅
pGrid.SelectedGridItemChanged -= PGrid_SelectedGridItemChanged;
pGrid.SelectedObject = new Features();
// 添加新的事件
pGrid.SelectedGridItemChanged += PGrid_SelectedFeatures;
}
private void PGrid_SelectedFeatures(object sender, SelectedGridItemChangedEventArgs e)
{
PropertyGrid grid = sender as PropertyGrid;
Features features = grid.SelectedObject as Features;
string fea = features.features;
string operation = features.operation;
double min = features.min;
double max = features.max;
if (String.IsNullOrEmpty(fea) || String.IsNullOrEmpty(operation) || min == 0 || max == 0)
{
return;
}
hRegion_SelectedRegions = hRegion_ConnectedRegions.SelectShape(fea, operation, min, max);
hSmartWindowControl1.HalconWindow.ClearWindow();
hSmartWindowControl1.HalconWindow.SetColor("red");
hSmartWindowControl1.HalconWindow.DispObj(hRegion_SelectedRegions);
hSmartWindowControl1.SetFullImagePart();
}
private void button6_Click(object sender, EventArgs e)
{
RegionFillUp = hRegion_SelectedRegions.FillUp();
RegionTrans = RegionFillUp.ShapeTrans("convex");
ImageReduced = ho_Gray_Image.ReduceDomain(RegionTrans);
hSmartWindowControl1.HalconWindow.ClearWindow();
hSmartWindowControl1.HalconWindow.SetColor("red");
hSmartWindowControl1.HalconWindow.DispObj(ImageReduced);
area = RegionTrans.AreaCenter(out row, out column);
Phi = RegionTrans.OrientationRegion();
homMat2D.VectorAngleToRigid(row, column, Phi, row, column, 0);
}
private void button7_Click(object sender, EventArgs e)
{
ImageAffineTrans = hi_Image.AffineTransImage(homMat2D, "constant", "false");
hSmartWindowControl1.HalconWindow.ClearWindow();
hSmartWindowControl1.HalconWindow.SetColor("green");
hSmartWindowControl1.HalconWindow.DispObj(ImageAffineTrans);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HalconWin._04_29
{
public class Features
{
[Category("特征提取")]
[DisplayName("特征名称")]
public string features { get; set; } = "area";
[Category("特征提取")]
[DisplayName("特征操作")]
public string operation { get; set; } = "and";
[Category("特征提取")]
[DisplayName("最小值")]
public double min { get; set; }
[Category("特征提取")]
[DisplayName("最大值")]
public double max { get; set; }
}
}
应用仿射变换
private void btnProcess_Click(object sender, EventArgs e)
{
hswcChepaiImg.HalconWindow.ClearWindow();
hswcChepaiImg.HalconWindow.SetColored(12);
//转灰度
ho_Gray_Image = car_Image.Rgb1ToGray();
//阈值分割
hRegion = ho_Gray_Image.Threshold(0.0, 80.0);
//连接区域
hRegion_ConnectedRegions = hRegion.Connection();
string fea = "area";
string operation = "and";
double min = 350000;
double max = 360000;
//选择区域
hRegion_SelectedRegions = hRegion_ConnectedRegions.SelectShape(fea, operation, min, max);
//填充区域
RegionFillUp = hRegion_SelectedRegions.FillUp();
//求区域的凸包
RegionTrans = RegionFillUp.ShapeTrans("rectangle2");
ImageReduced = ho_Gray_Image.ReduceDomain(RegionTrans);
// 求区域的面积和中心
//生成仿射变换矩阵
area = RegionTrans.AreaCenter(out row, out column);
Phi = RegionTrans.OrientationRegion();
//面向对象
HTuple homMat2D = new HTuple();
HOperatorSet.VectorAngleToRigid(row, column, Phi, row, column, 0, out homMat2D);
HObject ImageAffineTrans = new HObject();
HOperatorSet.AffineTransImage(ho_Gray_Image, out ImageAffineTrans, homMat2D, "constant", "false");
HObject ReduceAffineTrans = new HObject();
HOperatorSet.AffineTransRegion(RegionTrans, out ReduceAffineTrans, homMat2D, "constant");
HOperatorSet.ReduceDomain(ImageAffineTrans, ReduceAffineTrans, out ImageAffineTrans);
hswcChepaiImg.HalconWindow.DispObj(ImageAffineTrans);
//面向过程
//HImage ImageAffineTrans = null;
//HRegion ReduceAffineTrans = null;
//homMat2D.VectorAngleToRigid(row, column, Phi, row, column, 0);
//ImageAffineTrans = ImageReduced.AffineTransImage(homMat2D, "constant", "false");
//ReduceAffineTrans = RegionTrans.AffineTransRegion(homMat2D, "constant");
//hswcChepaiImg.HalconWindow.DispObj(ImageAffineTrans.ReduceDomain(ReduceAffineTrans));
hswcChepaiImg.SetFullImagePart();
}
示例代码
图像区域矫正
read_image(Image, 'C:/Users/diyworld/Desktop/day37/Images/3.jpg')
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 0, 80)
connection(Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 350000, 360000)
fill_up(SelectedRegions, RegionFillUp)
* 填充为带角度的矩形
shape_trans(RegionFillUp, RegionTrans, 'rectangle2')
reduce_domain(GrayImage, RegionTrans, ImageReduced)
area_center(RegionTrans, Area, Row, Column)
* 获取区域的偏移角度
orientation_region(RegionTrans, Phi)
* 生成矫正矩阵
vector_angle_to_rigid(Row, Column, Phi, Row, Column, rad(0), HomMat2D)
* 转正原图
affine_trans_image(Image, ImageAffineTrans1, HomMat2D, 'constant', 'false')
* 转正灰度图
affine_trans_image(GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
* 转正车牌区域
affine_trans_region(RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
基础知识
图像信息
图像类型 | 像素数据类型 |
---|---|
灰度图 | 无符号:byte(8bits)、uint2(16bits) |
差分图 | 有符号:int1(8bits)、int2(16bits) |
2D直方图 | 有符号:int4(32bits) |
边缘方向 | 无符号:direction(8bits) |
导数图像 | 浮点数:real(32bits) |
傅里叶变换 | 2个浮点数:complex(32bits) |
色调值 | 无符号:cyclic(8bits,255+1=0) |
矢量场 | 2个浮点数:vector_field |
数据类型
图标类数据 (Iconic)
Image (图像)
图像数据由矩阵组成,每个值表示一个像素。
常用操作:
* 读写图像
read_image(Image, 'patras')
write_image(Image, 'png', 0, 'D:/TEMP/MyImage')
* 获取图像属性
get_image_type(Image, Type)
get_image_size(Image, ImageWidth, ImageHeight)
count_channels(Image, NumChannels)
* 访问图像通道
access_channel(Image, ImageRed, 1)
access_channel(Image, ImageGreen, 2)
access_channel(Image, ImageBlue, 3)
* 访问和设置像素灰度
get_grayval(Image, 130, 145, Grayval)
set_grayval(Image, 130, 145, [0, 10, 20])
* 图像域操作
get_domain(Image, RegionDomain)
* 设置感兴趣区域
reduce_domain(Image, RegionCircle, ImageReduced)
Region (区域)
区域可以是任意形状,使用像素精度,采用游程编码方式记录。
常用操作:
* 生成区域
gen_circle(RegionCircle, 200, 200, 100.5)
gen_rectangle1(RegionRect1, 30, 20, 100, 200)
gen_rectangle2(RegionRect2, 300, 200, rad(-30), 100, 20)
* 访问区域信息
get_region_points(RegionRect1, RowsRect1, ColumnsRect1)
get_region_runs(RegionRect1, RunsRow, RunsColumnBegin, RunsColumnEnd)
area_center(RegionRect1, AreaRect1, _, _)
XLD (轮廓)
由相互连接的点组成,具有亚像素精度。
常用操作:
* 生成轮廓
gen_contour_polygon_xld(Contour, [0, 333], [0, 222])
gen_cross_contour_xld(Cross, Rows, Columns, 32, rad(45))
* 获取轮廓点
get_contour_xld(Contour, Rows, Columns)
控制类数据 (Control)
整型/布尔型
* 整型赋值
a := 10
* 布尔型赋值
b := true
c := false
浮点型
* 浮点数赋值
e := 3.14
字符串
* 字符串赋值
str := 'Halcon'
数组操作
* 空数组
Tuple := []
* 整型数组
Tuple := [1, 2, 3]
* 字符串数组
StuName := ['a', 'b', 'c']
* 修改指定索引值
StuName[0] := '张三'
* 数组连接
t1 := [1, 2, 3]
t2 := [4, 5, 6]
tuple_concat(t1, t2, t4)
* 数组长度
t5 := [1, 2, 3]
i := |t5|
* 数组查找
t6 := [1, 2, 3, 4, 5, 6]
t7 := [4, 5]
* 在数组中查找值(子数组):查找需要注意顺序,从小索引往大索引查
* index返回值为-1,没有找到
* index返回值大于等于0,说明找到了下标
tuple_find(t6, t7, index_1)
Halcon的数据结构分类
图标类数据:Iconic
Image 图片 Region 区域 XLD 轮廓
控制类数据:Control
string 字符串 integer 整形 real 浮点数 handle 句柄
数组
Iconic数组(Objects):最小索引为1,最大索引为数组长度 Control数组(Control Tuple):最小索引为0,最大索引为数组长度-1,长度是1时,可作为1个变量用 Vector数组,可包含Iconic数据和Iconic数组,或Control数据和Control数组
字典 Dictionary
键值存储 单个容器内,可以存储任意Iconic和Control数据和数组 可同时包含Iconic(数组)和Control(数组)对象
算子
算子结构
Operator( <输入图像参数> : <输出参数> : <控制参数> )
窗口管理与显示算子
dev_open_window - 打开图形窗口
dev_open_window(Row, Column, Width, Height, Background, WindowHandle)
* 示例: dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
功能概述: 打开一个新的图形窗口 用于显示图像和结果。
主要参数:
Row
,Column
: 窗口左上角的屏幕坐标。Width
,Height
: 窗口的宽度和高度(像素)。可以设为图像尺寸或 -1 实现自适应。Background
: 窗口的背景颜色 (如 'black', 'white')。WindowHandle
: 输出的窗口句柄,用于后续操作。
dev_display - 在窗口显示对象
dev_display(Object)
功能概述: 在当前活动的图形窗口中显示图像或区域 (Object
)。
主要参数:
Object
: 要显示的图像或区域变量。
dev_set_lut - 设置灰度颜色映射表
dev_set_lut(LUTName)
* 示例: dev_set_lut('rainbow')
* 示例: dev_set_lut('default')
功能概述: 设置当前窗口显示灰度图像时使用的颜色查找表 (LUT)。
主要参数:
LUTName
: 颜色映射表名称,常用如'default'
,'rainbow'
,'temperature'
,'linear'
。
dev_set_part - 设置显示区域部分
dev_set_part(Row1, Col1, Row2, Col2)
* 示例: dev_set_part(160, 250, 210, 300)
功能概述: 控制当前窗口显示的图像部分 (缩放/平移)。指定图像坐标系中的一个矩形区域来填充整个窗口。
主要参数:
Row1
,Col1
: 要显示的图像区域的左上角坐标。Row2
,Col2
: 要显示的图像区域的右下角坐标。
dev_clear_window - 清空窗口
dev_clear_window()
功能概述: 清除当前活动窗口中的所有显示内容。
dev_set_color - 设置绘制颜色
dev_set_color(ColorName)
* 示例: dev_set_color('green')
* 示例: dev_set_color('red')
功能概述: 设置后续绘制操作(如显示区域、文字、图形)所使用的颜色。
主要参数:
ColorName
: 颜色名称字符串 (如 'red', 'green', 'blue', 'yellow', '#FF00A0' 等)。
dev_set_colored - 设置多种绘制颜色
dev_set_colored(NumberOfColors)
* 示例: dev_set_colored(6)
* 示例: dev_set_colored(12)
功能概述: 设置一个包含多种颜色的颜色列表,用于同时显示多个区域对象时,能以不同颜色区分它们。
主要参数:
NumberOfColors
: 指定要使用的不同颜色的数量。
dev_set_draw - 设置区域填充模式
dev_set_draw(Mode)
* 示例: dev_set_draw('fill') // 填充模式
* 示例: dev_set_draw('margin') // 轮廓模式
功能概述: 控制区域对象在窗口中显示时是填充显示还是只显示轮廓。
主要参数:
Mode
: 填充模式 ('fill'
或'margin'
)。
set_display_font - 设置字体
set_display_font(WindowHandle, Size, Font, Bold, Slant)
* 示例: set_display_font(WindowID, 14, 'mono', 'true', 'false')
功能概述: 设置在指定窗口中使用 disp_message
显示文本时所使用的字体属性。
主要参数:
WindowHandle
: 目标窗口句柄。Size
: 字体大小。Font
: 字体名称 (如 'mono', 'sans', 'serif', 或具体字体名 'Courier New')。Bold
: 是否加粗 ('true'/'false')。Slant
: 是否倾斜 ('true'/'false')。
disp_message - 显示文字
disp_message(WindowHandle, String, CoordSystem, Row, Col, Color, Box)
* 示例: disp_message(WindowHandle, 'text', 'window', 108, 108, 'black', 'true')
功能概述: 在指定窗口的指定位置显示文本字符串。
主要参数:
WindowHandle
: 目标窗口句柄。String
: 要显示的文本。CoordSystem
: 坐标系 ('window'
或'image'
)。Row
,Col
: 文本显示位置的行和列坐标。Color
: 文本颜色。Box
: 是否带背景框 ('true'/'false')。
disp_arrow - 显示箭头
disp_arrow(WindowHandle, Row1, Col1, Row2, Col2, Size)
* 示例: disp_arrow(WindowHandle, 10, 10, 118, 118, 1)
功能概述: 在指定窗口中绘制一个箭头。
主要参数:
WindowHandle
: 目标窗口句柄。Row1
,Col1
: 箭头起点坐标。Row2
,Col2
: 箭头终点坐标。Size
: 箭头头部大小。
disp_circle - 显示圆形
disp_circle(WindowHandle, Row, Column, Radius)
* 示例: disp_circle(WindowHandle, 150, 150, 30)
功能概述: 在指定窗口中绘制一个圆或圆弧。
主要参数:
WindowHandle
: 目标窗口句柄。Row
,Column
: 圆心坐标。Radius
: 圆的半径。
dump_window - 保存窗口内容
dump_window(WindowHandle, Device, FileName)
* 示例: dump_window(WindowHandle, 'png', 'D:/TEMP/字母.png')
功能概述: 将指定窗口的当前显示内容保存为图像文件。
主要参数:
WindowHandle
: 要保存内容的窗口句柄。Device
: 输出文件格式 (如 'png', 'jpeg', 'tiff', 'bmp')。FileName
: 保存的文件路径和名称。
dev_close_window - 关闭窗口
dev_close_window()
功能概述: 关闭所有由 HDevelop 打开的图形窗口。
图像加载、信息获取与 ROI
read_image - 读取图像
read_image(Image, FileName)
* 示例: read_image(Image, 'C:/Users/path/to/image.jpg')
* 示例: read_image(Image, 'fabrik') // 读取 Halcon 自带示例图像
//读取多张图片
read_image (Image1,['C:/Users/logo.jpg','C:/Users/logo.jpg'])
select_obj(Image1,Objectselected1,2)
功能概述: 从磁盘文件读取图像到 Halcon 图像变量 Image
中。
主要参数:
Image
: 输出的图像变量。FileName
: 图像文件的完整路径和名称或 Halcon 示例图像名称。
get_image_size - 获取图像尺寸
get_image_size(Image, Width, Height)
功能概述: 获取输入图像 Image
的宽度 Width
和高度 Height
(单位:像素)。
主要参数:
Image
: 输入的图像变量。Width
: 输出的图像宽度。Height
: 输出的图像高度。
reduce_domain - 图像域缩减 (定义 ROI)
reduce_domain(Image, DomainRegion, ImageReduced)
* 示例: gen_rectangle1(Rectangle, 170, 80, 370, 510)
* reduce_domain(GrayImage, Rectangle, ImageReduced)
功能概述: 将图像 Image
的有效处理区域 (Domain) 限制为指定的 DomainRegion
区域(Region of Interest - ROI)。后续对 ImageReduced
的操作将仅在 ROI 内进行,可提高效率或聚焦处理。图像矩阵大小不变,只是标记了有效处理范围。
主要参数:
Image
: 输入的图像变量。DomainRegion
: 用于定义新处理域的区域变量。ImageReduced
: 输出的带有缩减域的图像变量。
crop_part - 裁剪图像部分
crop_part(Image, ImagePart, Row, Column, Width, Height)
* 示例: crop_part(ImageProspect, ImagePartProspect, 0, 0, 1000, 600)
功能概述: 从输入图像 Image
中裁剪出一个矩形部分,生成一个新的、尺寸更小的图像 ImagePart
。与 reduce_domain
不同,crop_part
会改变图像的矩阵大小。
主要参数:
Image
: 输入的图像变量。ImagePart
: 输出的裁剪后的新图像变量。Row
,Column
: 裁剪区域在原图中的左上角坐标。Width
,Height
: 裁剪区域的宽度和高度。
图像类型转换
rgb1_to_gray - 彩色转灰度
rgb1_to_gray(RGBImage, GrayImage)
功能概述: 将输入的单张 RGB 彩色图像 RGBImage
(通常是 3 通道) 转换为单通道灰度图像 GrayImage
。这是许多基于灰度分析的算法(如阈值分割、形态学操作)的前提。
主要参数:
RGBImage
: 输入的 RGB 图像变量。GrayImage
: 输出的灰度图像变量。
知识点:
- 默认转换公式通常基于亮度感知:
Gray = 0.299 * R + 0.587 * G + 0.114 * B
。
convert_image_type - 转换图像数据类型
convert_image_type(Image, ImageConverted, NewType)
* 示例: convert_image_type(Image, ImageConverted, 'int2')
* 示例: convert_image_type(Image, ImageConverted, 'real')
功能概述: 转换输入图像 Image
的像素数据类型为 NewType
。常用于在进行图像运算(如加减乘除)前,防止像素值溢出(超出原类型范围,如 byte 的 0-255)。
主要参数:
Image
: 输入的图像变量。ImageConverted
: 输出的转换类型后的图像变量。NewType
: 目标数据类型字符串,如'byte'
,'int1'
,'int2'
,'uint2'
,'int4'
,'real'
,'complex'
,'vector_field_relative'
等。
图像运算 (算术)
add_image - 图像加法
add_image(Image1, Image2, ImageResult, Mult, Add)
功能概述: 将两幅图像 Image1
和 Image2
逐像素相加,结果乘以 Mult
再加上 Add
(ImageResult = (Image1 + Image2) * Mult + Add
)。主要用于降低随机噪声(通过叠加多帧图像并求平均)或图像合成。
主要参数:
Image1
,Image2
: 输入的图像变量。ImageResult
: 输出的结果图像。Mult
: 乘法因子。Add
: 加法因子 (偏移量)。
知识点:
- 降噪: 叠加多帧含随机噪声但主体不变的图像,然后用
scale_image
或mean_n
求平均,噪声会相互抵消。需要先用convert_image_type
转换到更高位深类型 (如int2
,real
) 防止溢出。 - 合成: 通过调整
Mult
控制两图像的混合比例 (如Mult=0.5
表示等权重混合)。
sub_image - 图像减法
sub_image(ImageMinuend, ImageSubtrahend, ImageSub, Mult, Add)
功能概述: 计算两幅图像 ImageMinuend
(被减数) 和 ImageSubtrahend
(减数) 的逐像素差值 (ImageSub = (ImageMinuend - ImageSubtrahend) * Mult + Add
)。特别适用于检测两帧图像之间的差异或运动物体。
主要参数:
ImageMinuend
,ImageSubtrahend
: 输入的图像变量。ImageSub
: 输出的差值图像。Mult
: 乘法因子。Add
: 加法因子。
知识点:
- 结果图中,接近中间灰度 (如 128 for
int2
) 的区域表示两图相似;亮或暗的区域表示存在差异。 - 常用于背景减除、缺陷检测、运动检测。同样建议先
convert_image_type
。
mult_image - 图像乘法
mult_image(Image1, Image2, ImageResult, Mult, Add)
* 示例 (掩膜提取): paint_region(Rectangle, ImageConst, ImageMark, 255, 'fill')
* mult_image(ImageMark, GrayImage, ImageResult, 1.0/255, 0)
* 示例 (对比度增强): mult_image(GrayImage, GrayImage, ImageResult, 0.005, 0)
功能概述: 将两幅图像 Image1
和 Image2
逐像素相乘 (ImageResult = (Image1 * Image2) * Mult + Add
)。常用于:
- 掩模操作: 将一个二值掩模图像 (
Image2
, 值为 0 或 1/255) 与原图相乘,以提取掩模对应的区域。 - 对比度调整: 将图像与自身相乘 (或乘以一个常数因子) 来非线性地调整对比度。
主要参数:
Image1
,Image2
: 输入的图像变量 (其中一个可以是常数)。ImageResult
: 输出的结果图像。Mult
: 乘法因子。Add
: 加法因子。
知识点:
- 掩模: 若掩模
ImageMark
值为 0 和 255,则Mult
通常设为1.0/255
以保持原灰度。 - 对比度增强:
mult_image(Gray, Gray, ..., 0.005, 0)
相当于Result = Gray^2 * 0.005
,会显著增强亮区。
div_image - 图像除法
div_image(Image1, Image2, ImageResult, Mult, Add)
功能概述: 将图像 Image1
(被除数) 逐像素除以 Image2
(除数) (ImageResult = (Image1 / Image2) * Mult + Add
)。主要用于校正不均匀光照或增益变化。通常 Image2
是一张在相同光照下拍摄的均匀背景(如白板)的图像。
主要参数:
Image1
,Image2
: 输入的图像变量。ImageResult
: 输出的结果图像。Mult
: 乘法因子 (常用于调整结果的整体亮度)。Add
: 加法因子。
知识点:
- 是平场校正 (Flat-field correction) 的一种实现方式。
- 除数图像
Image2
中不能有像素值为 0。 - 强烈建议使用
convert_image_type
将输入图像转为'real'
类型进行计算,以保证精度和避免除零错误。
灰度变换与增强
scale_image_max - 灰度范围最大化
scale_image_max(Image, ImageScaleMax)
功能概述: 自动将输入图像 Image
的灰度值进行线性拉伸,使其充满目标图像类型 (通常是 byte 类型,0-255) 的整个动态范围。用于全局对比度增强。
主要参数:
Image
: 输入的图像变量。ImageScaleMax
: 输出的灰度拉伸后的图像。
知识点:
- 变换公式:
g' = (g - min) * MaxGrayValue / (max - min)
,其中min
和max
是原图灰度最小/最大值,MaxGrayValue
通常是 255。 - 对灰度分布较窄的图像效果显著。
scale_image - 线性灰度变换
scale_image(Image, ImageScaled, Mult, Add)
* 示例 (增强对比度): scale_image(Image, ImageScaled1, 1.5, -50) // Mult>1 增强, Add 调整亮度
* 示例 (减弱对比度): scale_image(Image, ImageScaled2, 0.5, 50) // 0<Mult<1 减弱
* 示例 (求平均): scale_image(ImageSum, ImageAvg, 0.2, 0) // Mult = 1/N 求 N 图平均
功能概述: 对输入图像 Image
的每个像素应用线性变换 g' = g * Mult + Add
。用于手动调整图像的对比度和亮度,或在图像算术运算后进行缩放(如求平均)。
主要参数:
Image
: 输入的图像变量。ImageScaled
: 输出的结果图像。Mult
: 乘法因子,控制对比度。Add
: 加法因子,控制亮度。
知识点:
Mult > 1
增强对比度,0 < Mult < 1
减弱对比度。Add > 0
增亮,Add < 0
减暗。- 结果会被裁剪到目标图像类型的有效范围内 (如 0-255 for byte)。
invert_image - 图像灰度反转
invert_image(Image, ImageInvert)
功能概述: 反转输入图像 Image
的灰度值,产生类似照片底片的效果。对于 byte 图像,计算为 g' = 255 - g
。
主要参数:
Image
: 输入的图像变量。ImageInvert
: 输出的灰度反转后的图像。
知识点:
- 亮区变暗,暗区变亮。
emphasize - 对比度增强 (局部)
emphasize(Image, ImageEmphasize, MaskWidth, MaskHeight, Factor)
* 示例: emphasize(GrayImage, ImageEmphasize, 7, 7, 2)
功能概述: 通过计算像素与其局部邻域均值的差异,并放大该差异,来增强图像的局部对比度,特别是突出细节和边缘。类似非锐化掩模 (Unsharp Masking)。
主要参数:
Image
: 输入的图像变量。ImageEmphasize
: 输出的对比度增强后的图像。MaskWidth
,MaskHeight
: 定义邻域大小的掩模尺寸 (通常为较小的奇数)。Factor
: 增强因子,值越大,增强效果越明显。
知识点:
Factor = 1
时,图像不变。Factor > 1
增强对比度。- 可以锐化图像,但也可能放大噪声。
log_image - 对数变换
log_image(Image, LogImage, Base)
* 示例: log_image(GrayImage, LogImage, 'e') // 自然对数
功能概述: 对输入图像 Image
应用对数变换 g' = log_Base(g)
。主要用于压缩高灰度值范围,扩展低灰度值范围,从而增强暗区的细节。
主要参数:
Image
: 输入的图像变量 (灰度值需 > 0)。LogImage
: 输出的对数变换后的图像 (通常是 'real' 类型)。Base
: 对数的底数 (如 'e' 表示自然对数, 也可以是数字如 10)。
知识点:
- 对动态范围非常大的图像(如傅里叶频谱图)效果好。
- 是非线性变换。
pow_image - 指数 (幂律) 变换
pow_image(Image, PowImage, Exponent)
* 示例: pow_image(LogImage, PowImage, 2)
功能概述: 对输入图像 Image
应用指数(幂律)变换 g' = g ^ Exponent
(通常要求 g >= 0)。
Exponent > 1
: 扩展高灰度值范围,压缩低灰度值范围,增强亮区细节。0 < Exponent < 1
: 压缩高灰度值范围,扩展低灰度值范围,增强暗区细节 (效果类似对数变换)。
主要参数:
Image
: 输入的图像变量。PowImage
: 输出的指数变换后的图像。Exponent
: 指数值。
知识点:
- 常用于伽马校正。
- 是非线性变换。
equ_histo_image - 直方图均衡化
equ_histo_image(Image, ImageEquHisto)
功能概述: 对输入图像 Image
进行直方图均衡化,重新分布像素的灰度级,使得输出图像 ImageEquHisto
的灰度直方图尽可能均匀地覆盖整个灰度范围。这是一种全局自适应对比度增强方法。
主要参数:
Image
: 输入的图像变量。ImageEquHisto
: 输出的直方图均衡化后的图像。
知识点:
- 无需手动调参,自动增强全局对比度。
- 对像素值集中在狭窄范围内的图像效果显著。
- 可能过度增强噪声或丢失一些细微灰度变化。
gray_histo - 计算灰度直方图
gray_histo(Regions, Image, AbsoluteHisto, RelativeHisto)
* 示例: gray_histo(ImageEquHisto, ImageEquHisto, AbsoluteHisto, RelativeHisto) // 计算整图直方图
功能概述: 计算输入图像 Image
在指定区域 Regions
内的灰度值分布情况。
主要参数:
Regions
: 输入的区域,指定计算直方图的范围(若与Image
相同,则计算整图)。Image
: 输入的图像变量。AbsoluteHisto
: 输出的绝对直方图 (包含各灰度级像素计数的元组)。RelativeHisto
: 输出的相对直方图 (包含各灰度级像素比例的元组)。
知识点:
- 提供图像灰度分布统计信息,是理解对比度、亮度分布的基础。
RelativeHisto
常用于histo_to_thresh
。
gray_features - 计算区域灰度特征
gray_features(Regions, Image, Features, Value)
* 示例: gray_features(Region, Image, 'min', MinDisp)
功能概述: 计算区域的灰度特征值。
主要参数:
Regions
: 输入区域Image
: 灰度图像Features
: 特征名称Value
: 输出特征值
min_max_gray - 计算区域的最大与最小灰度值
min_max_gray(Regions, Image, Percent, Min, Max, Range)
* 示例: min_max_gray(Rectangle1, Image, 5, Min1, Max1, Range1)
功能概述: 计算区域的最大与最小灰度值。根据灰度直方图,取波峰和谷底之间的区域,区域两端向内收缩一定百分比,然后计算最小和最大灰度值。
主要参数:
Regions
: 输入区域Image
: 灰度图像Percent
: 低于最大绝对灰度值的百分比Min
: 输出最小灰度值Max
: 输出最大灰度值Range
: 最大和最小值之间的区间
intensity - 计算灰度的平均值和偏差
intensity(Regions, Image, Mean, Deviation)
* 示例: intensity(Rectangle1, Image, Mean1, Deviation1)
功能概述: 计算区域的灰度平均值和偏差。
主要参数:
Regions
: 输入区域Image
: 灰度图像Mean
: 输出灰度平均值Deviation
: 输出灰度偏差
空间域滤波 (平滑与噪声)
mean_image - 均值滤波
mean_image(Image, ImageMean, MaskWidth, MaskHeight)
* 示例: mean_image(Image, ImageMean, 9, 9)
* 示例 (dyn_threshold 前处理): mean_image(ImageResult, ImageMean, 50, 50)
功能概述: 对输入图像 Image
进行均值滤波。每个像素的新值由其 MaskWidth
x MaskHeight
邻域内所有像素的平均值决定。主要用于平滑图像、去除高斯噪声。
主要参数:
Image
: 输入的图像变量。ImageMean
: 输出的均值滤波后的图像。MaskWidth
,MaskHeight
: 滤波器(掩模)的宽度和高度 (通常为奇数)。
知识点:
- 线性低通滤波器。
- 滤波器尺寸越大,平滑效果越强,图像越模糊,边缘效应越明显。
- 常作为
dyn_threshold
的参考图像生成方法。
median_image - 中值滤波
median_image(Image, ImageMedian, MaskType, Radius, Margin)
* 示例: median_image(ImageNoise, ImageMedian, 'circle', 3, 'mirrored')
* 示例 (garlic.jpg): median_image(GrayImage, ImageFiltering, 'circle', 100, 'mirrored')
功能概述: 对输入图像 Image
进行中值滤波。每个像素的新值由其邻域(由 MaskType
和 Radius
定义)内所有像素的中值决定。特别适用于去除椒盐噪声(脉冲噪声),同时能较好地保护图像边缘。
主要参数:
Image
: 输入的图像变量。ImageMedian
: 输出的中值滤波后的图像。MaskType
: 滤波器(掩模)的形状 (如 'circle', 'square')。Radius
: 滤波器的半径(决定邻域大小)。Margin
: 图像边界处理方式 (如 'mirrored', 'cyclic', 'constant')。
知识点:
- 非线性滤波器。
- 对椒盐噪声(孤立亮/暗点)效果极佳。
- 相比均值滤波,能更好地保留边缘细节。
gauss_filter - 高斯滤波
gauss_filter(Image, ImageGauss, Size)
* 示例: gauss_filter(Image, ImageGauss, 7)
功能概述: 对输入图像 Image
应用高斯滤波器进行平滑处理。使用高斯核进行加权平均,离中心越近的像素权重越大。用于图像平滑和去除高斯噪声。
主要参数:
Image
: 输入的图像变量。ImageGauss
: 输出的高斯滤波后的图像。Size
: 高斯滤波器的大小(窗口边长,通常为奇数,对应不同的 Sigma)。
知识点:
- 线性低通滤波器。
- 滤波效果比均值滤波更平滑自然,边缘保留效果介于均值和中值之间。
Size
越大,平滑效果越强,模糊程度越高。
mean_n - 多图像平均
mean_n(MultiChannelImage, ImageMean)
功能概述: 计算一个多通道图像对象 MultiChannelImage
中,所有通道对应像素的平均值,生成一个单通道的平均图像 ImageMean
。主要用于通过平均多帧图像来降低随机噪声。
主要参数:
MultiChannelImage
: 输入的多通道图像 (通常由多张单通道图像使用append_channel
组合而成)。ImageMean
: 输出的单通道平均图像。
知识点:
- 假设多张图像内容基本一致,噪声随机独立。平均后信噪比提高。
- 前提是图像之间需精确对齐。
添加噪声 (辅助算子)
* 1. 定义噪声分布
gauss_distribution(Sigma, DistributionHandle) // 高斯噪声
sp_distribution(PercentSalt, PercentPepper, DistributionHandle) // 椒盐噪声
* 2. 添加噪声
add_noise_distribution(Image, ImageNoise, DistributionHandle)
* 或者直接添加白噪声 (均匀分布)
add_noise_white(Image, ImageNoise, Amplitude)
功能概述: 用于向图像中人为添加指定类型和强度的噪声,常用于测试去噪算法的效果。
知识点:
add_noise_distribution
需要先用gauss_distribution
或sp_distribution
创建噪声模型句柄。add_noise_white
添加均匀分布噪声。
频域滤波
fft_generic - 通用傅里叶变换
fft_generic(Image, ImageFFT, Direction, Norm, Mode, ResultType)
* 正变换示例: fft_generic(GrayImage, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 逆变换示例: fft_generic(ImageConvol, ImageResult, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')
功能概述: 执行快速傅里叶变换 (FFT) 或其逆变换 (IFFT),实现图像在空间域和频域之间的转换。
主要参数:
Image
: 输入图像 (空域或频域)。ImageFFT
: 输出图像 (频域或空域)。Direction
: 变换方向 ('to_freq'
正变换,'from_freq'
逆变换)。Norm
: 正逆变换的归一化因子 (如 'sqrt', 'n', 'none')。前后需匹配。Mode
: 直流分量 (DC) 的位置 ('dc_center'
零频在中心,'dc_edge'
在边缘)。ResultType
: 输出图像类型 (频域通常'complex'
, 逆变换回空域常'byte'
或'real'
)。
知识点:
- 频域分析和滤波的基础。
Mode='dc_center'
便于观察和处理频域,低频在中心,高频在四周。- 频域图像 (
'complex'
) 包含幅度和相位信息。通常显示其幅度谱 (sqrt_image
或power_real_to_image
) 进行观察。
gen_lowpass - 生成低通滤波器 (频域)
gen_lowpass(ImageLowpass, Frequency, Smooth, Mode, Width, Height)
* 示例: gen_lowpass(ImageLowpass, 0.1, 'gauss', 'dc_center', Width, Height)
功能概述: 生成一个频域低通滤波器图像 ImageLowpass
。该滤波器允许低频分量通过,抑制高频分量,用于图像平滑和去噪。
主要参数:
ImageLowpass
: 输出的低通滤波器图像 (频域)。Frequency
: 截止频率 (0 到 1,相对于图像尺寸的一半)。值越小,滤波越强,图像越模糊。Smooth
: 滤波器边缘的平滑过渡方式 (如 'none' 理想, 'gauss', 'linear')。'gauss' 可减少振铃效应。Mode
: DC 分量位置 (应与fft_generic
一致)。Width
,Height
: 滤波器图像尺寸 (应与 FFT 图像尺寸一致)。
gen_highpass - 生成高通滤波器 (频域)
gen_highpass(ImageHighpass, Frequency, Attenuation, Mode, Width, Height)
* 示例: gen_highpass(ImageHighpass, 0.1, 'n', 'dc_center', Width, Height)
功能概述: 生成一个频域高通滤波器图像 ImageHighpass
。该滤波器允许高频分量通过,抑制(或衰减)低频分量,用于边缘增强、细节提取。
主要参数:
ImageHighpass
: 输出的高通滤波器图像 (频域)。Frequency
: 截止频率 (0 到 1)。值越小,允许通过的频率越高。Attenuation
: 低频衰减因子 (0 到 1,'n'
表示完全阻止低频,即衰减为 0)。Mode
: DC 分量位置 (应与fft_generic
一致)。Width
,Height
: 滤波器图像尺寸 (应与 FFT 图像尺寸一致)。
convol_fft - 频域卷积
convol_fft(ImageFFT, FilterFFT, ImageConvol)
功能概述: 将频域表示的图像 ImageFFT
与频域表示的滤波器 FilterFFT
进行逐点相乘。这等效于在空间域进行卷积操作,是频域滤波的核心步骤。
主要参数:
ImageFFT
: 输入的经过 FFT 的图像 (通常是 'complex' 类型)。FilterFFT
: 输入的频域滤波器 (由gen_lowpass
,gen_highpass
等生成)。ImageConvol
: 输出的滤波后的频域图像 ('complex' 类型)。
知识点:
- 利用了卷积定理:空间域卷积 = 频域乘积。
- 通常比空间域卷积在大滤波器尺寸时更高效。
- 输入图像和滤波器需尺寸相同,DC 模式一致。
- 结果
ImageConvol
需用fft_generic
逆变换回空间域查看效果。
边缘检测
像素级边缘检测
sobel_amp - Sobel 算子
sobel_amp(Image, EdgeAmplitude, FilterType, Size)
* 示例: sobel_amp(Image, EdgeAmplitude, 'sum_abs', 3)
功能概述: 使用 Sobel 算子 计算图像 Image
的一阶导数(梯度)幅度,用于检测边缘。输出 EdgeAmplitude
是边缘强度图。
主要参数:
Image
: 输入图像。EdgeAmplitude
: 输出的边缘强度图。FilterType
: 梯度计算方式 (如 'sum_abs', 'sum_sqrt')。Size
: Sobel 算子的大小 (如 3, 5, 7)。
知识点: 基础边缘检测,对噪声敏感,通常需要配合 threshold
。
roberts - Roberts 算子
roberts(Image, ImageRoberts, FilterType)
* 示例: roberts(Image, ImageRoberts, 'roberts_max')
功能概述: 使用 Roberts 滤波器 (2x2) 进行边缘检测,计算交叉方向的灰度差分。适用于陡峭边缘且噪声较小的图像。
主要参数:
Image
: 输入图像。ImageRoberts
: 输出的边缘图像。FilterType
: 滤波器类型 ('roberts_max'
等)。
kirsch_amp - Kirsch 算子
kirsch_amp(Image, ImageEdgeAmp)
功能概述: 使用 Kirsch 算子 (8 个 3x3 模板) 检测 8 个方向的边缘强度,取最大值作为边缘强度。
主要参数:
Image
: 输入图像。ImageEdgeAmp
: 输出的边缘幅度图像。
laplace - Laplace 算子
laplace(Image, ImageLaplace, FilterType, Size, Norm)
* 示例: laplace(Image, ImageLaplace, 'signed', 3, 'n_8_isotropic')
功能概述: 使用 Laplace 算子 计算图像 Image
的二阶导数,用于边缘检测。边缘对应于二阶导数的零交叉点或强响应区域。
主要参数:
Image
: 输入图像。ImageLaplace
: 输出的拉普拉斯响应图像。FilterType
: 拉普拉斯核类型 ('signed', 'unsigned')。Size
: 算子大小 (如 3, 5)。Norm
: 归一化方式。
知识点: 对噪声非常敏感,但边缘定位较准(通过零交叉)。
laplace_of_gauss (LoG) - 高斯拉普拉斯算子
laplace_of_gauss(Image, ImageLaplace, Sigma)
* 示例: laplace_of_gauss(Image, ImageLaplace, 2)
* 示例: laplace_of_gauss(Image, ImageLaplace, 5)
功能概述: 应用 高斯-拉普拉斯 (LoG) 滤波器。先进行高斯平滑抑制噪声,再应用拉普拉斯算子检测边缘 (表现为二阶导数的零交叉点)。
主要参数:
Image
: 输入图像。ImageLaplace
: 输出的 LoG 滤波后的图像。Sigma
: 高斯核的标准差,控制平滑程度。
zero_crossing - 零交叉检测
zero_crossing(ImageLaplace, RegionCrossing)
功能概述: 在经过 LoG 等算子处理后的图像 ImageLaplace
上,检测二阶导数的零交叉点,生成包含这些点的边缘区域 RegionCrossing
。
主要参数:
ImageLaplace
: 输入的 LoG 或类似二阶导数运算的图像。RegionCrossing
: 输出的零交叉点区域。
edges_image - Canny 边缘检测 (或其他)
概念 (Canny): 由 John F. Canny 提出,通过高斯平滑、梯度计算、非极大值抑制、双阈值边缘连接等多步骤检测边缘,效果较好,抗噪性强。
edges_image(Image, ImaAmp, ImaDir, Filter, Alpha, NMS, Low, High)
* 示例 (Canny 变体): edges_image(Image, ImaAmp, ImaDir, 'lanser2', 0.5, 'nms', 12, 22)
功能概述: 实现包括 Canny 在内的多种边缘检测算法。
主要参数:
Image
: 输入图像。ImaAmp
: 输出边缘幅度图。ImaDir
: 输出边缘方向图。Filter
: 使用的算法 (如 'canny', 'sobel', 'lanser2' 等)。Alpha
: 高斯平滑参数 (用于 Canny 等)。NMS
: 非极大值抑制方法 ('nms', 'h_nms' 等)。Low
,High
: 低阈值和高阈值 (用于 Canny 的滞后阈值法)。
亚像素级边缘提取
概念 (亚像素): 精度高于传统像素级(一个像素宽度)。通过插值等方法,将边缘、角点等特征的定位精度提高到像素内部,适用于高精度测量和定位。
edges_sub_pix - 亚像素边缘提取
edges_sub_pix(Image, Edges, Filter, Alpha, Low, High)
* 示例: edges_sub_pix(Image, Edges, 'canny', 2, 12, 22)
功能概述: 以亚像素精度提取图像边缘,输出为 XLD 轮廓 (Edges
)。基于 Canny 等算法思想,但定位更精确。
主要参数:
Image
: 输入图像。Edges
: 输出的XLD 轮廓 (eXtended Line Description)。Filter
: 使用的边缘检测算法 (如 'canny', 'lanser1', 'lanser2')。Alpha
: 平滑参数。Low
,High
: 低阈值和高阈值。
阈值分割
概念 (阈值分割): 基于区域的图像分割技术,通过比较像素灰度值与一个或多个阈值,将像素分为前景 (目标) 和背景。
- 优点: 计算简单、效率高、速度快。
- 难点: 阈值选择是关键,直接影响分割精度。光照不均、对比度低时效果可能不佳。
- 步骤: 1. 确定阈值; 2. 比较像素值; 3. 像素归类。
- 分类:
- 全局阈值 (Global): 整幅图像使用相同阈值。适用于光照均匀。
- 手动: 人工根据直方图等信息设定阈值。
- 自动: 算法根据直方图特性 (如 Otsu, 波谷法) 自动计算阈值。
- 局部阈值 (Local/Adaptive): 每个像素根据其邻域特性计算不同阈值。适用于光照不均、背景复杂。
- 全局阈值 (Global): 整幅图像使用相同阈值。适用于光照均匀。
全局阈值分割
threshold - 手动全局阈值
threshold(Image, Region, MinGray, MaxGray)
* 示例: threshold(Image, Region, 128, 255) // 提取灰度值在 [128, 255] 的像素
* 示例 (配合 histo_to_thresh): threshold(Image, Region, MinThresh[0], MaxThresh[0])
* 示例 (二值化边缘图): threshold(EdgeAmplitude, Region, 10, 255)
功能概述: 最基本的阈值分割。将图像 Image
中灰度值在 [MinGray
, MaxGray
] 范围内 的像素点分割出来,形成区域 Region
。
主要参数:
Image
: 输入图像 (通常灰度图)。Region
: 输出的区域对象。MinGray
: 最小灰度阈值。MaxGray
: 最大灰度阈值。
histo_to_thresh - 直方图确定阈值
histo_to_thresh(Histogram, Sigma, MinThresh, MaxThresh)
* 示例: gray_histo(Image, Image, AbsoluteHisto, RelativeHisto)
* histo_to_thresh(RelativeHisto, 8, MinThresh, MaxThresh)
功能概述: 根据输入的相对灰度直方图 (Histogram
),通过高斯平滑(平滑系数 Sigma
)找到直方图中的波谷,并将波谷对应的灰度值作为分割阈值范围 (MinThresh
, MaxThresh
) 输出。常用于配合 threshold
实现一种基于直方图波谷的自动分割。
主要参数:
Histogram
: 输入的相对灰度直方图 (通常来自gray_histo
)。Sigma
: 直方图高斯平滑系数。值越大,平滑越强,可能找到更少的阈值。MinThresh
: 输出的分割区域的最小灰度值数组。MaxThresh
: 输出的分割区域的最大灰度值数组。
auto_threshold - 自动阈值 (基于直方图波谷)
auto_threshold(Image, Regions, Sigma)
* 示例: auto_threshold(Image, Regions, 5)
功能概述: 基于灰度直方图波谷的自动阈值分割。Sigma
控制直方图平滑度,影响找到的波谷数量,从而决定分割出的区域数量。
主要参数:
Image
: 输入图像。Regions
: 输出的分割后的多个区域 (每个波峰对应一个区域)。Sigma
: 直方图平滑系数。
binary_threshold - 二值化阈值 (自动单阈值)
binary_threshold(Image, Region, Method, LightDark, UsedThreshold)
* 示例: binary_threshold(GrayImage, DarkArea, 'max_separability', 'dark', UsedThreshold)
功能概述: 自动确定单个全局阈值并将图像分割为前景和背景两部分。支持多种自动阈值确定方法(如 Otsu 方法 'max_separability'
或基于平滑直方图的 'smooth_histo'
)。
主要参数:
Image
: 输入的单通道图像 (byte 或 uint2)。Region
: 输出的分割区域 (前景)。Method
: 自动确定阈值的方法。LightDark
: 指定前景是亮区域还是暗区域 ('light'
或'dark'
)。UsedThreshold
: 输出实际使用的阈值。
局部/动态阈值分割
dyn_threshold - 动态阈值 (基于参考图像)
dyn_threshold(OrigImage, ThresholdImage, RegionDynThresh, Offset, LightDark)
* 示例: mean_image(ImageResult, ImageMean, 50, 50)
* dyn_threshold(ImageResult, ImageMean, RegionDynThresh, 4, 'not_equal')
* 示例 (garlic.jpg): dyn_threshold(GrayImage, ImageFiltering, RegionDynThresh, 20, 'light')
功能概述: 局部自适应阈值方法。比较原始图像 (OrigImage
) 和一个参考图像 (ThresholdImage
,通常是原图的平滑版本) 的局部像素差异。将差异大于 Offset
值的像素提取出来。适用于光照不均。
主要参数:
OrigImage
: 输入的原始图像。ThresholdImage
: 输入的参考图像 (常为OrigImage
的mean_image
或median_image
结果)。RegionDynThresh
: 输出的分割区域。Offset
: 灰度差异阈值。LightDark
: 指定提取亮、暗、相等或不等区域 ('light'
,'dark'
,'equal'
,'not_equal'
)。
var_threshold - 动态阈值 (基于局部统计)
var_threshold(Image, Region, MaskWidth, MaskHeight, StdDevFactor, AbsThreshold, LightDark)
* 示例: var_threshold(ImageReduced, Region, 15, 15, 0.2, 35, 'dark')
功能概述: 基于局部统计特性 (均值和标准差) 的动态阈值分割。在每个像素的 MaskWidth
x MaskHeight
邻域内计算均值和标准差,自适应地确定该像素的阈值。适用于处理低对比度或纹理背景。
主要参数:
Image
: 输入图像。Region
: 输出的分割区域。MaskWidth
,MaskHeight
: 计算局部统计量的邻域窗口大小。StdDevFactor
: 用于调整阈值的标准差因子。AbsThreshold
: 一个绝对灰度差阈值补充。LightDark
: 指定提取亮区域还是暗区域 ('light'
或'dark'
)。
char_threshold - 字符阈值 (亮背景暗字符)
char_threshold(ImageMixed, ImageContrast, Characters, Sigma, Percent, Threshold)
* 示例: char_threshold(GrayImage, GrayImage, Characters, 6, 95, Threshold)
功能概述: 专门用于在明亮背景上提取黑暗字符的阈值分割算子。分析灰度直方图确定阈值。
主要参数:
ImageMixed
: 输入图像。ImageContrast
: 对比度参考图像 (通常同ImageMixed
)。Characters
: 输出的字符区域。Sigma
: 灰度曲线平滑系数。Percent
: 用于确定阈值的百分比 (距直方图峰值)。Threshold
: 输出计算得到的阈值。
区域处理
概念 (区域分割与生长):
- 区域分割: 利用像素属性的相似性将图像划分为不同区域。
- 区域生长法:
- 选择种子像素/区域。
- 检查种子邻域像素,将满足相似性准则的像素合并到种子区域。
- 将新合并的像素作为新种子,重复直到无像素可合并。
regiongrowing - 区域生长法
regiongrowing(Image, Regions, RasterHeight, RasterWidth, Tolerance, MinSize)
* 示例: regiongrowing(Mean, Regions, 1, 1, 3.0, 100)
功能概述: 将灰度相近的相邻像素合并成同一区域。
主要参数:
Image
: 输入的单通道图像Regions
: 输出的一组区域RasterHeight
,RasterWidth
: 矩形区域的高和宽,需要是奇数,以便计算中心坐标,默认是1Tolerance
: 灰度差值的分割标准,如果一个点的灰度与种子区域的灰度差值小于Tolerance,则认为它们可以合并MinSize
: 输出区域的最小像素数,默认为100
watersheds - 分水岭算法
watersheds(Image, Basins, Watersheds)
* 示例: watersheds(GrayImage, Basins, Watersheds)
功能概述: 一种典型的基于边缘的图像分割算法,通过寻找区域之间的分界线对图像进行分割。
主要参数:
Image
: 输入图像,一般为单通道图像Basins
: 输出的盆地区域Watersheds
: 输出的分水岭区域
area_center - 计算区域面积和中心点
area_center(Regions, Area, Row, Column)
* 示例: area_center(ConnectedRegions, Area, Row, Column)
功能概述: 计算区域的面积和几何中心点坐标。
主要参数:
Regions
: 输入图像区域Area
: 输出的单个区域中包含的灰度像素数量Row
,Column
: 几何中心点坐标,即单个区域的中心点行坐标均值和列坐标均值
area_holes - 计算封闭区域(孔洞)的面积
area_holes(Regions, Area)
* 示例: area_holes(Region, Area)
功能概述: 计算图像中封闭区域(孔洞)的面积,返回所有孔洞面积之和。
主要参数:
Regions
: 输入区域Area
: 计算得到的所有孔洞区域面积之和
select_shape - 根据特征值选择区域
select_shape(Regions, SelectedRegions, Features, Operation, Min, Max)
* 示例: select_shape(ConnectedRegions, SelectedRegions1, 'area', 'and', 1000, 99999)
功能概述: 根据特征筛选符合条件的区域,可用于筛选较大的前景目标,移除杂点和小区域。
主要参数:
Regions
: 输入区域SelectedRegions
: 输出区域Features
: 特征量Operation
: 逻辑操作Min
,Max
: 特征值范围
inner_circle - 计算区域最大内接圆
inner_circle(Regions, Row, Column, Radius)
* 示例: inner_circle(SelectedRegion3, Row, Column, Radius)
功能概述: 计算区域的最大内接圆。
主要参数:
Regions
: 输入区域Row
,Column
: 输出圆心坐标Radius
: 输出圆半径
smallest_rectangle1 - 返回平行坐标最小外包矩形
smallest_rectangle1(Regions, Row1, Column1, Row2, Column2)
* 示例: smallest_rectangle1(Regions, Row1, Column1, Row2, Column2)
功能概述: 返回平行坐标最小外包矩形。
主要参数:
Regions
: 输入区域Row1
,Column1
: 输出左上角坐标Row2
,Column2
: 输出右下角坐标
smallest_rectangle2 - 返回最小外包矩形及其角度方向
smallest_rectangle2(Regions, Row, Column, Phi, Length1, Length2)
* 示例: smallest_rectangle2(Regions, Row, Column, Phi, Length1, Length2)
功能概述: 返回最小外包矩形及其角度方向。
主要参数:
Regions
: 输入区域Row
,Column
: 输出矩形中心坐标Phi
: 输出角度Length1
,Length2
: 输出边长的一半
area_center_gray - 计算灰度区域的面积和中心
area_center_gray(Regions, Image, Area, Row, Column)
* 示例: area_center_gray(Rectangle1, Image, Area, Row, Column)
功能概述: 计算灰度区域的总灰度值和灰度值中心的坐标。与area_center不同,area_center_gray将灰度值视为"高度"或"质量"。
主要参数:
Regions
: 输入区域Image
: 灰度值图像Area
: 输出区域的总灰度值Row
: 输出灰度值中心的行坐标Column
: 输出灰度值中心的列坐标
select_gray - 根据灰度特征值选择区域
select_gray(Regions, Image, SelectedRegions, Features, Operation, Min, Max)
* 示例: select_gray(Regions, Image, SelectedRegions, 'mean', 'and', 100, 200)
功能概述: 根据灰度特征值选择符合条件的区域。
主要参数:
Regions
: 输入参数,表示图像上待检查的一组区域Image
: 输入参数,表示输入的单通道图像SelectedRegions
: 输出参数,表示特征的局部关联性参数Features
: 输入参数,表示选择的特征Operation
: 输入参数,表示逻辑操作Min
,Max
: 特征值范围
connection - 连通区域分析
connection(Region, ConnectedRegions)
功能概述: 将输入的区域 Region
分解成其相互分离的连通分量 (Blob)。每个连通分量作为一个独立的区域输出到 ConnectedRegions
。
主要参数:
Region
: 输入的一个或多个区域。ConnectedRegions
: 输出的多个连通区域对象。
select_shape - 根据形状特征选择区域
select_shape(Regions, SelectedRegions, Features, Operation, Min, Max)
* 示例 (选宽度): select_shape(ConnectedRegions, SelectedRegions, 'width', 'and', 30, 60)
* 示例 (选高度): select_shape(SelectedRegions, Letters, 'height', 'and', 90, 120)
功能概述: 根据区域的几何形状特征 (如 width
, height
, area
, circularity
等) 来筛选区域。
主要参数:
Regions
: 输入的待筛选区域集合。SelectedRegions
: 输出的符合条件的区域集合。Features
: 指定要评估的形状特征名称 (字符串或元组)。Operation
: 特征条件组合逻辑 ('and'
或'or'
)。Min
,Max
: 特征值的允许范围 (单个值或元组)。
opening_circle - 开运算 (圆形结构元)
opening_circle(Region, RegionOpening, Radius)
* 示例: opening_circle(RegionDynThresh, RegionOpening, 1.5)
功能概述: 执行形态学开运算 (先腐蚀后膨胀),使用圆形结构元素。可以去除小的噪点、断开细小连接、平滑区域边界,但基本不改变大区域面积。
主要参数:
Region
: 输入区域。RegionOpening
: 输出经开运算后的区域。Radius
: 圆形结构元素的半径。
erosion_circle - 腐蚀 (圆形结构元)
erosion_circle(Region, RegionErosion, Radius)
* 示例: erosion_circle(RegionDynThresh, RegionErosion, 0.5)
功能概述: 执行形态学腐蚀,使用圆形结构元素。会缩小区域边界、去除小区域、分离接触物体。
主要参数:
Region
: 输入区域。RegionErosion
: 输出经腐蚀后的区域。Radius
: 圆形结构元素的半径。
skeleton - 区域骨架化
skeleton(Region, Skeleton)
功能概述: 将输入的二值区域 Region
细化,提取其骨架 Skeleton
(中心线,通常单像素宽)。
主要参数:
Region
: 输入的区域对象。Skeleton
: 输出的骨架区域对象。
gen_contours_skeleton_xld - 骨架转 XLD 轮廓
gen_contours_skeleton_xld(Skeleton, Contours, Length, Mode)
* 示例: gen_contours_skeleton_xld(Skeleton, Contours, 1, 'filter')
功能概述: 将骨架区域 (Skeleton
) 转换为 XLD 轮廓 (Contours
)。可以根据 Length
过滤掉过短的轮廓段。
主要参数:
Skeleton
: 输入的骨架区域。Contours
: 输出的 XLD 轮廓。Length
: 最小轮廓长度阈值。Mode
: 模式 (如'filter'
表示过滤短轮廓)。
gen_rectangle1 - 生成矩形区域
gen_rectangle1(Rectangle, Row1, Col1, Row2, Col2)
* 示例: gen_rectangle1(Rectangle, 170, 80, 370, 510)
功能概述: 生成一个矩形区域对象。常用于定义 ROI 或创建掩模。
主要参数:
Rectangle
: 输出的矩形区域变量。Row1
,Col1
: 矩形左上角坐标。Row2
,Col2
: 矩形右下角坐标。
paint_region - 将区域绘制到图像
paint_region(Region, Image, ImageResult, Grayval, Type)
* 示例: paint_region(Rectangle, ImageConst, ImageMark, 255, 'fill')
功能概述: 将输入的区域 Region
以指定的灰度值 Grayval
绘制到图像 Image
上,生成结果图像 ImageResult
。常用于创建掩模图像。
主要参数:
Region
: 要绘制的区域。Image
: 背景图像 (提供尺寸和类型)。ImageResult
: 输出的绘制了区域的图像。Grayval
: 填充的灰度值。Type
: 绘制类型 (如'fill'
填充,'margin'
轮廓)。
gen_image_const - 生成常数图像
gen_image_const(ImageConst, Type, Width, Height)
* 示例: gen_image_const(ImageConst, 'byte', 271, 180)
功能概述: 创建一个指定尺寸 Width
xHeight
和类型 Type
的常数图像,所有像素值初始化为 0。常作为 paint_region
的背景图像。
copy_image / copy_obj - 复制对象
copy_image(Image, DupImage)
copy_obj(Objects, NewObjects, Index, Number)
* 示例: copy_image(ImageConverted, DupImage)
* 示例: copy_obj(Image, MontionImages, 1, 1) // 复制第1个对象,复制1个
功能概述: 复制图像或通用对象。copy_image
专门复制图像,copy_obj
可复制对象元组中的一个或多个对象。
gen_empty_obj - 生成空对象元组
gen_empty_obj(EmptyObjectTuple)
* 示例: gen_empty_obj(ImageNoiseArray)
功能概述: 创建一个空的 Halcon 对象元组,用于后续通过 concat_obj
或 append_channel
向其中添加对象。
concat_obj - 连接对象元组
concat_obj(Objects1, Objects2, ObjectsConcatenated)
* 示例: concat_obj(ImageNoiseArray, ImageNoise, ImageNoiseArray) // 将 ImageNoise 添加到 ImageNoiseArray 末尾
功能概述: 将两个对象元组 (Objects1
, Objects2
) 连接成一个新的对象元组 ObjectsConcatenated
。常用于在循环中收集处理结果。
append_channel - 追加图像通道
append_channel(MultiChannelImage, Image, MultiChannelImageResult)
* 示例: append_channel(MontionImages, Image, MontionImages) // 将 Image 作为新通道添加到 MontionImages
功能概述: 将一个单通道图像 Image
追加为一个多通道图像 MultiChannelImage
的新通道,生成 MultiChannelImageResult
。常用于构建用于 mean_n
的多通道图像。
select_obj - 选择对象元组中的对象
select_obj(Objects, ObjectSelected, Index)
* 示例: select_obj(ImageNoiseArray, ObjectSelected_1, 1) // 选择 ImageNoiseArray 中的第 1 个对象
功能概述: 从一个对象元组 Objects
中选择指定索引 Index
(从 1 开始) 的单个对象 ObjectSelected
。
gen_rectangle1 - 生成矩形区域
gen_rectangle1(Rectangle, Row1, Col1, Row2, Col2)
* 示例: gen_rectangle1(Rectangle, 170, 80, 370, 510)
功能概述: 生成一个矩形区域对象。常用于定义 ROI 或创建掩模。
主要参数:
Rectangle
: 输出的矩形区域变量Row1
,Col1
: 矩形左上角坐标Row2
,Col2
: 矩形右下角坐标
gen_circle - 生成圆形区域
gen_circle(Circles, Row, Column, Radius)
* 示例: gen_circle(Circles, Row, Column, Radius)
功能概述: 生成一个圆形区域对象。
主要参数:
Circles
: 输出的圆形区域变量Row
,Column
: 圆心坐标Radius
: 圆半径
gen_rectangle2 - 生成旋转矩形区域
gen_rectangle2(Rectangle, Row, Column, Phi, Length1, Length2)
* 示例: gen_rectangle2(Rectangle1, Row, Column, Phi, Length1, Length2)
功能概述: 生成一个旋转的矩形区域对象。
主要参数:
Rectangle
: 输出的矩形区域变量Row
,Column
: 矩形中心坐标Phi
: 旋转角度Length1
,Length2
: 矩形半长和半宽
图像采集
open_framegrabber - 打开图像采集设备
open_framegrabber(Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn, AcqHandle)
* 示例 (GigE Vision): open_framegrabber('GigEVision2', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'default', 'default', '0', 0, -1, AcqHandle)
功能概述: 初始化并打开一个图像采集设备(如相机),返回一个采集句柄 AcqHandle
,用于后续的图像采集操作(如 grab_image
)。
主要参数: (参数众多,仅列举常用)
Name
: 图像采集接口名称 (如 'File', 'GigEVision2', 'USB3Vision')。HorizontalResolution
,VerticalResolution
: 分辨率 (通常设 1)。ImageWidth
,ImageHeight
: 期望图像尺寸 (0 表示自动)。ColorSpace
: 颜色空间 ('gray', 'rgb', 'raw')。ExternalTrigger
: 是否使用外部触发 ('true'/'false')。Device
: 设备标识符 (如 GigE 相机的 IP 地址或序列号,或 '0', '1' 等索引)。AcqHandle
: 输出的采集句柄。
形态学操作
closing_circle - 圆形结构元素闭运算
closing_circle(Region, RegionClosing, Radius)
* 示例: closing_circle(Regions1, RegionClosing, 7)
* 示例: closing_circle(Region, RegionClosing, 7.5)
功能概述: 使用圆形结构元素对输入区域执行形态学闭运算 (先膨胀后腐蚀),用于填充小的孔洞和连接邻近的区域。
主要参数:
Region
: 输入的区域对象。RegionClosing
: 输出的闭运算结果区域。Radius
: 圆形结构元素的半径。
closing_rectangle1 - 矩形结构元素闭运算
closing_rectangle1(Region, RegionClosing, Width, Height)
* 示例: closing_rectangle1(Regions1, RegionClosing1, 9, 9)
功能概述: 使用轴对齐的矩形结构元素对输入区域执行形态学闭运算。
主要参数:
Region
: 输入的区域对象。RegionClosing
: 输出的闭运算结果区域。Width
: 矩形结构元素的宽度。Height
: 矩形结构元素的高度。
gen_ellipse - 生成椭圆区域
gen_ellipse(Ellipse, Row, Column, Phi, Radius1, Radius2)
* 示例: gen_ellipse(Ellipse, 200, 200, 0, 5, 7)
* 示例: gen_ellipse(Ellipse, 100, 100, 0, 13, 11)
功能概述: 生成一个椭圆形区域对象。
主要参数:
Ellipse
: 输出的椭圆区域变量。Row
,Column
: 椭圆中心坐标。Phi
: 旋转角度 (弧度)。Radius1
: 主半轴长度。Radius2
: 次半轴长度。
closing - 通用结构元素闭运算
closing(Region, StructElement, RegionClosing)
* 示例: closing(Regions1, Ellipse, RegionClosing2)
功能概述: 使用自定义的结构元素对输入区域执行形态学闭运算。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域 (例如由gen_ellipse
生成)。RegionClosing
: 输出的闭运算结果区域。
boundary - 提取区域边界
boundary(Region, RegionBorder, BoundaryType)
* 示例: boundary(Regions, RegionBorder, 'inner')
* 示例: boundary(RegionClosing, RegionBorder, 'inner')
功能概述: 提取输入区域的边界。
主要参数:
Region
: 输入的区域对象。RegionBorder
: 输出的边界区域。BoundaryType
: 边界类型 ('inner', 'outer')。
gen_rectangle1 - 生成轴对齐矩形区域
gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2)
* 示例: gen_rectangle1(Rectangle, 259, 87, 957, 909)
功能概述: 生成一个与坐标轴对齐的矩形区域对象。
主要参数:
Rectangle
: 输出的矩形区域变量。Row1
,Column1
: 矩形左上角坐标。Row2
,Column2
: 矩形右下角坐标。
reduce_domain - 缩减图像定义域
reduce_domain(Image, DomainRegion, ImageReduced)
* 示例: reduce_domain(GrayImage, Rectangle, ImageReduced)
* 示例: reduce_domain(Image, RegionBottomHat, ImageReduced)
功能概述: 将图像的处理域限制在给定的区域内。后续对ImageReduced
的操作将只影响DomainRegion
内的像素。
主要参数:
Image
: 输入的原始图像对象。DomainRegion
: 用于限制定义域的区域对象。ImageReduced
: 输出的定义域被缩减的图像对象。
top_hat - 顶帽运算 (区域)
top_hat(Region, StructElement, RegionTopHat)
* 示例: top_hat(Light, StructElement, RegionTopHat)
功能概述: 计算输入区域与其开运算结果之间的差集,用于提取小于结构元素的明亮细节。
主要参数:
Region
: 输入的区域对象。StructElement
: 用于开运算的结构元素区域。RegionTopHat
: 输出的顶帽运算结果区域。
bottom_hat - 底帽运算 (区域)
bottom_hat(Region, StructElement, RegionBottomHat)
* 示例: bottom_hat(Region, Circle, RegionBottomHat)
功能概述: 计算输入区域的闭运算结果与原始区域之间的差集,用于提取小于结构元素的暗细节或孔洞。
主要参数:
Region
: 输入的区域对象。StructElement
: 用于闭运算的结构元素区域。RegionBottomHat
: 输出的底帽运算结果区域。
erosion1 - 通用结构元素腐蚀 (迭代)
erosion1(Region, StructElement, RegionErosion, Iterations)
* 示例: erosion1(Regions, Ellipse, RegionErosion2, 1)
功能概述: 使用自定义的结构元素对输入区域执行形态学腐蚀操作,可指定迭代次数。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域。RegionErosion
: 输出的腐蚀结果区域。Iterations
: 腐蚀操作的迭代次数。
erosion2 - 通用结构元素腐蚀 (带参考点和迭代)
erosion2(Region, StructElement, RegionErosion, Row, Column, Iterations)
* 示例: erosion2(Regions, Ellipse, RegionErosion3, 0, 0, 1)
功能概述: 使用自定义结构元素及指定的参考点对区域执行形态学腐蚀,可指定迭代次数。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域。RegionErosion
: 输出的腐蚀结果区域。Row
,Column
: 结构元素参考点的行、列坐标。Iterations
: 腐蚀操作的迭代次数。
edges_image - 边缘检测
edges_image(Image, ImaAmp, ImaDir, Filter, Alpha, NMS, Low, High)
* 示例: edges_image(Image, ImaAmp, ImaDir, 'lanser2', 0.5, 'nms', 8, 16)
功能概述: 使用指定的边缘检测算子提取图像中的边缘。
主要参数:
Image
: 输入的图像对象。ImaAmp
: 输出的边缘强度图像。ImaDir
: 输出的边缘方向图像。Filter
: 使用的边缘检测算子 (例如: 'canny', 'sobel', 'lanser2')。Alpha
: 算子特定参数 (例如Canny的sigma,Lanser2的alpha)。NMS
: 非极大值抑制方法 (例如: 'nms', 'none')。Low
,High
: 滞后阈值分割的低阈值和高阈值。
skeleton - 区域骨架提取
skeleton(Region, Skeleton)
* 示例: skeleton(Region, Skeleton)
功能概述: 计算输入区域的骨架 (中轴线)。
主要参数:
Region
: 输入的区域对象。Skeleton
: 输出的骨架区域。
gray_erosion_shape - 灰度图像形状腐蚀
gray_erosion_shape(Image, ImageMin, MaskHeight, MaskWidth, MaskShape)
* 示例: gray_erosion_shape(Image, ImageMin, 5, 5, 'octagon')
功能概述: 使用指定形状和大小的结构元素对灰度图像执行形态学腐蚀操作。
主要参数:
Image
: 输入的灰度图像。ImageMin
: 输出的腐蚀后图像。MaskHeight
,MaskWidth
: 结构元素的高度和宽度。MaskShape
: 结构元素形状 ('rectangle', 'circle', 'octagon')。
gray_dilation_shape - 灰度图像形状膨胀
gray_dilation_shape(Image, ImageMax, MaskHeight, MaskWidth, MaskShape)
* 示例: gray_dilation_shape(Image, ImageMax, 5, 5, 'octagon')
功能概述: 使用指定形状和大小的结构元素对灰度图像执行形态学膨胀操作。
主要参数:
Image
: 输入的灰度图像。ImageMax
: 输出的膨胀后图像。MaskHeight
,MaskWidth
: 结构元素的高度和宽度。MaskShape
: 结构元素形状 ('rectangle', 'circle', 'octagon')。
gray_opening_shape - 灰度图像形状开运算
gray_opening_shape(Image, ImageOpening, MaskHeight, MaskWidth, MaskShape)
* 示例: gray_opening_shape(Image, ImageOpening, 5, 5, 'octagon')
功能概述: 使用指定形状和大小的结构元素对灰度图像执行形态学开运算 (先腐蚀后膨胀)。
主要参数:
Image
: 输入的灰度图像。ImageOpening
: 输出的开运算后图像。MaskHeight
,MaskWidth
: 结构元素的高度和宽度。MaskShape
: 结构元素形状 ('rectangle', 'circle', 'octagon')。
gray_closing_shape - 灰度图像形状闭运算
gray_closing_shape(Image, ImageClosing, MaskHeight, MaskWidth, MaskShape)
* 示例: gray_closing_shape(Image, ImageClosing, 5, 5, 'octagon')
功能概述: 使用指定形状和大小的结构元素对灰度图像执行形态学闭运算 (先膨胀后腐蚀)。
主要参数:
Image
: 输入的灰度图像。ImageClosing
: 输出的闭运算后图像。MaskHeight
,MaskWidth
: 结构元素的高度和宽度。MaskShape
: 结构元素形状 ('rectangle', 'circle', 'octagon')。
gen_disc_se - 生成圆盘结构元素 (用于灰度形态学)
gen_disc_se(SE, Type, Width, Height, Smooth)
* 示例: gen_disc_se(SE, 'byte', 21, 21, 0)
功能概述: 生成一个用于灰度形态学操作的圆盘形结构元素图像。
主要参数:
SE
: 输出的结构元素图像。Type
: 结构元素图像的数据类型 ('byte', 'uint2', etc.)。Width
,Height
: 结构元素图像的尺寸 (通常为奇数)。Smooth
: 平滑参数 (通常为0)。
gray_tophat - 灰度顶帽运算
gray_tophat(Image, SE, ImageTopHat)
* 示例: gray_tophat(Image, SE, ImageTopHat)
功能概述: 计算原始灰度图像与其灰度开运算结果之间的差值,用于提取比结构元素小的亮特征。
主要参数:
Image
: 输入的灰度图像。SE
: 用于灰度开运算的结构元素图像 (例如由gen_disc_se
生成)。ImageTopHat
: 输出的顶帽运算结果图像。
gray_bothat - 灰度底帽运算
gray_bothat(Image, SE, ImageBotHat)
* 示例: gray_bothat(Image, SE, ImageBotHat)
功能概述: 计算灰度闭运算结果与原始灰度图像之间的差值,用于提取比结构元素小的暗特征。
主要参数:
Image
: 输入的灰度图像。SE
: 用于灰度闭运算的结构元素图像 (例如由gen_disc_se
生成)。ImageBotHat
: 输出的底帽运算结果图像。
erosion_circle - 圆形结构元素腐蚀
erosion_circle(Region, RegionErosion, Radius)
* 示例: erosion_circle(Region, RegionErosion, 7.5)
* 示例: erosion_circle(RegionErosion, RegionErosion1, 6.5)
* 示例: erosion_circle(RegionErosion1, RegionErosion2, 5.5)
* 示例: erosion_circle(RegionOpening, RegionErosion, 6.5)
功能概述: 使用圆形结构元素对输入区域执行形态学腐蚀操作,用于去除小的噪点或细化区域边界。
主要参数:
Region
: 输入的区域对象。RegionErosion
: 输出的腐蚀结果区域。Radius
: 圆形结构元素的半径。
dilation_circle - 圆形结构元素膨胀
dilation_circle(Region, RegionDilation, Radius)
* 示例: dilation_circle(RegionErosion2, RegionDilation, 26.5)
* 示例: dilation_circle(Regions, RegionDilation, 11)
功能概述: 使用圆形结构元素对输入区域执行形态学膨胀操作,用于填充小的孔洞或扩大区域。
主要参数:
Region
: 输入的区域对象。RegionDilation
: 输出的膨胀结果区域。Radius
: 圆形结构元素的半径。
opening_circle - 圆形结构元素开运算
opening_circle(Region, RegionOpening, Radius)
* 示例: opening_circle(Region, RegionOpening, 11) // Example uses RegionOpening, not RegionOpening1
* 示例: opening_circle(Regions, RegionOpening, 7)
* 示例: opening_circle(Regions, RegionOpening, 10)
功能概述: 使用圆形结构元素对输入区域执行形态学开运算 (先腐蚀后膨胀),用于去除小的对象和断开细的连接。
主要参数:
Region
: 输入的区域对象。RegionOpening
: 输出的开运算结果区域。Radius
: 圆形结构元素的半径。
opening_rectangle1 - 矩形结构元素开运算
opening_rectangle1(Region, RegionOpening, Width, Height)
* 示例: opening_rectangle1(RegionOpening, RegionOpening1, 11, 11) // Example uses RegionOpening, not Region
功能概述: 使用轴对齐的矩形结构元素对输入区域执行形态学开运算。
主要参数:
Region
: 输入的区域对象。RegionOpening
: 输出的开运算结果区域。Width
: 矩形结构元素的宽度。Height
: 矩形结构元素的高度。
opening - 通用结构元素开运算
opening(Region, StructElement, RegionOpening)
* 示例: opening(Region, Ellipse, RegionOpening2)
功能概述: 使用自定义的结构元素对输入区域执行形态学开运算。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域 (例如由gen_ellipse
生成)。RegionOpening
: 输出的开运算结果区域。
dilation_rectangle1 - 矩形结构元素膨胀
dilation_rectangle1(Region, RegionDilation, Width, Height)
* 示例: dilation_rectangle1(Regions, RegionDilation1, 11, 13)
功能概述: 使用轴对齐的矩形结构元素对输入区域执行形态学膨胀。
主要参数:
Region
: 输入的区域对象。RegionDilation
: 输出的膨胀结果区域。Width
: 矩形结构元素的宽度。Height
: 矩形结构元素的高度。
dilation1 - 通用结构元素膨胀 (迭代)
dilation1(Region, StructElement, RegionDilation, Iterations)
* 示例: dilation1(Regions, Ellipse, RegionDilation2, 1)
功能概述: 使用自定义的结构元素对输入区域执行形态学膨胀操作,可指定迭代次数。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域。RegionDilation
: 输出的膨胀结果区域。Iterations
: 膨胀操作的迭代次数。
dilation2 - 通用结构元素膨胀 (带参考点和迭代)
dilation2(Region, StructElement, RegionDilation, Row, Column, Iterations)
* 示例: dilation2(Regions, Ellipse, RegionDilation3, 0, 0, 1)
功能概述: 使用自定义结构元素及指定的参考点对区域执行形态学膨胀,可指定迭代次数。
主要参数:
Region
: 输入的区域对象。StructElement
: 输入的结构元素区域。RegionDilation
: 输出的膨胀结果区域。Row
,Column
: 结构元素参考点的行、列坐标。Iterations
: 膨胀操作的迭代次数。
图像的模板匹配
inspect_shape_model - 测试形状模型的金字塔参数
inspect_shape_model(ImageReduced, ModelImages, ModelRegions, NumLevels, Contrast)
* 示例: inspect_shape_model(ImageReduced, ModelImages, ModelRegions, 4, 30)
功能概述: 测试用于创建形状模型的图像金字塔层级和对比度参数的效果。
主要参数:
- ImageReduced: 输入的模板图像。
- ModelImages: 输出的模型图像(金字塔各层)。
- ModelRegions: 输出的模型区域(金字塔各层)。
- NumLevels: 测试的金字塔层数。
- Contrast: 测试的对比度阈值。
create_shape_model - 创建形状匹配模型
create_shape_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast, ModelID)
* 示例: create_shape_model(ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID)
* 签名: create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
功能概述: 从模板图像创建一个基于形状的匹配模型。
主要参数:
- Template: 输入的模板图像。
- NumLevels: 金字塔层数。
- AngleStart: 搜索角度的起始值(弧度)。
- AngleExtent: 搜索角度的范围(弧度)。
- AngleStep: 角度步长('auto' 或具体值)。
- Optimization: 优化参数。
- Metric: 匹配度量 ('use_polarity', 'ignore_global_polarity', 'ignore_local_polarity')。
- Contrast: 对比度阈值。
- MinContrast: 最小对比度阈值。
- ModelID: 输出的模型句柄。
find_shape_model - 查找形状匹配模型
find_shape_model(Image, ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness, Row, Column, Angle, Score)
* 示例: find_shape_model(SearchImage, ShapeModelID, 0, rad(360), 0.5, 3, 0, 'least_squares', 0, 0.5, RowCheck, ColumnCheck, AngleCheck, Score)
* 签名: find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
功能概述: 在输入图像中搜索一个或多个基于形状的匹配模型的实例。
主要参数:
- Image: 输入的待搜索图像。
- ModelID: 要查找的模型句柄。
- AngleStart: 搜索角度的起始值(弧度)。
- AngleExtent: 搜索角度的范围(弧度)。
- MinScore: 最小匹配得分 (0-1)。
- NumMatches: 要查找的最大匹配实例数量。
- MaxOverlap: 允许多个实例之间的最大重叠比例。
- SubPixel: 亚像素精度 ('none', 'interpolation', 'least_squares', ...)。
- NumLevels: 搜索时使用的金字塔层数。
- Greediness: 搜索策略的贪婪度 (0-1)。
- Row,Column,Angle: 输出匹配实例的中心坐标和角度。
- Score: 输出匹配实例的得分。
dev_display_shape_matching_results - 显示形状匹配结果
dev_display_shape_matching_results(ModelID, Color, Row, Column, Angle, ScaleR, ScaleC, Model)
* 示例: dev_display_shape_matching_results(ShapeModelID, 'red', RowCheck, ColumnCheck, AngleCheck, 1, 1, 0)
* 签名: dev_display_shape_matching_results( : : ModelID, Color, Row, Column, Angle, ScaleR, ScaleC, Model : )
功能概述: 在图形窗口中可视化显示形状匹配的结果。
主要参数:
- ModelID: 用于匹配的模型句柄。
- Color: 显示轮廓的颜色(如 'red', 'green')。
- Row,Column,Angle: 匹配到的实例的位置和角度。
- ScaleR,ScaleC: 行、列方向的缩放(通常为1)。
- Model: 模型索引(通常为0)。
clear_shape_model - 清除形状模型
clear_shape_model(ModelID)
* 示例: clear_shape_model(ShapeModelID)
功能概述: 从内存中释放指定的形状匹配模型。
主要参数:
- ModelID: 要清除的模型句柄。
gray_erosion - 灰度腐蚀
gray_erosion(Image, SE, ImageErosion)
* 签名: gray_erosion(Image, SE : ImageErosion : : )
功能概述: 使用指定的结构元素(SE)对灰度图像进行腐蚀操作。将图像中的像素点赋值为其局部邻域中灰度的最小值,图像整体灰度值减少,图像中的暗的区域变得更暗,较亮的小区域被抑制。
主要参数:
- Image: 输入的灰度图像。
- SE: 结构元素句柄。
- ImageErosion: 输出的腐蚀后的灰度图像。
gray_erosion_rect - 使用矩形结构元素的灰度腐蚀
gray_erosion_rect(Image, ImageMin, MaskHeight, MaskWidth)
* 签名: gray_erosion_rect(Image : ImageMin : MaskHeight, MaskWidth : )
功能概述: 使用矩形结构元素对灰度图像进行腐蚀操作。
主要参数:
- Image: 输入的灰度图像。
- ImageMin: 输出的腐蚀后的灰度图像。
- MaskHeight: 矩形滤波模板的高度。
- MaskWidth: 矩形滤波模板的宽度。
gray_erosion_shape - 使用多边形结构元素的灰度腐蚀
gray_erosion_shape(Image, ImageMin, MaskHeight, MaskWidth, MaskShape)
* 签名: gray_erosion_shape(Image : ImageMin : MaskHeight, MaskWidth, MaskShape : )
功能概述: 使用指定形状的结构元素对灰度图像进行腐蚀操作。
主要参数:
- Image: 输入的灰度图像。
- ImageMin: 输出的腐蚀后的灰度图像。
- MaskHeight: 滤波模板的高度。
- MaskWidth: 滤波模板的宽度。
- MaskShape: 模板的形状('octagon', 'rectangle', 'rhombus')。
create_component_model - 创建基于组件的匹配模型
create_component_model(ModelImage, ComponentRegions, ContrastInitial, ContrastTerminal, AngleStart, AngleExtentInitial, AngleExtentTerminal, AngleStepInitial, AngleStepTerminal, Optimization, Metric, MinContrast, MinScore, NumMatches, Greediness, UsePolarity, ModelID, RootRanking)
* 示例: create_component_model(ModelImage, ComponentRegions, 20, 20, rad(25), 0, rad(360), 15, 40, 15, 10, 0.8, 3, 0, 'none', 'use_polarity', 'true', ComponentModelID, RootRanking)
功能概述: 从包含多个组件区域的模型图像创建一个基于组件的匹配模型,该模型会学习组件间的相对关系。
主要参数: (参数较多,根据示例和通用命名推断)
- ModelImage: 输入的模型图像。
- ComponentRegions: 包含各个组件区域的元组。
- ContrastInitial / ContrastTerminal: 初始/最终搜索的对比度。
- AngleStart / AngleExtentInitial / AngleExtentTerminal / AngleStepInitial / AngleStepTerminal: 角度搜索相关参数。
- Optimization: 优化参数。
- Metric: 匹配度量。
- MinContrast: 最小对比度。
- MinScore: 最小分数(可能用于组件查找)。
- NumMatches: 匹配数量。
- Greediness: 贪婪度。
- UsePolarity: 是否使用极性信息 ('true'/'false')。
- ModelID: 输出的模型句柄。
- RootRanking: 组件的根排名信息。
area_center - 计算区域面积和中心
area_center(Regions, Area, Row, Column)
* 示例: area_center(Circle, Area, RowRef, ColumnRef)
功能概述: 计算一个或多个区域的面积和中心坐标。
主要参数:
- Regions: 输入的区域对象(或元组)。
- Area: 输出的区域面积。
- Row,Column: 输出的区域中心行、列坐标。
create_ncc_model - 创建基于相关性的匹配模型 (NCC)
create_ncc_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep, Metric, ModelID)
* 示例: create_ncc_model(ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID)
* 签名: create_ncc_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID)
功能概述: 从模板图像创建一个基于归一化互相关(NCC)的匹配模型。
主要参数:
- Template: 输入的模板图像。
- NumLevels: 最高金字塔层数 ('auto' 或数值)。
- AngleStart: 搜索角度的起始值(弧度)。
- AngleExtent: 搜索角度的范围(弧度)。
- AngleStep: 旋转角度步长 ('auto' 或数值)。
- Metric: 匹配度量 ('use_polarity', 'ignore_global_polarity', 'ignore_local_polarity')。
- ModelID: 输出的模型句柄。
find_ncc_model - 查找基于相关性的匹配模型 (NCC)
find_ncc_model(Image, ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Row, Column, Angle, Score)
* 示例: find_ncc_model(GrayImage2, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)
* 签名: find_ncc_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score)
功能概述: 在输入图像中搜索一个或多个基于NCC的匹配模型的实例。
主要参数:
- Image: 输入的待搜索图像。
- ModelID: 要查找的模型句柄。
- AngleStart: 搜索角度的起始值(弧度)。
- AngleExtent: 搜索角度的范围(弧度)。
- MinScore: 最小匹配得分 (0-1)。
- NumMatches: 要查找的最大匹配实例数量。
- MaxOverlap: 允许多个实例之间的最大重叠比例。
- SubPixel: 是否启用亚像素精度 ('true'/'false')。
- NumLevels: 搜索时使用的金字塔层数。
- Row,Column,Angle: 输出匹配实例的中心坐标和角度。
- Score: 输出匹配实例的得分。
vector_angle_to_rigid - 从点和角度创建刚性变换矩阵
vector_angle_to_rigid(Row1, Column1, Angle1, Row2, Column2, Angle2, HomMat2D)
* 示例: vector_angle_to_rigid(RowRef, ColumnRef, 0, Row, Column, 0, HomMat2D) // Note: Angle2 seems to be misused as 0 in example, should likely be Angle
功能概述: 根据两个点的对应关系和角度信息(或仅平移),计算一个刚性(旋转+平移)仿射变换矩阵。
主要参数:
- Row1,Column1,Angle1: 源点坐标和角度。
- Row2,Column2,Angle2: 目标点坐标和角度。
- HomMat2D: 输出的2D仿射变换矩阵。
affine_trans_region - 对区域进行仿射变换
affine_trans_region(Region, RegionAffineTrans, HomMat2D, Interpolation)
* 示例: affine_trans_region(Circle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
功能概述: 将一个或多个区域根据给定的仿射变换矩阵进行变换。
主要参数:
- Region: 输入的区域对象(或元组)。
- RegionAffineTrans: 输出的变换后的区域对象。
- HomMat2D: 2D仿射变换矩阵。
- Interpolation: 插值方法(对于区域通常是 'nearest_neighbor')。
clear_ncc_model - 清除NCC模型
clear_ncc_model(ModelID)
* 示例: clear_ncc_model(ModelID)
功能概述: 从内存中释放指定的NCC匹配模型。
主要参数:
- ModelID: 要清除的模型句柄。
best_match_mg - 多级灰度模板匹配
best_match_mg(Image, TemplateID, MaxError, SubPixel, NumLevels, WhichLevels, Row, Column, Error)
* 示例: best_match_mg(ImageNoise, TemplateID, 35, 'false', 4, 'all', Row_, Column_, Error_)
* 签名: best_match_mg(Image : : TemplateID, MaxError, SubPixel, NumLevels, WhichLevels :Row, Column, Error)
功能概述: 在图像金字塔上进行灰度值模板匹配,寻找最佳匹配位置。
mg 后缀表示多级(Multi-Grid/Multi-Generation)匹配,速度较快。
主要参数:
- Image: 输入的待搜索图像。
- TemplateID: 模板句柄。
- MaxError: 允许的最大误差或差异。
- SubPixel: 是否使用亚像素精度 ('true'/'false')。
- NumLevels: 使用的金字塔层数。
- WhichLevels: 具体使用哪些金字塔层 ('all' 或层号)。
- Row,Column: 输出的最佳匹配位置的中心坐标。
- Error: 输出的最佳匹配位置的误差。
clear_template - 清除灰度模板
clear_template(TemplateID)
* 示例: clear_template(TemplateID)
* 签名: clear_template( : : TemplateID : )
功能概述: 从内存中释放指定的灰度匹配模板。
主要参数:
- TemplateID: 要清除的模板句柄。
create_template - 创建灰度模板
create_template(ImageReduced, NumLevels, LevelLimit, Mode, GrayValues, TemplateID)
* 示例: create_template(ImageReduced, 5, 4, 'sort', 'original', TemplateID)
功能概述: 从模板图像创建一个用于灰度值模板匹配的模板。
主要参数:
- ImageReduced: 输入的模板图像(通常是经过 reduce_domain 处理的)。
- NumLevels: 要生成的金字塔层数。
- LevelLimit: 限制模板表示的最高金字塔层。
- Mode: 模板模式 ('sort')。
- GrayValues: 灰度值处理方式 ('original')。
- TemplateID: 输出的模板句柄。
adapt_template - 适应模板光照
adapt_template(ImageNoise, TemplateID)
* 示例: adapt_template(ImageNoise, TemplateID)
功能概述: 使灰度模板适应当前图像的光照条件。
主要参数:
- ImageNoise: 当前待匹配的图像。
- TemplateID: 要调整的模板句柄。
dev_clear_window - 清除窗口内容
dev_clear_window()
* 示例: dev_clear_window()
功能概述: 清除当前活动图形窗口中的所有内容。
disp_rectangle2 - 显示带角度的矩形
disp_rectangle2(WindowID, Row, Column, Phi, Length1, Length2)
* 示例: disp_rectangle2(WindowID, Row_, Column_, 0, 95, 95)
功能概述: 在指定窗口中显示一个可以带旋转角度的矩形。
主要参数:
- WindowID: 目标窗口句柄。
- Row,Column: 矩形中心的行、列坐标。
- Phi: 矩形的旋转角度(相对于水平方向)。
- Length1: 矩形半长(沿Phi方向)。
- Length2: 矩形半宽(垂直于Phi方向)。
条码识别
create_bar_code_model - 创建条码模型
create_bar_code_model(GenParamName, GenParamValue, BarCodeHandle)
* 示例: create_bar_code_model([], [], BarCodeHandle)
功能概述:
创建一个用于读取和解码条码的模型,返回模型句柄,用于后续的条码识别操作。
主要参数:
GenParamName
: 通用参数的名称,用于调整条形码模型,默认值为空。GenParamValue
: 通用参数的值,用于调整条形码模型。BarCodeHandle
: 条形码模型的句柄。
set_bar_code_param - 设置条码参数
set_bar_code_param(BarCodeHandle, GenParamName, GenParamValue)
* 示例: set_bar_code_param(BarCodeHandle, 'stop_after_result_num', 1)
* 示例: set_bar_code_param(BarCodeHandle, 'barcode_width_min', 280)
* 示例: set_bar_code_param(BarCodeHandle, 'barcode_height_min', 80)
* 示例: set_bar_code_param(BarCodeHandle, 'meas_thresh', 0.2)
* 示例: set_bar_code_param(BarCodeHandle, 'quiet_zone', 'true')
* 示例: set_bar_code_param(BarCodeHandle, 'train', '~all')
功能概述:
设置条码模型的通用参数,用于调整条码查找和解码的行为。
主要参数:
BarCodeHandle
: 条形码模型的句柄。GenParamName
: 通用参数的名称,用于调整查找和解码条形码。GenParamValue
: 通用参数的具体值。
set_bar_code_param_specific - 设置特定条码类型参数
set_bar_code_param_specific(BarCodeHandle, CodeType, GenParamName, GenParamValue)
* 示例: set_bar_code_param_specific(BarCodeHandle, CodeType, 'orientation_tol', min([1.05 * OrientationTol, 90]))
功能概述:
针对特定类型的条码设置参数,例如方向公差等。
主要参数:
BarCodeHandle
: 条形码模型的句柄。CodeType
: 条码类型。GenParamName
: 参数名称。GenParamValue
: 参数值。
find_bar_code - 查找条码
find_bar_code(Image, SymbolRegions, BarCodeHandle, CodeType, DecodedDataStrings)
* 示例: find_bar_code(Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
* 示例: find_bar_code(Image, SymbolRegions, BarCodeHandle, 'EAN-13', DecodedDataStrings)
功能概述:
在图像中查找条码数据和条码区域,并返回解码后的数据字符串。
主要参数:
Image
: 要查找的图像。SymbolRegions
: 条码数据区域。BarCodeHandle
: 条码模型句柄。CodeType
: 条码类型(如 'auto', 'EAN-13' 等)。DecodedDataStrings
: 读取结果,即解码后的数据字符串。
get_bar_code_result - 获取条码结果
get_bar_code_result(BarCodeHandle, CandidateHandle, ResultName, BarCodeResults)
* 示例: get_bar_code_result(BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
功能概述:
获取条码识别的结果信息,例如解码类型等。
主要参数:
BarCodeHandle
: 条码模型句柄。CandidateHandle
: 候选句柄。ResultName
: 结果名称。BarCodeResults
: 条形码的结果。
get_bar_code_param_specific - 获取特定条码类型参数
get_bar_code_param_specific(BarCodeHandle, CodeType, GenParamName, GenParamValue)
* 示例: get_bar_code_param_specific(BarCodeHandle, CodeType, 'orientation_tol', OrientationTol)
功能概述:
获取特定类型条码的参数值,例如方向公差等。
主要参数:
BarCodeHandle
: 条形码模型的句柄。CodeType
: 条码类型。GenParamName
: 参数名称。GenParamValue
: 参数值。
write_bar_code_model - 保存条码模型
write_bar_code_model(BarCodeHandle, FileName)
* 示例: write_bar_code_model(BarCodeHandle, 'bar_code_model.bcm')
功能概述:
将训练好的条码模型保存到本地硬盘。
主要参数:
BarCodeHandle
: 条形码模型的句柄。FileName
: 保存的文件路径和名称。
read_bar_code_model - 读取条码模型
read_bar_code_model(FileName, BarCodeHandle)
* 示例: read_bar_code_model('bar_code_model.bcm', BarCodeHandle)
功能概述:
从本地硬盘读取条码模型。
主要参数:
FileName
: 模型文件路径和名称。BarCodeHandle
: 条形码模型的句柄。
clear_bar_code_model - 清除条码模型
clear_bar_code_model(BarCodeHandle)
* 示例: clear_bar_code_model(BarCodeHandle)
功能概述:
清除条码模型,释放分配的内存。
主要参数:
BarCodeHandle
: 条形码模型的句柄。
create_data_code_2d_model - 创建二维码模型
create_data_code_2d_model(CodeType, GenParamName, GenParamValue, DataCodeHandle)
* 示例: create_data_code_2d_model('Data Matrix ECC 200', [], [], DataCodeHandle)
* 示例: create_data_code_2d_model('QR Code', 'default_parameters', 'maximum_recognition', DataCodeHandle)
* 示例: create_data_code_2d_model('PDF417', 'default_parameters', 'maximum_recognition', DataCodeHandle)
功能概述:
创建一个用于读取和解码二维码的模型,返回模型句柄,用于后续的二维码识别操作。
主要参数:
CodeType
: 二维码类型(如 'Data Matrix ECC 200', 'QR Code', 'PDF417' 等)。GenParamName
: 通用参数的名称。GenParamValue
: 通用参数的值。DataCodeHandle
: 二维码模型的句柄。
set_data_code_2d_param - 设置二维码参数
set_data_code_2d_param(DataCodeHandle, GenParamName, GenParamValue)
* 示例: set_data_code_2d_param(DataCodeHandle, 'default_parameters', 'maximum_recognition')
* 示例: set_data_code_2d_param(DataCodeHandle, 'string_encoding', 'utf8')
功能概述:
设置二维码模型的通用参数,用于调整二维码查找和解码的行为。
主要参数:
DataCodeHandle
: 二维码模型的句柄。GenParamName
: 通用参数的名称。GenParamValue
: 通用参数的值。
find_data_code_2d - 查找二维码
find_data_code_2d(Image, SymbolXLDs, DataCodeHandle, GenParamName, GenParamValue, ResultHandles, DecodedDataStrings)
* 示例: find_data_code_2d(Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
* 示例: find_data_code_2d(Image, SymbolXLDs1, DataCodeHandle, 'train', 'all', ResultHandles1, DecodedDataStrings1)
功能概述:
在图像中查找二维码并解析获取结果,返回解码后的数据字符串。
主要参数:
Image
: 要查找的图像。SymbolXLDs
: 二维码符号的轮廓。DataCodeHandle
: 二维码模型句柄。GenParamName
: 通用参数的名称。GenParamValue
: 通用参数的值。ResultHandles
: 结果句柄。DecodedDataStrings
: 解码后的数据字符串。
get_data_code_2d_results - 获取二维码结果
get_data_code_2d_results(DataCodeHandle, CandidateHandle, ResultName, ResultValues)
* 示例: get_data_code_2d_results(DataCodeHandle, 'all_candidates', 'status', ResultValues)
功能概述:
获取二维码识别的结果信息,例如状态等。
主要参数:
DataCodeHandle
: 二维码模型句柄。CandidateHandle
: 候选句柄。ResultName
: 结果名称。ResultValues
: 结果值。
write_data_code_2d_model - 保存二维码模型
write_data_code_2d_model(DataCodeHandle, FileName)
* 示例: write_data_code_2d_model(DataCodeHandle, 'D:/data_code_model.dcm')
功能概述:
将训练好的二维码模型保存到本地硬盘。
主要参数:
DataCodeHandle
: 二维码模型的句柄。FileName
: 保存的文件路径和名称。
clear_data_code_2d_model - 清除二维码模型
clear_data_code_2d_model(DataCodeHandle)
* 示例: clear_data_code_2d_model(DataCodeHandle)
功能概述:
清除二维码模型,释放分配的内存。
主要参数:
DataCodeHandle
: 二维码模型的句柄。
disp_continue_message - 显示继续消息
disp_continue_message(WindowHandle, Color, Box)
* 示例: disp_continue_message(WindowHandle, 'black', 'true')
功能概述:
显示一个继续操作的消息提示,通常用于暂停程序等待用户确认。
主要参数:
WindowHandle
: 目标窗口句柄。Color
: 文本颜色。Box
: 是否显示文本背景框('true'/'false')。
list_files - 列出文件
list_files(Directory, Option, Files)
* 示例: list_files('C:/Users/Public/Documents/MVTec/HALCON-24.05-Progress/examples/images/data/DM码', 'files', Files)
功能概述:
列出指定目录中的文件或文件夹。
主要参数:
Directory
: 目录路径。Option
: 选项(如 'files' 表示列出文件)。Files
: 返回的文件列表。
tuple_regexp_select - 正则表达式筛选
tuple_regexp_select(Tuple, Regexp, Selection)
* 示例: tuple_regexp_select(Files, '.(bmp|jpg)', Selection)
功能概述:
使用正则表达式从元组中筛选符合条件的元素。
主要参数:
Tuple
: 输入元组。Regexp
: 正则表达式。Selection
: 筛选结果。
count_seconds - 计时
count_seconds(Seconds)
* 示例: count_seconds(S1)
功能概述:
记录当前时间,用于计算程序运行时间。
主要参数:
Seconds
: 当前时间(以秒为单位)。
dev_update_off - 关闭更新
dev_update_off()
* 示例: dev_update_off()
功能概述:
关闭图形窗口和变量的自动更新,提高程序运行效率。
主要参数:
无。
set_system - 设置系统参数
set_system(Param, Value)
* 示例: set_system('filename_encoding', 'utf8')
功能概述:
设置系统级参数,例如文件编码格式。
主要参数:
Param
: 参数名称。Value
: 参数值。
OCR 识别
手动创建 OCR 训练数据:
c#gen_empty_obj(EmptyObject) words := ['字','符','样','本'] // 定义字符标签 for Index := 1 to |words| by 1 disp_message(WindowHandle, '请框选第' + Index + '个字符区域: ' + words[Index-1], 'window', 12, 12, 'black', 'true') draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2) // 用户绘制矩形 gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2) // 生成矩形区域 reduce_domain(GrayImage, Rectangle, ImageReduced) // 减少图像域 threshold(ImageReduced, Region, 128, 255) // 对区域内图像进行阈值处理 concat_obj(EmptyObject, Region, EmptyObject) // 收集区域 (注意:示例中这里应累加到排序前的集合) // 或者直接 append: // append_ocr_trainf (Region, GrayImage, words[Index-1], 'myfont.trf') // 直接追加到训练文件 endfor // 如果是先收集再排序后添加: // sort_region (EmptyObject, SortedRegions, 'character', 'true', 'row') // for Index1:=1 to |words| by 1 // select_obj (SortedRegions, ObjectSelected, Index1) // append_ocr_trainf (ObjectSelected, GrayImage, words[Index1-1], 'myfont.trf') // endfor
自动分割字符并准备训练:
c#read_image(Image, 'characters.png') rgb1_to_gray(Image, GrayImage) binary_threshold(GrayImage, Region, 'max_separability', 'dark', UsedThreshold) // 二值化 connection(Region, ConnectedRegions) // 连通域分析 select_shape(ConnectedRegions, Characters, 'area', 'and', 100, 5000) // 根据面积筛选 sort_region(Characters, SortedCharacters, 'character', 'true', 'row') // 排序 // 假设已知字符顺序和内容 Classes := ['a','b','c', ... ] // 定义字符标签列表 (需与SortedCharacters对应) write_ocr_trainf(SortedCharacters, GrayImage, Classes, 'auto_font.trf') // 写入训练文件
训练 OCR 分类器:
c#read_ocr_trainf_names('myfont.trf', CharacterNames, CharacterCount) // 读取训练文件中的字符名 create_ocr_class_mlp(8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle) // 创建MLP trainf_ocr_class_mlp(OCRHandle, 'myfont.trf', 200, 1, 0.01, Error, ErrorLog) // 训练 write_ocr_class_mlp(OCRHandle, 'myfont.omc') // 保存分类器
使用 OCR 分类器进行识别:
c#read_image(ImageTest, 'test_image.png') rgb1_to_gray(ImageTest, GrayImageTest) // ... (执行与训练时类似的字符分割步骤) ... // threshold, connection, select_shape, sort_region ->得到 SortedTestRegions read_ocr_class_mlp('myfont.omc', OCRHandle) // 加载分类器 do_ocr_multi_class_mlp(SortedTestRegions, GrayImageTest, OCRHandle, Class, Confidence) // 执行识别 // 显示结果 count_obj(SortedTestRegions, NumChars) area_center(SortedTestRegions, Area, Row, Col) for i := 0 to NumChars - 1 by 1 disp_message(WindowHandle, Class[i], 'image', Row[i], Col[i], 'green', 'false') endfor
gen_empty_obj - 创建一个空的对象元组
gen_empty_obj(EmptyObject)
* 示例: gen_empty_obj(EmptyObject)
功能概述:
生成一个不包含任何图形对象(如图像、区域)的空元组。常用于初始化对象集合,以便后续使用 concat_obj
添加对象。
主要参数:
EmptyObject
(Output): 输出的空对象元组
draw_rectangle1 - 允许用户交互式绘制一个矩形
draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
* 示例: draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
功能概述:
在指定窗口中,允许用户通过鼠标拖拽交互式地绘制一个与坐标轴平行的矩形,并返回其左上角和右下角的坐标。
主要参数:
WindowHandle
: 进行绘制操作的窗口句柄。Row1
,Column1
(Output): 矩形左上角的行、列坐标。Row2
,Column2
(Output): 矩形右下角的行、列坐标。
reduce_domain - 缩小图像的处理域
reduce_domain(Image, Region, ImageReduced)
* 示例: reduce_domain(GrayImage, Rectangle, ImageReduced1)
功能概述:
将输入图像的处理域 (domain) 限制在给定的区域内。后续对 ImageReduced
的操作(如 threshold
)将只影响该区域内的像素。
主要参数:
Image
(Input): 输入图像。Region
(Input): 用于限制域的区域。ImageReduced
(Output): 域被缩减后的图像对象。
sort_region - 对区域元组进行排序
sort_region(Regions, SortedRegions, SortMode, Order, RowOrCol)
* 示例: sort_region (EmptyObject, SortedRegions1, 'character', 'true', 'row')
* 示例: sort_region (SelectedwordRegions, SortedRegions2, 'upper_left', 'true', 'column')
功能概述:
根据指定的标准对输入区域元组中的区域进行排序。
主要参数:
Regions
(Input): 包含多个区域的对象元组。SortedRegions
(Output): 排序后的区域对象元组。SortMode
: 排序模式(如 'character', 'upper_left', 'first_point', 'area' 等)。'character' 尝试模拟阅读顺序(先行后列)。'upper_left' 按左上角点排序。Order
: 排序顺序 ('true' 表示升序, 'false' 表示降序)。RowOrCol
: 主要排序方向 ('row' 或 'column')。
select_obj - 从对象元组中选择单个对象
select_obj(Objects, ObjectSelected, Index)
* 示例: select_obj (SortedRegions1, ObjectSelected1, Index1)
功能概述:
从输入的图标对象元组中,根据索引(从1开始)选择一个对象。
主要参数:
Objects
(Input): 输入的对象元组。ObjectSelected
(Output): 被选中的单个对象(仍然是一个元组,但只含一个元素)。Index
: 要选择的对象的索引(1-based)
append_ocr_trainf - 将字符区域添加到 OCR 训练文件
append_ocr_trainf(Character, Image, Class, TrainingFile)
* 示例: append_ocr_trainf (ObjectSelected1, Image, words[Index1-1], 'yszx.trf')
功能概述:
将一个字符区域(通常是分割出的单个字符)及其对应的字符名称(标签)追加到指定的 OCR 训练文件 (.trf
) 中。需要提供包含该字符区域的原始图像,以便提取特征。
主要参数:
Character
(Input): 包含单个字符的区域对象。Image
(Input): 包含该字符区域的原始(灰度)图像。Class
(Input): 该字符的名称/标签(字符串)。TrainingFile
(Input): 目标训练文件的路径和名称。如果文件不存在,会自动创建。
read_ocr_trainf_names - 读取 OCR 训练文件中的字符名称
read_ocr_trainf_names(TrainingFile, CharacterNames, CharacterCount)
* 示例: read_ocr_trainf_names ('yszx.trf', CharacterNames, CharacterCount)
功能概述:
读取指定的 OCR 训练文件 (.trf
),返回其中包含的所有唯一字符名称以及每个字符名称对应的样本数量。
主要参数:
TrainingFile
(Input): 训练文件的路径和名称。CharacterNames
(Output): 包含训练文件中所有唯一字符名称的元组。CharacterCount
(Output): 与CharacterNames
对应的,每个字符名称的样本数量。
create_ocr_class_mlp - 创建一个基于 MLP 的 OCR 分类器
create_ocr_class_mlp(WidthCharacter, HeightCharacter, Interpolation, Features, Characters, NumHidden, Preprocessing, NumComponents, RandSeed, OCRHandle)
* 示例: create_ocr_class_mlp (50, 60, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
* 示例: create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 20, 'normalization', 26, 42, OCRHandle)
功能概述:
创建一个用于 OCR 的多层感知器(MLP)神经网络分类器。需要指定字符归一化尺寸、特征、隐藏层节点数等参数。
主要参数:
WidthCharacter
,HeightCharacter
: 字符在送入网络前被归一化到的标准宽度和高度。Interpolation
: 归一化时使用的插值方法。Features
: 要从字符区域提取的特征 ('default', 'pca', 'projection_fast', 'projection_slow')。'default' 通常是像素值。Characters
: 分类器需要识别的所有字符名称的元组(通常来自read_ocr_trainf_names
)。NumHidden
: MLP 隐藏层中的神经元数量。这是影响模型容量的关键参数。Preprocessing
: 特征预处理方法 ('none', 'normalization', 'principal_components')。NumComponents
: 如果使用 'principal_components' 预处理,指定主成分的数量。RandSeed
: 随机数种子,用于初始化网络权重。OCRHandle
(Output): 创建的 OCR 分类器的句柄。
trainf_ocr_class_mlp - 使用训练文件训练 MLP OCR 分类器
trainf_ocr_class_mlp(OCRHandle, TrainingFile, MaxIterations, WeightTolerance, ErrorTolerance, Error, ErrorLog)
* 示例: trainf_ocr_class_mlp (OCRHandle, 'yszx.trf', 200, 1, 0.01, Error, ErrorLog)
功能概述:
使用指定的训练文件 (.trf
) 对一个已创建的 MLP OCR 分类器进行训练。
主要参数:
OCRHandle
(Input): 要训练的 OCR 分类器的句柄。TrainingFile
(Input): 包含训练样本的.trf
文件路径。MaxIterations
: 最大训练迭代次数(epochs)。WeightTolerance
: 训练停止条件之一,两次迭代间权重变化的阈值。ErrorTolerance
: 训练停止条件之一,训练误差的阈值。Error
(Output): 训练结束时的总误差。ErrorLog
(Output): 每次迭代的误差记录。
write_ocr_class_mlp - 保存 MLP OCR 分类器到文件
write_ocr_class_mlp(OCRHandle, FileName)
* 示例: write_ocr_class_mlp (OCRHandle, 'yszx.omc')
功能概述:
将训练好的 MLP OCR 分类器保存到文件中(通常是 .omc
文件),以便后续加载和使用。
主要参数:
OCRHandle
(Input): 要保存的 OCR 分类器句柄。FileName
(Input): 保存分类器的目标文件路径和名称
select_shape - 根据形状特征选择区域
select_shape(Regions, SelectedRegions, Features, Operation, Min, Max)
* 示例: select_shape (ConnectedwordRegions, SelectedwordRegions, 'area', 'and', 700, 2500)
功能概述:
根据区域的形状特征(如面积、圆度、宽度、高度等)从区域元组中筛选出符合条件的区域。
主要参数:
Regions
(Input): 输入的区域元组。SelectedRegions
(Output): 筛选后剩下的区域元组。Features
: 要筛选依据的形状特征名称(或名称元组)。常用如 'area', 'width', 'height', 'circularity', 'compactness'。Operation
: 逻辑操作 ('and' 或 'or'),用于组合多个特征条件。Min
,Max
: 特征值的最小/最大阈值(或阈值元组)。
count_obj - 计算对象元组中的对象数量
count_obj(Objects, Number)
* 示例: count_obj(SortedRegions2, Number)
功能概述:
计算输入对象元组中包含的对象(如区域、图像)的数量。
主要参数:
Objects
(Input): 输入的对象元组。Number
(Output): 元组中对象的数量。
read_ocr_class_mlp - 从文件加载 MLP OCR 分类器
read_ocr_class_mlp(FileName, OCRHandle)
* 示例: read_ocr_class_mlp ('yszx.omc', OCRHandle1)
功能概述:
从之前保存的文件(通常是 .omc
)中加载一个 MLP OCR 分类器。
主要参数:
FileName
(Input): 包含分类器信息的文件路径。OCRHandle
(Output): 加载的 OCR 分类器的句柄。
do_ocr_multi_class_mlp - 使用 MLP OCR 分类器对多个字符区域进行分类
do_ocr_multi_class_mlp(Character, Image, OCRHandle, Class, Confidence)
* 示例: do_ocr_multi_class_mlp (SortedRegions2, Image1, OCRHandle1, Class, Confidence)
功能概述:
使用加载的 MLP OCR 分类器对输入元组中的每个字符区域进行识别。
主要参数:
Character
(Input): 包含待识别字符区域的元组。Image
(Input): 包含这些字符区域的原始(灰度)图像。OCRHandle
(Input): 已加载的 MLP OCR 分类器句柄。Class
(Output): 识别结果的元组,每个元素对应一个输入区域的识别字符。Confidence
(Output): 识别结果的置信度元组,每个元素对应一个识别结果的置信度(通常在 0 到 1 之间)。
dev_update_off - 关闭 HDevelop 中的自动窗口更新
dev_update_off()
* 示例: dev_update_off ()
功能概述:
在 HDevelop 环境中,关闭执行每个算子后自动更新图形窗口内容的功能。这在执行一系列显示操作前使用,可以提高效率并避免闪烁,最后通常配合 dev_update_window('on')
或隐式更新(如 stop()
)使用。
主要参数:
无。
get_file_path_in_tmp_dir - 获取临时目录下的文件路径
get_file_path_in_tmp_dir(FileName, AbsolutePath)
* 示例: get_file_path_in_tmp_dir ('letters.trf', TrainFile)
功能概述: 获取在系统临时目录中指定文件的绝对路径。这对于创建不需要永久保存的临时文件(如训练文件)很有用。
主要参数:
FileName
(Input): 期望的文件名。AbsolutePath
(Output): 该文件在临时目录中的完整绝对路径。
binary_threshold - 自动确定阈值并进行二值化
binary_threshold(Image, Region, Method, LightDark, UsedThreshold)
* 示例: binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
功能概述:
使用自动阈值确定方法(如最大类间方差法 'max_separability')计算一个全局阈值,并用该阈值对图像进行分割。可以选择提取比阈值亮或暗的像素。
主要参数:
Image
(Input): 输入图像。Region
(Output): 分割出的区域。Method
: 自动阈值确定方法 ('max_separability', 'smooth_histo' 等)。LightDark
: 选择提取亮 ('light') 还是暗 ('dark') 的对象。UsedThreshold
(Output): 自动计算并使用的阈值。
dilation_circle - 使用圆形结构元素进行膨胀
dilation_circle(Region, RegionDilation, Radius)
* 示例: dilation_circle (Region, RegionDilation, 3.5)
功能概述:
使用指定半径的圆形结构元素对输入区域进行形态学膨胀操作。常用于连接邻近区域或填充小的内部空洞。
主要参数:
Region
(Input): 输入区域。RegionDilation
(Output): 膨胀后的区域。Radius
: 圆形结构元素的半径(像素)。
intersection - 计算两个区域的交集
intersection(Region1, Region2, RegionIntersection)
* 示例: intersection (ConnectedRegions, Region, RegionIntersection)
功能概述:
计算两个输入区域(或区域元组中对应元素的)交集。结果区域包含同时属于两个输入区域的像素。
主要参数:
Region1
(Input): 第一个区域(或区域元组)。Region2
(Input): 第二个区域(或区域元组)。RegionIntersection
(Output): 交集区域(或区域元组)。
write_ocr_trainf - 将字符区域批量写入 OCR 训练文件
write_ocr_trainf(Characters, Image, Class, TrainingFile)
* 示例: write_ocr_trainf (Characters, Image, Classes, TrainFile)
功能概述: 将一个包含多个字符区域的元组以及它们对应的类别标签(与区域元组一一对应)一次性写入 OCR 训练文件。这是 append_ocr_trainf
的批量版本。
主要参数:
Characters
(Input): 包含多个字符区域的对象元组。Image
(Input): 包含这些字符区域的原始(灰度)图像。Class
(Input): 包含与Characters
中每个区域对应的字符名称/标签的元组。长度必须与Characters
中的对象数量一致。TrainingFile
(Input): 目标训练文件的路径和名称。如果文件已存在,会被覆盖。
full_domain - 将图像域扩展到整个图像
full_domain(Image, ImageFullDomain)
* 示例: full_domain (Image, Image) // 直接修改原图像变量
功能概述: 将输入图像的处理域 (domain) 扩展到其定义的整个矩形范围。这会撤销之前由 reduce_domain
等操作施加的域限制。
主要参数:
Image
(Input): 输入图像。ImageFullDomain
(Output): 域被扩展后的图像对象
dev_set_check - 控制 HDevelop 错误检查行为
dev_set_check(Mode)
* 示例: dev_set_check ('~give_error') // 关闭错误弹窗
* 示例: dev_set_check ('give_error') // 开启错误弹窗(默认)
功能概述: 在 HDevelop 环境中,控制当算子执行出错时的行为。'~give_error'
可以暂时禁止弹出错误对话框,允许程序继续执行(例如,在尝试删除一个可能不存在的文件之前)。
主要参数:
Mode
: 检查模式 ('give_error', '~give_error')。
delete_file - 删除文件
delete_file(FileName)
* 示例: delete_file (TrainFile)
功能概述: 删除指定路径的文件。如果文件不存在且错误检查被关闭 (dev_set_check('~give_error')
),则不会报错。
主要参数:
FileName
(Input): 要删除的文件的完整路径和名称。
fill_up_shape - 填充区域中特定形状特征的孔洞
fill_up_shape(Region, RegionFilledUp, Feature, Min, Max)
* 示例: fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)
功能概述: 填充输入区域内部的孔洞,但只填充那些形状特征(如面积)在指定范围内的孔洞。
主要参数:
Region
(Input): 输入的有孔洞的区域。RegionFilledUp
(Output): 孔洞被填充后的区域。Feature
: 用于筛选孔洞的形状特征(如 'area')。Min
,Max
: 孔洞特征值的允许范围。
opening_circle - 使用圆形结构元素进行开运算
opening_circle(Region, RegionOpening, Radius)
* 示例: opening_circle (RemovedNoise, ThickStructures, 2.5)
功能概述: 使用指定半径的圆形结构元素对输入区域执行形态学开运算(先腐蚀后膨胀)。常用于去除小的噪点、断开细小连接、平滑轮廓。
主要参数:
Region
(Input): 输入区域。RegionOpening
(Output): 开运算后的区域。Radius
: 圆形结构元素的半径。
fill_up - 填充区域中的所有孔洞
fill_up(Region, RegionFilledUp)
* 示例: fill_up (ThickStructures, Solid)
功能概述: 填充输入区域内部的所有孔洞(无论大小或形状)。
主要参数:
Region
(Input): 输入的有孔洞的区域。RegionFilledUp
(Output): 所有孔洞被填充后的区域。
opening_rectangle1 - 使用矩形结构元素进行开运算
opening_rectangle1(Region, RegionOpening, Width, Height)
* 示例: opening_rectangle1 (Solid, Cut, 1, 7)
功能概述: 使用指定宽度和高度的矩形结构元素对输入区域执行形态学开运算。可以根据矩形的尺寸和方向性来处理特定形状的结构。
主要参数:
Region
(Input): 输入区域。RegionOpening
(Output): 开运算后的区域。Width
,Height
: 矩形结构元素的宽度和高度。
dev_set_shape - 设置后续区域显示的形状模式
dev_set_shape(Shape)
* 示例: dev_set_shape ('rectangle1')
功能概述: 设置后续 dev_display
显示区域时的模式。例如 'original' 显示原始像素,'rectangle1' 显示区域的外接矩形,'contour' 显示轮廓线。
主要参数:
Shape
(Input): 显示模式 ('original', 'contour', 'rectangle1', 'ellipse', 'convex' 等)。
dev_set_draw - 设置后续区域填充/轮廓模式
dev_set_draw(DrawMode)
* 示例: dev_set_draw ('margin')
功能概述: 设置后续 dev_display
显示区域时是填充区域 ('fill') 还是只绘制轮廓 ('margin')。
主要参数:
DrawMode
(Input): 绘制模式 ('fill' 或 'margin')。
shape_trans - 对区域进行形状变换
shape_trans(Region, RegionTrans, Type)
* 示例: shape_trans (SortedRegions, RegionTrans, 'rectangle1')
功能概述: 将输入区域变换为其等效的某种标准形状,如外接矩形、最小外接矩形、凸包、等效椭圆等。
主要参数:
Region
(Input): 输入区域(或区域元组)。RegionTrans
(Output): 变换后的区域(或区域元组)。Type
: 变换类型 ('rectangle1', 'rectangle2', 'convex', 'ellipse', 'circle' 等)。
mean - 计算元组元素的平均值
mean(Tuple, MeanValue)
* 示例: MeanRow := mean(Row) // HALCON脚本中直接赋值用法
功能概述: 计算输入数值元组中所有元素的算术平均值。
主要参数:
Tuple
(Input): 包含数值的元组。MeanValue
(Output): 计算得到的平均值。
uniq - 返回元组中的唯一值
uniq(Tuple, UniqueTuple)
* 示例: CharNames := uniq(sort(TrainingNames)) // 先排序再去重
功能概述: 从输入元组中移除重复的元素,返回一个只包含唯一值的元组。通常先对元组排序 (sort
) 再去重,可以得到排序后的唯一值。
主要参数:
Tuple
(Input): 输入元组。UniqueTuple
(Output): 包含唯一值的元组。
sort - 对元组进行排序
sort(Tuple, SortedTuple)
* 示例: sort(TrainingNames) // 作为 uniq 的输入
功能概述: 对输入元组的元素进行升序排序。
主要参数:
Tuple
(Input): 输入元组(数值或字符串)。SortedTuple
(Output): 排序后的元组。
clear_ocr_class_mlp - 释放 MLP OCR 分类器内存
clear_ocr_class_mlp(OCRHandle)
* 示例: clear_ocr_class_mlp (OCRHandle1)
功能概述: 清除一个 MLP OCR 分类器,释放其占用的内存资源。在不再需要分类器时调用。
主要参数:
OCRHandle
(Input): 要清除的 OCR 分类器句柄。
ord - 获取字符的 ASCII 值
ord(Character)
* 示例: ord('a')
功能概述: 返回输入字符的 ASCII 数值。
主要参数:
Character
(Input): 单个字符。
chr - 根据 ASCII 值获取字符
chr(AsciiValue)
* 示例: chr(ord('a') + J)
功能概述: 根据输入的 ASCII 数值返回对应的字符。
主要参数:
AsciiValue
(Input): ASCII 数值。
gen_tuple_const - 生成包含重复常量值的元组
gen_tuple_const(Length, Constant)
* 示例: gen_tuple_const(Length, chr(ord('a') + J))
功能概述: 创建一个指定长度的元组,其中所有元素都等于给定的常量值。
主要参数:
Length
(Input): 元组的长度。Constant
(Input): 要重复的常量值(数值或字符串)。
笔面试题
如何在Halcon中进行图像配准
在Halcon中,图像配准通常使用 FindShapeModel 函数,它通过形状匹配来定位模型的位置和角度。首先,通过创建一个形状模型来描述待匹配的图像特征,然后使用 FindShapeModel 在目标图像中查找 匹配。可以设置匹配的精度和容忍度,以提高配准的准确性。配准后,返回模型的位置信息(位置、旋转角度等),使得物体定位更加精准。
Halcon中的Region和Image的区别是什么
在Halcon中, Region 和 Image 是两种不同的数据类型。 Image 表示原始图像数据,包含每个像素的颜色或灰度值;而 Region 则表示图像中的二值化区域,即只包含前景或背景区域。通过阈值处理、形态学操作等可以将 Image 转换为 Region ,进行区域分析和处理。分割等任务,而 Image 用于图像处理和分析。更多地用于形态学、测量、特征提取等。
Halcon中如何实现图像的旋转操作
可以使用 RotateImage 函数对图像进行旋转。该函数需要输入图像和旋转角度,返回旋转后的图像。用户可以指定旋转角度(以度为单位)以及旋转中心。如果希望图像旋转后保持原始大小,可以选择自动调整图像边界,避免图像内容丢失。此外, RotateImage 可以与其他图像处理函数结合使用,适应不同的应用场景。
Halcon中的函数如何应用
Threshold 函数是Halcon中常用的二值化操作,用于根据灰度值对图像进行阈值分割。该函数有两个主要参数:最小阈值和最大阈值。通过设置阈值范围,Threshold 函数将图像中的像素根据灰度值划分为前景和背景。在实际应用中,阈值可以根据图像内容调整,常用于物体提取、背景分离等任务。通过后的图像通常会用于进一步的形态学处理或特征提取。
如何在Halcon中进行形态学操作
Halcon提供了丰富的形态学操作,包括膨胀、腐蚀、开运算、闭运算等。常用函数有 Dilation 、 Erosion 、 Opening 和 Closing 。这些操作用于处理二值图像,去除噪声、填补空洞或连接断裂的部分。例如, Dilation 通过扩展前景区域来填充小的空隙,而 Erosion 则通过收缩前景区域来去除小的噪声。形态学操作广泛应用于图像预处理、物体检测和形状分析等领域。
Halcon如何处理图像的灰度变换
Halcon提供了多种灰度变换函数,如 GammaCorrection 、 LogTransformation 、 PowerTransformation 等。灰度变换用于调整图像的亮度、对比度或特定的灰度特征。例如, GammaCorrection 可以调整图像的对比度,使图像更适合后续的分析。灰度变换操作通常用于图像增强、对比度调整等,帮助突出图像中的关键信息,改善图像的质量,适应不同的处理需求。
Halcon中的函数是什么
函数用于进行基于模板的图像匹配,利用归一化互相关(NCC)来比较目标图像和模板图像的相似性。该函数在实际应用中常用于定位物体或识别特定形状,适用于模板较小、旋转角度变化较小的场景。用户可以设置匹配精度、匹配方向和容忍度等参数,以提高匹配的成功率。此函数广泛应用于工业自动化、视觉检测和质量控制等领域。
如何在Halcon中提取图像的边缘
Halcon提供了多个函数来提取图像的边缘,常用的函数包括 EdgesSubPix 和 EdgeGray 。 EdgesSubPix 用于亚像素级边缘检测,它通过更精细的像素估计来获取边缘位置,适合高精度要求的应用。 EdgeGray 则基于图像灰度梯度进行边缘检测,适用于一般的边缘提取任务。边缘检测在物体识别、形状分析和轮廓提取中起着重要作用。
Halcon中的函数如何使用
函数用于限制图像的处理区域,创建一个包含感兴趣区域(ROI)的新图像。用户可以指定一个区域(如矩形、圆形等),然后会将图像的域限制在该区域内,后续的图像处理仅在该区域内进行。这对于加速处理和提高计算效率非常有用,特别是在大图像中只需要关注某个特定区域时。
如何在Halcon中计算物体的面积
在Halcon中,计算物体的面积可以使用 AreaCenter 函数。该函数不仅返回物体的面积,还返回物体的质心坐标。面积的单位通常为像素,用户可以根据需要转换为实际物理单位(如毫米、厘米等)。面积计算通常用于物体计数、尺寸测量和质量控制等应用中。 AreaCenter 在处理二值图像时尤为常见,可以用来计算物体、孔洞或其他感兴趣区域的面积。
点云数据是什么?
点云数据是一种包含三维空间中大量离散点的集合,每个点通常具有XYZ坐标和其他附加属性(如颜色、强度等)。点云数据通常用于表示物体或环境的三维形态。
什么是点云配准?
点云配准是将多个不同视角或不同时间采集的点云数据进行对齐,合并成一个完整的三维数据集。常用的方法有基于特征匹配的粗配准和基于ICP算法的精配准。
点云数据如何去噪声?
点云去噪声的方法包括空间滤波、统计滤波等。统计滤波方法通过分析邻域内点的分布情况,去除那些偏离正常分布的异常点。空间滤波则根据点的密度去除孤立点或远离主要区域的噪声。
什么是RANSAC算法?
RANSAC(随机采样一致性)算法是一种常用于点云数据分割和拟合的方法。它通过随机选择点集进行假设,迭代求解最优解,从而剔除噪声,得到更加精确的模型。
点云数据如何进行下采样?
下采样是减少点云中点的数量的过程,常用方法包括体素网格法(Voxel Grid)、随机采样等。下采样可以提高处理效率,减少计算资源的消耗。
点云数据如何进行三维建模?
三维建模是通过点云数据生成三维模型,常见方法包括表面重建算法,如Poisson重建、Alpha Shapes等。这些方法将离散点云转化为连续的几何表面,生成网格模型。
如何通过点云数据实现物体识别?
物体识别通常基于点云的特征提取,例如法线、曲率等。通过这些几何特征,可以利用机器学习、深度学习等方法对点云进行分类和物体识别。
点云数据中的坐标系转换是怎么做的?
点云数据常常需要在不同坐标系之间进行转换。这通常通过矩阵运算(如旋转矩阵、平移矩阵)来完成。具体的坐标系转换方法需要根据采集设备的坐标系和目标应用的坐标系来选择。
点云分割的目的是什么?
点云分割的目的是将一个点云数据集划分为多个有意义的部分,便于后续的分析、建模或识别。常见的应用包括物体检测、场景分析等。
点云数据在自动驾驶中的应用有哪些?
在自动驾驶中,点云数据广泛应用于环境感知、障碍物检测、地图构建等任务。通过对点云数据的分析,车辆可以识别道路、行人、交通标志、其他车辆等重要信息,从而实现自主驾驶。
点云的处理流程通常包括以下几个主要步骤:
- 数据采集 点云数据通过各种设备(如激光雷达LIDAR、深度相机、立体相机等)进行采集。采集到的点云数据包含了三维空间中的大量离散点,每个点都有XYZ坐标以及可能的附加属性(如颜色、强度等)。
- 数据预处理 去噪声:点云数据可能包含噪声点,需要通过滤波方法(如统计滤波、体素滤波等)去除异常数据。 下采样:减少点云的密度,以降低计算复杂度。常用的方法包括体素网格法(Voxel Grid)和随机采样等。 坐标转换:将点云数据从传感器坐标系转换到世界坐标系,确保数据的一致性。
- 点云配准 配准是将多个不同视角或不同时间采集的点云数据对齐,合并成一个完整的三维点云数据集。常用的配准算法包括基于特征匹配的粗配准和迭代最近点(ICP)算法的精配准。
- 特征提取 提取点云的几何特征,如法线、曲率、点密度等。这些特征对于后续的点云分割、物体识别、建模等分析非常重要。
- 点云分割 将点云数据划分为多个有意义的区域或物体。常见的分割方法包括基于平面的RANSAC算法和基于区域增长的分割方法。分割后,可以独立地分析每个区域。
- 表面重建与建模 利用处理后的点云数据生成三维模型。常见的表面重建方法包括Poisson重建、Alpha Shapes等,这些方法将离散的点云数据转化为连续的几何表面。
- 点云可视化 将处理后的点云数据进行三维可视化,使得用户可以直观地查看和分析数据。可视化可以帮助在实际应用中发现潜在问题或对数据进行进一步评估。
- 数据分析与应用 在可视化和建模的基础上,进行更深入的分析,如物体识别、场景重建、变化检测、测量等。点云数据在建筑、自动驾驶、机器人导航、文化遗产保护等多个领域有广泛应用。
- 结果输出 将处理后的点云数据输出到各种格式(如PLY、PCD、LAS等),以便于后续分析、共享或集成到其他系统中。
- 优化与验证 对处理结果进行验证和优化,确保点云数据的精度和正确性,可能需要通过与地面真实数据的对比或调整算法参数来改进结果。
点云应用领域
点云数据的应用非常广泛,涵盖了多个行业和领域: 建筑与施工:用于建筑物、桥梁、隧道等结构的三维建模与分析。 自动驾驶与机器人:帮助自动驾驶系统和机器人进行环境感知、路径规划和避障。 文物保护与文化遗产:通过点云技术对历史建筑、文物进行数字化保护和修复。 地理信息系统(GIS):为地形测绘、城市规划、灾害监测等提供精确的三维地理数据。 制造业与工业检测:用于产品设计、质量检测和逆向工程。
Halcon中的深度学习分类模型是什么?如何训练?
在Halcon中,深度学习分类模型主要用于图像的分类任务。Halcon提供了基于卷积神经网络(CNN)的模型进行图像分类。训练模型时,首先需要准备带标签的图像数据集,并将这些图像分为训练集和验证集。Halcon提供了 TrainDLClassifier 算子来训练模型。训练过程中,系统会自动提取特征并优化模型参数。完成训练后,使用 ClassifyDL 算子对新图像进行分类预测。
Halcon如何进行目标检测?
在Halcon中,目标检测任务通常使用预训练的深度学习模型进行。目标检测不仅需要识别图像中的物体类别,还要提供物体的具体位置(即边界框)。Halcon通过深度学习目标检测网络(如YOLO、SSD等)实现这一功能。可以使用 DetectObjects 等算子将训练好的深度学习模型应用于目标检测任务。训练目标检测模型时,通常需要标注物体的边界框,并使用这些信息进行训练。
Halcon中的异常检测是如何实现的?
异常检测(Anomaly Detection)在Halcon中通常使用无监督学习方法来检测图像中的异常模式。在训练阶段,系统会学习到正常样本的特征,并通过计算图像的特征向量来与训练数据中的正常样本进行对比。使用深度学习模型或其他传统的机器学习方法(如支持向量机(SVM))来构建异常检测模型。 Halcon中的 DetectAnomalies 算子可以帮助快速进行异常检测。该技术广泛应用于工业生产线上的缺陷检测。
Halcon中的实例分割技术是如何实现的?
实例分割(Instance Segmentation)技术旨在对图像中的每一个物体实例进行像素级别的分割,区别于语义分割,实例分割还需要区分不同的同类物体。在Halcon中,实例分割通过深度学习模型(如Mask R- CNN)实现。训练过程中,使用带有分割掩码的标签数据来训练模型。训练完毕后,可以使用 SegmentObjects 算子对图像进行实例分割,获取每个物体的像素掩码,进而获得精确的分割结果。
Halcon中如何评估深度学习分类模型的性能?
Halcon提供了多种方法来评估深度学习分类模型的性能。常见的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1值等。训练模型后,可以通过使用测试集数据来评估模型的分类性能,使用 ClassifyDL 算子对测试集进行预测,并与实际标签进行对比,计算各项评估指标。此外,Halcon还支持生成混淆矩阵,帮助进一步分析分类效果。
Halcon中如何进行目标检测模型的训练与优化?
在Halcon中,目标检测模型的训练涉及多种数据处理技术。首先,需要准备大量带有标签的训练图像,包括每个物体的边界框坐标。Halcon提供 TrainObjectDetection 算子进行训练。训练过程中,通过调整学习率、批次大小、训练轮次等超参数来优化模型。在优化过程中,可以通过验证集上的损失值来判断模型的表现。如果模型过拟合或欠拟合,需调整网络结构、数据增强方法或优化器。
Halcon中的目标检测与分类的区别是什么?
目标检测和分类是计算机视觉中的两个不同任务。目标检测不仅要求分类物体,还需要定位物体的位置(即生成边界框)。而分类任务仅需要识别图像中的物体类别。Halcon中的目标检测使用深度学习模型(如YOLO)进行位置和类别的双重预测,而分类任务则使用单一的类别标签。分类关注整体的图像类别,而目标检测注重图像中所有物体的位置与类别。
Halcon中如何优化目标检测模型的速度和精度?
优化目标检测模型的速度和精度是深度学习应用中常见的挑战。在Halcon中,可以通过多种方式进行优化: 数据增强:通过图像旋转、缩放、翻转等操作增加训练数据集的多样性,提升模型的泛化能力。精度与速度的权衡:可以选择适当的网络结构,如使用轻量级模型(如YOLOv4-tiny)来提高推理速度。 后处理优化:通过调整非极大值抑制(NMS)参数来减少误检和漏检,优化检测精度。 硬件加速:利用GPU或专用加速硬件来加速模型推理,提高实时性。
如何在Halcon中应用迁移学习来提高模型的准确性?
迁移学习是通过使用在大规模数据集上预训练的模型权重,然后将这些权重迁移到新任务上的方法。在 Halcon中,可以使用 TrainDLClassifier 或 TrainObjectDetection 算子,通过加载预训练模型作为初始化,减少从头训练的时间,并提高在小数据集上的准确性。通过微调(fine-tuning)预训练模型,调整最后几层网络的参数,使模型更好地适应新的任务,从而加速训练过程并提高准确性。
Halcon中如何使用深度学习进行缺陷检测?
在Halcon中进行缺陷检测时,通常使用深度学习模型来识别产品表面上的缺陷,如裂纹、划痕等。首先,需要收集带标签的正常与缺陷样本。使用 TrainDLClassifier 进行训练,模型将学习正常样本的特征以及缺陷样本的特征。完成训练后,使用 ClassifyDL 算子对新图像进行缺陷检测。深度学习模型通过学习不同的缺陷类型,能够准确识别并分类缺陷,提高工业生产线上的检测效率。
什么是Halcon的OCR功能,它是如何工作的?
Halcon的OCR(光学字符识别)功能通过训练模型识别图片中的文本。它支持多种语言和字符集。OCR的核心流程包括图像预处理、字符分割、特征提取和匹配。图像预处理通过去噪和调整对比度提高识别率,字符分割将字符从背景中提取出来,特征提取则提取字符的形状特征,最后,通过与已有的字符库或模型进行匹配,识别图像中的文本。
Halcon中如何使用“测量”工具进行尺寸测量?
Halcon提供了多种测量工具,如边缘检测、直线拟合和轮廓分析,来获取图像中的物体尺寸。首先,可以使用边缘检测算子(如Edge或Threshold)找到物体的边缘,然后使用拟合算法(如Line或Circle)精确确定物体的几何形状。接下来,通过计算两点之间的距离或物体的角度,可以得到尺寸信息。Halcon也提供了许多内置的测量工具来简化这些操作。
Halcon如何进行图像预处理以提高OCR识别的准确性?
在Halcon中,图像预处理是提高OCR识别准确性的关键步骤。常用的预处理技术包括灰度化、二值化、去噪、对比度增强、倾斜矫正和形态学操作。去噪可以通过滤波算法(如中值滤波或高斯滤波)去除图像中的噪点,对比度增强有助于提高字符的清晰度,形态学操作则可以用于去除不必要的干扰,增强字符的轮廓。倾斜矫正则确保文本在正确的角度上进行识别。
在Halcon中,如何处理变形的物体进行尺寸测量?
处理变形物体的尺寸测量时,可以使用Halcon中的形态学变换和图像分析工具。例如,可以使用轮廓分析算子提取物体的边缘,利用轮廓上的特征进行拟合计算。对于有变形的物体,可以通过边缘检测和多点拟合来捕捉物体的形态特征,从而获取更精确的尺寸信息。Halcon的变形补偿算法也能在一定程度上减轻物体变形带来的测量误差。
如何提高Halcon OCR算法的识别精度?
提高Halcon OCR算法的识别精度通常涉及多个方面。首先,图像质量的提升至关重要,确保输入图像清晰且无过多噪声。其次,优化OCR训练模型,针对不同字体和文本样式进行调整,以确保匹配精度。可以通过改变字符识别的阈值或调整图像预处理参数来提高识别效果。训练时,增加数据集的多样性和质量,增强模型的鲁棒性。此外,选择合适的文本区域和改进文本分割策略也有助于提高识别准确性。
Halcon如何进行二维码/条形码的读取?
在Halcon中,读取二维码和条形码非常直接。使用相关的条形码读取算子,如 FindBarcode 和 FindQRCode ,它们可以快速地从图像中检测到条形码或二维码。读取过程中,Halcon会首先定位条形码的边界,进行解码,并返回编码信息。为了提高读取的准确性,图像预处理步骤(如对比度增强或去噪)通常是必须的,尤其在图像质量较差的情况下。
Halcon中的边缘检测算法有哪几种?
Halcon提供多种边缘检测算法,以适应不同的图像和应用场景。常见的边缘检测算法包括Sobel、 Prewitt、Canny和Laplacian等。每种算法的原理不同,Sobel和Prewitt算子主要用于检测图像中的梯度变化,适合检测较为明显的边缘;Canny算子则是一种多阶段算法,能够检测到更精细的边缘,且不易受噪声影响。Laplacian算子则可以用于检测图像中的二阶导数变化,适合用于细节检测。
在Halcon中如何实现直线拟合?
在Halcon中,直线拟合通过算子 FitLine 来实现。该算子可以根据给定的点集拟合出最佳拟合直线。具体步骤包括:首先通过边缘检测或阈值分割得到一系列点,然后使用 FitLine 算法根据这些点的坐标信息来计算最佳拟合直线。拟合结果包括直线的斜率、截距以及拟合的误差。Halcon还提供了不同的拟合精度选项,可以根据需求调整。
如何处理Halcon中的透视失真问题?
透视失真通常是因为相机与被拍摄物体的角度不同所引起的。在Halcon中,可以使用“透视变换”算子(如 AffineTransRegion 、 ProjectiveTransImage 等)来校正这些失真。首先,通过获取一些已知的标定点和相应的图像坐标,然后利用这些信息建立透视变换模型。变换后,图像中的失真部分会被修正,从而获得一个真实的几何表示,适用于后续的测量和分析任务。
在Halcon中如何进行物体的角度测量?
Halcon中进行角度测量通常需要首先通过边缘检测或拟合算子提取物体的边缘或特征。然后,可以使用 Angle 算子来计算两条边缘或两条拟合直线之间的角度。该角度的单位可以设置为度或弧度。通过多点拟合方法,可以更精确地获取物体的角度,特别是在物体存在旋转或倾斜的情况下。
Halcon如何通过模板匹配进行物体定位?
在Halcon中,模板匹配是一种通过已知模板图像定位物体的技术。使用 FindShapeModel 算子,可以通过图像中的形状特征匹配来定位目标物体。模板匹配的基本步骤包括:首先,创建模板图像(可以是目标物体的二维图像),然后,通过图像处理算法提取出该模板的形状特征。匹配过程中,Halcon会根据这些特征在待检测图像中找到相似的区域,并返回匹配的位置、角度和尺度信息。
Halcon中如何进行颜色检测与分析?
在Halcon中,颜色检测通常需要先进行颜色空间转换(例如从RGB到HSV或Lab颜色空间),然后通过颜色分割来提取感兴趣区域。常用的颜色分割算子如 Threshold 可以根据指定的颜色范围来提取目标区域。此外,Halcon还提供了颜色直方图分析、颜色匹配和颜色区域分析等功能,可以帮助在复杂背景下进行准确的颜色识别。
如何优化Halcon的OCR性能?
优化Halcon的OCR性能需要综合考虑多个方面。首先,图像质量直接影响识别准确率,因此需要确保图像的清晰度和对比度。其次,训练集的选择和多样性对于OCR效果至关重要,增加不同字体、字符和样式的样本,以提高算法的适应性。调整OCR识别的参数,如字符间距、阈值和语言模型,也有助于提升性能。在OCR任务中,文本分割和预处理的精细度也会影响最终结果。
在Halcon中如何处理噪声?
Halcon提供多种去噪手段,包括中值滤波、高斯滤波等。中值滤波适用于去除椒盐噪声,而高斯滤波则适用于去除高斯噪声。对于复杂的噪声,可以使用形态学滤波算子,如开运算和闭运算,这有助于去除小的噪点或连接分离的物体。此外,Halcon还提供了图像质量评估工具,用于分析图像中的噪声类型和程度,从而选择合适的去噪方法。
Halcon如何进行测量精度的验证?
在Halcon中,测量精度的验证通常通过与已知标准物体进行比较来实现。通过测量已知尺寸物体的几何特征,计算测量结果与实际尺寸之间的误差。如果误差在允许范围内,则可以认为测量精度是合格的。 Halcon还提供了多种工具来进行误差分析,包括拟合误差、距离误差和角度误差等。
Halcon如何处理非规则物体的测量?
对于非规则物体的测量,Halcon可以使用轮廓分析和形态学操作。通过提取物体的边缘信息,并使用拟合算子(如拟合曲线、拟合圆等),可以从不规则形状中提取出关键信息。对于复杂的非规则物体,通常需要多步骤处理,如先通过边缘检测提取大致形状,再通过细化算法提取物体的精细特征,最后进行尺寸计算。
Halcon如何利用深度学习进行OCR?
Halcon支持结合深度学习方法进行OCR。使用深度学习模型可以自动化地从复杂图像中提取文本,而不依赖于传统的特征匹配方法。首先,训练深度神经网络(如卷积神经网络)来学习文本的特征,特别是在有噪声和复杂背景的图像中。训练完成后,使用Halcon提供的深度学习接口将训练好的模型应用于新的图像进行OCR识别。
如何在Halcon中处理带有倾斜角度的文字识别?
Halcon提供了文字倾斜矫正功能,可以在OCR处理之前先矫正文字的倾斜角度。通过 FindText 或者 AlignText 等算子,可以检测到文字的角度,并对其进行校正。校正后的文字将被重新排布为标准的水平或垂直状态,从而提高后续OCR识别的准确度。
如何使用Halcon检测物体的位置并进行测量?
在Halcon中,物体位置的检测通常通过模板匹配、边缘检测或形态学分析来实现。找到物体的位置后,可以通过测量工具来进行尺寸或位置计算。例如,使用 Distance 算子测量两个点之间的距离,或者通过拟合直线和曲线来计算物体的长宽、角度等尺寸信息。
Halcon中的形态学操作有什么作用,如何使用它们进行图像分析?
形态学操作主要用于图像的结构分析,常见操作包括膨胀、腐蚀、开运算和闭运算等。在Halcon中,形态学操作用于去噪、连接物体、提取轮廓等任务。膨胀和腐蚀算子主要用于对图像的结构进行调整,开闭运算可以帮助去除噪声或填补空洞。通过组合这些操作,能够从复杂的图像中提取出所需的特征并进行后续分析。
其他概念
霍夫变换 (Hough Transform)
概念: 一种在图像中检测特定形状(如直线、圆)的技术。它将图像空间中的特征点(如边缘点)映射到参数空间中,通过在参数空间中寻找累积峰值来识别对应的形状。常用于连接不连续的边缘点形成直线或圆。