XLD相关
-
threshold_sub_pix(Image, Edges, Filter, alpha, Low, High)
根据阈值提取单通道图像的XLD轮廓,
当灰度值小于Low时直接拒绝,
当灰度值大于High时直接接受为边缘,
当灰度值在Low和High之间的时候,这个点与已经确认为边界的点相连接时,也成为轮廓上的点。 -
gen_contour_region_xld(Region, Contours, Mode)
提取区域的亚像素边缘。
Mode可选border, center, border_holes。
前两种的区别在于border以区域的外边界点为边缘点,center以区域的边界点的中心为边缘点,就最终提取的效果来看,border生成的边缘会靠外面一点。
图中红色区域是目标区域,白色轮廓线是使用border的效果,青色轮廓线是使用center的结果,而使用border_holes会导致区域中一些很小的孔洞也被圈出来,在这个例子中,其实是不需要的部分。
-
gen_contour+polygon_xld(Contour, Row, Col)
生成指定形态的亚像素轮廓。
Row和Col可以是Tuple,通过指定多个点,可以生成指定形状的轮廓,如果需要封闭,则首尾是相同的点。至少四个点可以生成一个封闭的三角形轮廓。 -
gen_parallel_contour_xld(Contours, ParallelContours, Mode, Distance)
根据指定的方式生成平行于原来的xld轮廓且距离为Distance的xld轮廓。
这里的Mode设置为regression_norla表示回归方式,针对任意的xld轮廓都能用;而gradient和contour_normal需要xld具有方向性,对于没有方向性的xld不适用。 -
paint_region(Region, Image, ImageResult, Grayval, Type)
overpaint_region(Image, Region, Grayval, Type)
这两个都是将图片的指定区域上色,虽然定义上写的是Grayval,但是其实他们不只是能处理灰度图像,针对三通道的图像,只要将Grayval给成一个Tuple,也是能够上色的。
有一点需要注意,图片是几通道的,Grayval就得是多长的数组,如果不对应的话,比如三通道图片只给一个value,就会出错。 -
area_center_xld和area_center_points_xld
分别是求取xld和xld点云的中心和面积。
xld和xld点云的区别在于:
例如一个由四个点围四边形,点云只会计算那四个点,而单纯的xld会考虑整个围起来图形去求面积 -
test_self_intersection_xld(XLD, CloseXLD, DoesIntersect)
判断xld是否自相交。
测试了一下,针对一下两种图像,分别是不相交和相交:
* 非自相交。虽然这是一个收尾点相同的封闭矩形,但是它不是自相交的。
gen_contour_polygon_xld(Contour, [0, 0, 10, 10, 0], [20, 50, 50, 20, 20])
* 自相交
gen_contour_polygon_xld(Contour, [5, 5, 10, 10, 4], [20, 50, 50, 20, 20])
-
获取xld相关属性的算子中,有一些针对自相交的xld没有意义:
orientation_xld:获取xld的方向,
circularity_xld:获取xld的圆度,
convexity_xld:获取xld的凸性,
compactness_xld:获取xld的紧密度,
diameter_xld: 求取xld上距离最远的两个点,
moments_xld:获取xld封闭区域的二阶矩 -
gen_ellipse_contour_xld(ContEllipse, Row, Column, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder, Resolution)
生成椭圆形xld,
中心点坐标(Row, Column),
长短半轴长:Radius1, Radius2,
长半轴相对于x轴正半轴旋转角度为Phi,
起始点和中心的连线相对于长半轴的旋转角度为StartPhi,
终止点和中心的连线相对于长半轴的旋转角度为EndPhi,
最近的两个点之间的距离为Resolution,
PointOrder规定了椭圆上点的排列方式,也就是椭圆要顺时针画还是逆时针画
前五个参数定了椭圆的形状和位置,后四个参数定了椭圆上点的多少 -
gen_polygons_xld(Contours, Polygons, Type, Alpha)
根据圆弧生成多边形,即用一个多边形来拟合这个圆弧。当Alpha越小时,这个多边形越接近圆弧 -
弧度转角度:deg
-
concat_obj(Objects1, Objects2, ObjectsConcat)
将两个对象结合在一起,可以用来结合之前我们创建的那些xld
# 图像运算
这部分以前已经看过一些了,对新的内容做一定补充。
1. 图像乘法可以用在利用0,1组成的掩膜图像与待处理图像相乘,来遮住图像指定的部位。
```
read_image(Image, '1')
get_image_size(Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 30, 255)
connection (Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 15000, 9999999)
complement(SelectedRegions, RegionComplement)
paint_region(SelectedRegions, GrayImage, ImageResult, 1, 'fill')
paint_region(RegionComplement, ImageResult, ImageResult2, 0, 'fill')
mult_image(GrayImage, ImageResult2, ImageResult1, 1, 0)
```
2. 图像除法可以用来校正非线性影响
这里面用到了一个gen_image_gray_ramp(ImageGrayRamp, Alpha, Beta, Mean, Row, Column, Width, Height)的算子,用来生成灰度斜坡图像,作为图像除法的除数。
这个图像的灰度分布应当类似于原图像。
这个算子生成的图像灰度根据下面的公式计算得出:
$$
ImageGrayRamp(r, c) = Alpha(r- row) + Beta(c - Column) + Mean
$$
3. 图像的位操作
算子以bit开头
4. 图像的仿射变换——平移,缩放,旋转(P149)
paint_gray(ImageSource, ImageDestination, MixedImage)
将图像覆盖到另一个图像上,这里是直接覆盖,不会做灰度的相加。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~