记录一下学习MIL图像处理库的一些过程。
在Edge Finder源代码:
// 分配一个边缘检测缓存.
MIL.MedgeAlloc(MilSystem, MIL.M_CONTOUR, MIL.M_DEFAULT, ref MilEdgeContext);
// 分配一个结果缓存.
MIL.MedgeAllocResult(MilSystem, MIL.M_DEFAULT, ref MilEdgeResult);
// 下面这两句是自定义计算一些边缘特征:M_MOMENT_ELONGATION和M_FERET_MEAN_DIAMETER
MIL.MedgeControl(MilEdgeContext, MIL.M_MOMENT_ELONGATION, MIL.M_ENABLE);
MIL.MedgeControl(MilEdgeContext, MIL.M_FERET_MEAN_DIAMETER + MIL.M_SORT1_DOWN, MIL.M_ENABLE);
// 计算边缘和特征
MIL.MedgeCalculate(MilEdgeContext, MilImage, MIL.M_NULL, MIL.M_NULL, MIL.M_NULL, MilEdgeResult, MIL.M_DEFAULT);
// 返回获取的边缘数量.
MIL.MedgeGetResult(MilEdgeResult, MIL.M_DEFAULT, MIL.M_NUMBER_OF_CHAINS + MIL.M_TYPE_MIL_INT, ref NumEdgeFound);
// 绘制边缘轮廓到图中。
MIL.MgraColor(MIL.M_DEFAULT, EdgeDrawColor);
MIL.MedgeDraw(MIL.M_DEFAULT, MilEdgeResult, GraphicList, MIL.M_DRAW_EDGES, MIL.M_DEFAULT, MIL.M_DEFAULT);
上述代码只介绍了边缘检测的一般步骤,还有很多需要修改的参数需要随着自己实际的图像进行更改。下面对Edge中最常使用的MedgeControl进行介绍:
MedgeControl描述此函数为边缘查找器上下文或边缘查找器结果缓冲区设置指定的控件。对于Edge Finder上下文,这些设置控制MedgeCalculate操作的执行,并选择MedgeCalculate应该计算哪些边缘特征。对于Edge Finder结果缓冲区,这些设置控制结果的后期操作。例如,要绘制用于计算结果的源图像的缩放区域,必须适当设置绘制控制值。
MedgeControl参数:
MIL.MedgeControl(MilEdgeContext , X , Y);//X、Y表示两个参数
X | 描述 | Y | 描述 |
M_ACCURACY | 设置边缘提取的精度 | M_DISABLE M_HIGH |
DISABLE表示禁用,将以像素精度计算。 HIGH表示指定非常高的亚像素精度来计算。 |
M_ANGLE_ACCURACY | 设置边缘检测时边角的精度 | M_HIGH M_LOW |
字面理解就行 |
M_CHAIN_ALL_NEIGHBORS | 设置如何构建边缘链 | M_DISABLE M_ENABLE |
控制是否启用该参数,启用即指定用更多的信息构建边缘。如下图所示。 |
X | 描述 | Y | 描述 |
M_DETAIL_LEVEL | 设置图像提取的细节级别,越低的细节水平会发现更多的边缘,当然,这些边缘不一定是准确的。 | M_HIGH M_MEDIUM M_VERY_HIGH |
设置细节水平中、高、非常高三个等级。 |
M_FILTER_SMOOTHNESS | 设置对图像的平滑度处理,也就是去噪程度.过大会改变图像边缘信息,过小也不能去除噪声,这个值需要合理设置。(对于边缘检测影响很大) | M_DEFAULT VALUE |
默认值为50,VALUE的设置范围为[0 , 100] |
M_FILTER_TYPE | 设置边缘检测的算子,MIL中默认使用的算子是SHEN-CASTAN,也就是沈峻算子 | M_DERICHE M_FREI_CHEN M_PREWITT M_SHEN M_SOBEL |
常见的几种算子,下图赋个公式吧。 |
X | 描述 | Y | 描述 |
M_FLOAT_MODE | 设置是否强制使用浮点精度计算边缘的所有处理。 | M_DISABLE M_ENABLE |
无 |
M_MAGNITUDE_TYPE | 设置如何在每个边缘计算边缘梯度幅度的大小。对于CONTOUR,幅度是边缘位置梯度矢量的范数。CREAST是边缘位置的最大值。 | M_NORM M_SQR_NORM |
默认值:contour是M_SQR_NORM,CREAST是M_NORM。 M_NORM就是指梯度幅度,M_SQR_NORM是指梯度幅度的平方。 |
M_OVERSCAN | 设置处理边界图像的扫描类型(IIR滤波器,这个参数会被忽略,例如SHEN和deriche) | M_DISABLE M_MIRROR |
不太理解这个参数 |
还有很多,先写到这里吧。 后面慢慢补充~