一、高中数学知识,笛卡尔坐标系和极坐标系可以互相转换。引用到图像处理上面,当我们需要分析圆环上面的缺陷或者字符时,可以通过极坐标变换,把圆环区域转换成矩形区域,图像处理完成后,再通过反极坐标变换转换为原来的圆环中。
二、算子
在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、POLAR_TRANS_IMAGE_EXT算子用法与参数剖析
算子原型:
polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )
参数说明:
Image (input_object)(多通道)图像(-array)→对象(byte * / int2 * / uint2 * / real *)*允许计算设备
输入图像。
PolarTransImage(output_object)(多通道)图像(-array)→对象(字节/ int2 / uint2 /实数)
输出图像。
Row(input_control)编号→(实数/整数)
圆弧中心的行坐标。
默认值:256
建议值:0、16、32、64、128、240、256、480、512
Column(input_control)号→(实数/整数)
圆弧中心的列坐标。
默认值:256
建议值:0、16、32、64、128、256、320、512、640
AngleStart(input_control)数字→(实数)
要映射到输出图像第一列的射线角度。
默认值:0.0
建议值:0.0,0.78539816,1.57079632,3.141592654,6.2831853,12.566370616
AngleEnd(input_control)数字→(实数)
要映射到输出图像最后一列的射线角度。
默认值:6.2831853
建议值:0.0,0.78539816,1.57079632,3.141592654,6.2831853,12.566370616
RadiusStart(input_control)数字→(实数/整数)
要映射到输出图像第一行的圆的半径。
默认值:0
建议值:0、16、32、64、100、128、256、512
典型值范围:0≤RadiusStart
RadiusEnd(input_control)数字→(实数/整数)
要映射到输出图像最后一行的圆的半径。
默认值:100
建议值:0、16、32、64、100、128、256、512
典型值范围:0≤RadiusEnd
Width(input_control)数→(整数)
输出图像的宽度。
默认值:512
建议值:256、320、512、640、800、1024
典型值范围:0≤宽度≤32767
Height(input_control)数→(整数)
输出图像的高度。
默认值:512
建议值:240、256、480、512、600、1024
典型值范围:0≤高度≤32767
Interpolation (input_control)字符串→(string)
内插法进行变换。
默认值:“ nearest_neighbor”
值列表:‘bilinear’,‘nearest_neighbor’

2、POLAR_TRANS_REGION_INV算子用法与参数剖析
算子原型:
polar_trans_image_inv(PolarImage : XYTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )
参数说明:
PolarImage(input_object)(multichannel-)image(-array)→object(byte * / int2 * / uint2 * / real *)*允许用于计算设备
输入图像。
XYTransImage(output_object)(多通道)图像(-array)→对象(字节/ int2 / uint2 /实数)
输出图像。
Row(input_control)编号→(实数/整数)
圆弧中心的行坐标。
默认值:256
建议值:0、16、32、64、128、240、256、480、512
典型值范围:0≤行≤32767
Column(input_control)号→(实数/整数)
圆弧中心的列坐标。
默认值:256
建议值:0、16、32、64、128、256、320、512、640
典型值范围:0≤列≤32767
AngleStart(input_control)数字→(实数)
将输入图像的第一列映射到的射线角度。
默认值:0.0
建议值:0.0,0.78539816,1.57079632,3.141592654,6.2831853
AngleEnd(input_control)数字→(实数)
将输入图像的最后一列映射到的射线角度。
默认值:6.2831853
建议值:0.0,0.78539816,1.57079632,3.141592654,6.2831853
RadiusStart(input_control)数字→(实数/整数)
要将输入图像的第一行映射到的圆的半径。
默认值:0
建议值:0、16、32、64、100、128、256、512
典型值范围:0≤RadiusStart
RadiusEnd(input_control)数字→(实数/整数)
要将输入图像的最后一行映射到的圆的半径。
默认值:100
建议值:0、16、32、64、100、128、256、512
典型值范围:0≤RadiusEnd
Width(input_control)数→(整数)
输出图像的宽度。
默认值:512
建议值:256、320、512、640、800、1024
典型值范围:0≤宽度≤32767
Height(input_control)数→(整数)
输出图像的高度。
默认值:512
建议值:240、256、480、512、600、1024
典型值范围:0≤高度≤32767
Interpolation (input_control)字符串→(string)
内插法进行变换。
默认值:“ nearest_neighbor”
值列表:‘bilinear’,‘nearest_neighbor’
三、源码演示

