转战Halcon日记【8】-- 极坐标转换

我们经常在项目里面遇到一些圆环形状的产品,直接操作可能不太好转换,所以引入极坐标,可以理解成把圆形的区域拉成矩形的区域

我们举一个例子来看

图片

 

目标图像

 

上代码

*读取图像
read_image (Image1, 'C:/Users/guopei/Desktop/1.jpg')
*转为灰度图
rgb1_to_gray(Image1, GrayImage)
*二值化
binary_threshold(GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
*打散
connection(Region, ConnectedRegions)
*筛选
select_shape(ConnectedRegions, SelectedRegions, 'outer_radius', 'and', 200, 300)
*填充
fill_up(SelectedRegions, RegionFillUp)
*圆形腐蚀
erosion_circle(RegionFillUp, RegionErosion, 7.5)
*区域转换
shape_trans(RegionErosion, RegionTrans, 'outer_circle')
*求最小外接圆
smallest_circle(RegionTrans, Row, Column, Radius)
*获取区域
reduce_domain(GrayImage, RegionTrans, ImageReduced)
*生成一个比外接圆小一点的圆形区域
gen_circle(Circle, Row, Column, Radius-80)
*两个圆形区域做差,得到一个环形区域
difference(RegionTrans, Circle, RegionDifference)
*获取环形区域图像
reduce_domain(ImageReduced, RegionDifference, ImageReduced1)

*设置极坐标转后的图片的宽
WidthPolar := 800
*设置极坐标转后的图片的的高
HeightPolar := 80-10

*进行极坐标转换
*第一个参数是需要进行极坐标转换的图片,第二个参数是极坐标转换后的图片
*第三个参数是row坐标,需要转换的图片的ROW坐标
*第四个参数是Column坐标,需要转换的图片的Column坐标
*第五个参数是开始的角度,第六个参数是结束的角度
*第七个参数是开始的半径,第八个参数是结束的半斤
*第九个参数是转换后图片的宽,第十个参数是转换后图片的高
*第十一个参数是插值方式
polar_trans_image_ext (Image1, PolarTransImage, Row, Column, rad(360), 0, Radius, Radius- 80, WidthPolar, HeightPolar, 'bilinear')

我们来缕一缕整个实现的逻辑

1.首先找到硬币的区域,以及它的中心点的坐标

实现的方式就是先灰度化,二值化,然后筛选和转换区域,得到区域和中心坐标

                           

 

2.创建一个比这个圆形区域半径小的一个圆形区域,去和这个圆形做差,得到一个新的环形区域

      

3.我们就对这个环形的区域做极坐标转换

   

整个界面的截图来一个

至此,salute!!

posted @ 2022-07-02 17:18  gammalog  阅读(908)  评论(1编辑  收藏  举报