点击上方“新机器视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文为CSDN博主「小邢同学」的原创文章
原文链接:https://blog.csdn.net/cashmood/java/article/details/1047095
简介
圆环类检测在我们日常的缺陷检测中经常遇到。比如玻璃瓶口的缺陷检测,硬币的缺陷检测,胶垫的缺陷检测…
我们对于圆环检测不像对于矩形等物体的检测,检测区域比较规整,便于我们使用形态学对区域进行筛选,但是圆环物品我们发现会出现一些问题,比如使用矩形形态学会对环形的边界处理产生影响等等。在这种情况下我们可以使用极坐标变换的方法,将环形转换成矩形进而对缺陷进行处理。
极坐标变换
定义
在图像处理中,尤其是在处理环形、圆形图像的过程中,会使用到极坐标变换。将方形图像转换成圆形,即“方转圆”。或者实现圆形转换成方形“圆转方”。
我们把圆形图像转换成方形图像的过程称为图像的极坐标变换;反之则为图像的反极坐标变换
原理
极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置。
首先,正常的图像都是在直角坐标系下的,可以看做一个二维平面。我们要对图像进行坐标变换,首先要把位置转换到新的坐标系,然后将值赋过去。
这里有两个值需要确定:1.位置 2.值。即变换后任一个像素的值与位置。
这里:变幻后的值不变。即求解变幻的位置关系式。
极坐标变换及其反变换的关键在于,根据极坐标变换前的图像确定极坐标变换后的图像上每个像素点的像素值。也即是找到“圆图”和“方图”间几何坐标的对应关系。
证明:
如上图所示,实现极坐标变换的关键即在于找到圆图上任一点P(i,j),在方图上对应的点p(m,n),然后通过插值算法实现圆图上所有像素点的赋值。
方图上,其行列数分别为M、N,方图上的每一列对应为圆图上的每条半径,半径方向存在着一个长度缩放因子delta_r = M/R,圆周方向被分为N等分,即角度因子为delta_t = 2π/N;
圆图上,图像坐标(i,j)和世界坐标(x,y)有着如下变换关系:x = j - R, y = R - i;
那么,图中P点半径长度为r = sqrt(xx + yy),角度theta = arctan(y/x);
圆图上点P在方图上对应行数为r/delta_r;
圆图上点P在方图上对应的列数n = thata/delta_t。
以上就是极坐标变换的基本原理,结合相应的插值算法,即可实现图像的极坐标变换。
Halcon中的极坐标变换
在halcon中极坐标变换算子:
polar_trans_image_ext(针对图像);polar_trans_region(针对区域);polar_trans_contour_xld(针对XLD轮廓)。
在halcon中反极坐标变换算子:
polar_trans_image_inv(针对图像);polar_trans_region_inv(针对区域);polar_trans_contour_xld_inv(针对XLD轮廓)。
1、pola