dev_update_off ()
get_system ('clip_region', Information)
set_system ('clip_region', 'true')
* read_image (Image, 'circular_barcode')
read_image (Image, 'C:/Users/Dell/Desktop/极坐标变换/circular_barcode.png')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
dev_set_colored (12)
dev_display (Image)
stop ()
* 分割包含条形码的CD上的环。
threshold (Image, Region, 0, 100)
closing_circle (Region, Region, 3.5)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, Ring, ['width','height'], 'and', [550,550], [750,750])
shape_trans (Ring, OuterCircle, 'outer_circle')
complement (Ring, RegionComplement)
connection (RegionComplement, ConnectedRegions)
select_shape (ConnectedRegions, InnerCircle, ['width','height'], 'and', [450,450], [650,650])
*提取并生成圆环区域外圆,内圆
* 确定包含条形码的环的参数。
smallest_circle (Ring, Row, Column, OuterRadius)
smallest_circle (InnerCircle, InnerRow, InnerColumn, InnerRadius)
dev_set_color ('green')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_display (Image)
dev_display (OuterCircle)
dev_display (InnerCircle)
stop ()
* 现在读条形码。这是通过计算包含条形码的图像中圆环的极坐标变换来实现的。
* WidthPolar := 1440
WidthPolar := (OuterRadius - 5)*2*3.14
HeightPolar := round(OuterRadius - InnerRadius - 10)
*极坐标变换(中心Row, Column,用圆环的圆心坐标。起始角度是0到360度。起始半径分别是圆环内圆的半径和外圆的半径。
*宽高分别是圆环外圆的周长和外圆半径减去内圆半径的值)
polar_trans_image_ext (Image, PolarTransImage, Row, Column,0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, 'bilinear')
*逆向转换回圆环图像,以查看此函数效果
polar_trans_image_inv (PolarTransImage, XYTransImage, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5,  Width, Height, 'nearest_neighbor')
invert_image (PolarTransImage, ImageInvert)
* 由于条形码区域相当平坦,因此图像的高度增加了一倍。
zoom_image_factor (ImageInvert, ImageZoomed, 1, 2, 'weighted')
get_image_size (ImageZoomed, Width1, Height1)
dev_resize_window_fit_size (0, 0, Width1, Height1, -1, -1)
dev_display (ImageZoomed)
stop()
create_bar_code_model ([], [], BarCodeHandle)
* 条形比较小,对比度也低;因此,阈值从0.05提高到0.1。
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.3)
find_bar_code (ImageZoomed, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
clear_bar_code_model (BarCodeHandle)
dev_set_window_extents (-1, -1, WidthPolar / 2, HeightPolar)
dev_display (ImageZoomed)
dev_display (SymbolRegions)
set_system ('clip_region', Information)
disp_message (WindowHandle, DecodedDataStrings, 'image', 10, 180, 'black', 'true')
stop ()
* 将条码区域转换回原始图像并显示。
zoom_region (SymbolRegions, SymbolRegions, 1, 0.5)
polar_trans_region_inv (SymbolRegions, CodeRegionCircular, Row, Column, 0, rad(360), InnerRadius + 5, OuterRadius - 5, WidthPolar, HeightPolar, Width, Height, 'nearest_neighbor')
dev_set_window_extents (-1, -1, Width / 2, Height / 2)
dev_display (Image)
dev_display (CodeRegionCircular)
disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')

原图

极坐标变换后图

反极坐标变换后的图

极坐标变换后条码识别图

条码识别区域,反极坐标变换到原图

极坐标变换原理和用法相关推荐

  1. halcon 圆环类缺陷检测的一种方法(极坐标变换法)

    目录 简介 极坐标变换 定义 原理 Halcon中的极坐标变换 1.polar_trans_image_ext算子用法与参数剖析 2.polar_trans_region_inv算子用法与参数剖析 圆 ...

  2. 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现

    在医学图像处理,尤其是在处理血管断层扫描类(如OCT.IVUS等)图像的过程中,不可避免的会使用到极坐标变换,也即是我们通常所说的"方转圆".同样,我们可以使用极坐标变换的反变换实 ...

  3. Nmap扫描原理与用法

    1     Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字N ...

  4. 脊波变换 matlab,浅析curvelet变换原理与理解 - 全文

    Curvelet变换是基于傅里叶变换和小波变换的一种改进,其特点是有高度的各向异性,具有良好表达图形沿边缘的信息的能力,对于恢复形状的沿边缘的主要结构和抑制周边噪声有其特有优势. 其过程为 这和传统的 ...

  5. Python: PS 滤镜-- 极坐标变换到平面坐标

    本文用 Python 实现 PS 中的一种滤镜 极坐标变换到平面坐标,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/de ...

  6. Photoshop和Halcon中的极坐标变换

    极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...

  7. 教程 | OpenCV4中的极坐标变换

    极坐标变换就是将图像在直角坐标系与极坐标系中互相变换,形式如图3-26所示,它可以将一圆形图像变换成一个矩形图像,常用于处理钟表.圆盘等图像.圆形图案边缘上的文字经过及坐标变换后可以垂直的排列在新图像 ...

  8. 【OpenCV 4开发详解】图像极坐标变换

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. mysql 实时聚合分析,mysql累积聚合原理与用法实例分析

    本文实例讲述了mysql累积聚合原理与用法.分享给大家供大家参考,具体如下: 累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两 ...

最新文章

  1. java图书分析echarts_Echarts后台Java解析
  2. javascript内置顶层函数
  3. NetDevOps — NETCONF 协议
  4. python小白逆袭大神课程心得_Python小白逆袭大神学习心得
  5. ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录
  6. 【算法分析与设计】图的着色问题
  7. 防数据泄密:是否应实施“多重认证”?
  8. 0基础学python做什么工作好-转行零基础该如何学习python?很庆幸,三年前的我选对了...
  9. Vivado Launching SDK Importing Hardware Specification error的解决方法
  10. 【学堂在线数据挖掘:理论方法笔记】第八天(4.2)
  11. java属性和普通方法
  12. 关于Javascript, php的web公开课笔记
  13. 打造黑苹果(六)设置无线网卡上网
  14. 菜鸟渗透日记35---python渗透测试编程之身份认证攻击1-密码字典
  15. 浅显易懂描述傅立叶级数和傅立叶变换的关系
  16. IObit Driver Booster 无法更新驱动的解决办法
  17. dubbo空指针异常
  18. 友盟推送 php,laravel5.4+umeng(友盟)集成app消息推送功能
  19. 用JQuery写一个斗地主发牌器
  20. java计算机毕业设计家庭园艺服务平台源码+数据库+lw文档+系统

热门文章

  1. UEFI Specification 第一章 引言(基于UEFI_Spec_2_9_2021_03_18)
  2. python3.7 win10 64位系统下用pyinstaller打包的程序在32位系统下无法运行
  3. MGRE环境下的OSPF (实验超详解)
  4. 表分区的几种类型及操作方法
  5. 大数据技术之Flume —— (1)一文入门学习Flume
  6. 小武学fpgaStep1
  7. lowess和loess方法
  8. 【京东电商网站主界面仿写——HTML第二部分】
  9. 从专升本到互联网大厂-我的2021
  10. 企业技术中心申报条件