图像处理笔记(十六)

XLD相关

  1. threshold_sub_pix(Image, Edges, Filter, alpha, Low, High)
    根据阈值提取单通道图像的XLD轮廓,
    当灰度值小于Low时直接拒绝,
    当灰度值大于High时直接接受为边缘,
    当灰度值在Low和High之间的时候,这个点与已经确认为边界的点相连接时,也成为轮廓上的点。

  2. gen_contour_region_xld(Region, Contours, Mode)
    提取区域的亚像素边缘。
    Mode可选border, center, border_holes。
    前两种的区别在于border以区域的外边界点为边缘点,center以区域的边界点的中心为边缘点,就最终提取的效果来看,border生成的边缘会靠外面一点。

图中红色区域是目标区域,白色轮廓线是使用border的效果,青色轮廓线是使用center的结果,而使用border_holes会导致区域中一些很小的孔洞也被圈出来,在这个例子中,其实是不需要的部分。

  1. gen_contour+polygon_xld(Contour, Row, Col)
    生成指定形态的亚像素轮廓。
    Row和Col可以是Tuple,通过指定多个点,可以生成指定形状的轮廓,如果需要封闭,则首尾是相同的点。至少四个点可以生成一个封闭的三角形轮廓。

  2. gen_parallel_contour_xld(Contours, ParallelContours, Mode, Distance)
    根据指定的方式生成平行于原来的xld轮廓且距离为Distance的xld轮廓。
    这里的Mode设置为regression_norla表示回归方式,针对任意的xld轮廓都能用;而gradient和contour_normal需要xld具有方向性,对于没有方向性的xld不适用。

  3. paint_region(Region, Image, ImageResult, Grayval, Type)
    overpaint_region(Image, Region, Grayval, Type)
    这两个都是将图片的指定区域上色,虽然定义上写的是Grayval,但是其实他们不只是能处理灰度图像,针对三通道的图像,只要将Grayval给成一个Tuple,也是能够上色的。
    有一点需要注意,图片是几通道的,Grayval就得是多长的数组,如果不对应的话,比如三通道图片只给一个value,就会出错。

  4. area_center_xld和area_center_points_xld
    分别是求取xld和xld点云的中心和面积。
    xld和xld点云的区别在于:
    例如一个由四个点围四边形,点云只会计算那四个点,而单纯的xld会考虑整个围起来图形去求面积

  5. 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])
  1. 获取xld相关属性的算子中,有一些针对自相交的xld没有意义:
    orientation_xld:获取xld的方向,
    circularity_xld:获取xld的圆度,
    convexity_xld:获取xld的凸性,
    compactness_xld:获取xld的紧密度,
    diameter_xld: 求取xld上距离最远的两个点,
    moments_xld:获取xld封闭区域的二阶矩

  2. 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规定了椭圆上点的排列方式,也就是椭圆要顺时针画还是逆时针画
    前五个参数定了椭圆的形状和位置,后四个参数定了椭圆上点的多少

  3. gen_polygons_xld(Contours, Polygons, Type, Alpha)
    根据圆弧生成多边形,即用一个多边形来拟合这个圆弧。当Alpha越小时,这个多边形越接近圆弧

  4. 弧度转角度:deg

  5. 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)
将图像覆盖到另一个图像上,这里是直接覆盖,不会做灰度的相加。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
原文地址:https://www.cnblogs.com/yutou2016/p/11165657.html