霍夫变换
定义:
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.几何形状包括圆,椭圆,直线等等.
直线方程:
直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距;
霍夫变换原理:
设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。 同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。
当直线与x轴垂直,直角的正切值无穷大,故此直线不存在斜率,所以实际应用中,是采用参数方程p=xcos(θ)+ysin(θ)。这样,图像平面上的一个点就对应到参数p—θ平面上的一条曲线上。
hough_lines(RegionIn : : AngleResolution, Threshold, AngleGap, DistGap :Angle, Dist)
RegionIn:二值化边缘图像
AngleResolution:角度的步进,步进大小为AngleResolution/1
Threshold:要寻找的直线的阈值
AngleGap:定义Hough图像中的点的邻域范围,从而确定局部最大值。
DistGap:定义Hough图像中的点的邻域范围,从而确定局部最大值。
Angle:找到的直线的角度
Dist:找到的直线到圆点的距离
程序实现
读取一张图像
read_image (Image, ‘矩形’)
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)\
剪切指定矩形的图像
rectangle1_domain (Image, ImageReduced, 76, 120.938, 464.875, 966.813)
寻找图像中矩形的边缘
sobel_amp (ImageReduced, EdgeAmplitude, ‘thin_sum_abs’, 3)
设置输出对象颜色
dev_set_color (‘red’)
对上面获取的边缘图像进行阈值操作
threshold (EdgeAmplitude, Region, 10, 255)
对阈值后的区域进行连通处理
connection (Region, ConnectedRegions)
根据面积过滤出图像中外矩形区域
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 2500, 99999)
霍夫变换来寻找区域中的直线
hough_lines (SelectedRegions, 4, 50, 5, 5, Angle, Dist)
设置输出对象的颜色
dev_set_color (‘blue’)
将直线转换为区域
gen_region_hline (Regions, Angle, Dist)
根据方向特征来过滤想要的直线
select_shape (Regions, SelectedRegions1, ‘orientation’, ‘and’, 1.5, 1.6)
select_shape (Regions, SelectedRegions2, ‘orientation’, ‘and’, 0, 0.1)
显示图像和结果直线
dev_display (Image)
dev_display (SelectedRegions1)
dev_display (SelectedRegions2)
#程序执行结果