halcon极坐标变换角度设置问题

Halcon极坐标转换,图文解说,含点坐标的转换 在halcon中对应的算子 (1)极坐标的展开:polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : ) (2)极坐标的逆变换:polar_trans_image_inv(PolarImage : XYTransImage : Row, Column, AngleStart, Angl 阅读详情

在别的网站看到一个案例:需要识别环状物体上的字符(OCR),要用到极坐标变换。

 按照最简单的模式,原始检测方案如下:

 read_image (Image, 'H:/学习笔记/halcon笔记/1.jpg')
    *获取图片尺寸,极坐标变换成原始图片大小
    get_image_size (Image, Width, Height)
    *获取圆环物体区域(包含字符),抠图
    threshold (Image, Region, 0, 100)
    connection (Region, ConnectedRegions)
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
    fill_up_shape (SelectedRegions, RegionFillUp, 'area', 1, 10000)  
    reduce_domain (Image, RegionFillUp, ImageReduced)
      
    *求外圆圆心,半径
    gen_contour_region_xld (RegionFillUp, OuterCont, 'border')
    fit_circle_contour_xld (OuterCont, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    *求内圆圆心,半径
    fill_up (RegionFillUp, RegionFillUp1)
    difference (RegionFillUp1, RegionFillUp, RegionDifference)
    gen_contour_region_xld (RegionDifference, InnerCont, 'border')
    fit_circle_contour_xld (InnerCont, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi1, EndPhi1, PointOrder1)
    *极坐标变换
    polar_trans_image_ext (ImageReduced, PolarTransImage, Row, Column, 0, rad(360), Radius, Radius1, Width, Height, 'nearest_neighbor')
    *
    mirror_image (PolarTransImage, ImageMirror1, 'column')
    *下一步:OCR字符识别

但是这个方案有一个问题:变换的初始角度默认为0,最终角度默认为360度;如果不特别设置角度,变换后的图片中,字符可能不是连续的(被切割为两部分);如果想完整识别字符,则需要字符不被切割分开。

最终呈现的效果如下:

优化方案:

重新设置极坐标变换的起始、终止角度:01、求字符区域的外接旋转矩形,求矩形的四个顶点。02、矩形同一边的2个顶点与物体外接圆圆心连线,计算线线之间夹角。03、以夹角作为起始角度,360+夹角作为终止角度。

以下为优化后的代码:

    read_image (Image, 'H:/BEGINNER/学习笔记1.jpg')
    *获取图片尺寸,极坐标变换成原始图片大小
    get_image_size (Image, Width, Height)
    *获取圆环物体区域(包含字符),抠图
    threshold (Image, Region, 0, 100)
    connection (Region, ConnectedRegions)
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
    fill_up_shape (SelectedRegions, RegionFillUp, 'area', 1, 10000)  
    reduce_domain (Image, RegionFillUp, ImageReduced)
      
    *求外圆圆心,半径
    gen_contour_region_xld (RegionFillUp, OuterCont, 'border')
    fit_circle_contour_xld (OuterCont, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    *求内圆圆心,半径
    fill_up (RegionFillUp, RegionFillUp1)
    difference (RegionFillUp1, RegionFillUp, RegionDifference)
    gen_contour_region_xld (RegionDifference, InnerCont, 'border')
    fit_circle_contour_xld (InnerCont, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi1, EndPhi1, PointOrder1)
   
   *抠出字符区域,求此区域的角度
    threshold (ImageReduced, Region1, 100, 255)
    connection (Region1, ConnectedRegions1)
    select_shape (ConnectedRegions1, SelectedRegions1, 'width', 'and', 6, 12)
    select_shape (SelectedRegions1, SelectedRegions2, 'area', 'and', 16, 99999)
    closing_rectangle1 (SelectedRegions2, RegionClosing, 100,100)
    union1 (RegionClosing, RegionUnion)
    *区域转化为旋转矩形
    shape_trans (RegionUnion, RegionTrans, 'rectangle2')
    *得到外接旋转矩形的坐标,半边长
    smallest_rectangle2 (RegionTrans, Row2, Column2, Phi, Length1, Length2)
    dev_set_draw ('margin')
    *求矩形的四个顶点坐标
    if(abs(deg(Phi))>45)
        Phi:=rad(deg(Phi)-90*(Phi/abs(Phi)))
        Tmp:=Length1
        Length1:=Length2
        Length2:=Tmp
    endif
    tuple_sin (Phi, Sin)
    tuple_cos (Phi, Cos)
    *左上角
    TopLeft_X := -Length1*Cos - Length2*Sin
    TopLeft_Y := -Length1*Sin + Length2*Cos
    TopLeft_Row := Row2 - TopLeft_Y 
    TopLeft_Col := Column2 + TopLeft_X 
    gen_cross_contour_xld (Cross1, TopLeft_Row, TopLeft_Col, 30, 0.785398)
    *右上角
    TopRight_X := Length1*Cos - Length2*Sin
    TopRight_Y := Length1*Sin + Length2*Cos
    TopRight_Row := Row2 - TopRight_Y 
    TopRight_Col := Column2 + TopRight_X 
    gen_cross_contour_xld (Cross2, TopRight_Row, TopRight_Col, 30, 0.785398)
    *右下角
    LowerRight_X := Length1*Cos + Length2*Sin
    LowerRight_Y := Length1*Sin - Length2*Cos
    LowerRight_Row := Row2 - LowerRight_Y 
    LowerRight_Col := Column2 + LowerRight_X 
    gen_cross_contour_xld (Cross3, LowerRight_Row, LowerRight_Col, 30, 0.785398)
    *左下角
    LowerLeft_X := -Length1*Cos + Length2*Sin
    LowerLeft_Y := -Length1*Sin - Length2*Cos
    LowerLeft_Row := Row2 - LowerLeft_Y 
    LowerLeft_Col := Column2 + LowerLeft_X 
    gen_cross_contour_xld (Cross4, LowerLeft_Row, LowerLeft_Col, 30, 0.785398)
    *查看夹角效果   
    *dev_set_color ('blue')
    *gen_region_line (RegionLine1, Row, Column, TopRight_Row, TopRight_Col)
    *gen_region_line (RegionLine2, Row, Column, LowerRight_Row, LowerRight_Col)
   
    *得到四个顶点坐标后,取左(右)上左(右)下点,分别与大圆的圆心连线,求线线夹角
    angle_ll (Row, Column, TopRight_Row, TopRight_Col, Row, Column, LowerRight_Row, LowerRight_Col, Angle)
    tuple_deg (Angle, Deg)
   
    *极坐标变换
    polar_trans_image_ext (ImageReduced, PolarTransImage, Row, Column, rad(Deg), rad(360+Deg), Radius, Radius1, Width, Height, 'nearest_neighbor')
    *
    mirror_image (PolarTransImage, ImageMirror1, 'column')
    *下一步:OCR字符识别
   

最终效果如下图:

 下面附上另外3张图片,感兴趣的可以测试一下

 

 

 

 

OpenCV极坐标转换函数warpPolar的使用 将图像重新映射到极坐标或半对数极坐标空间,这个函数用于实现图像的极坐标变换。 使用以下变换来转换图像: dst(ρ,ϕ)=src(x,y) dst(\rho , \phi ) = src(x,y) dst(ρ,ϕ)=src(x,y) 此处: I⃗=(x−center.x,  y−center.y)ϕ=Kangle⋅angle(I⃗)ρ={Klin⋅magnitude(I⃗)defaultKlog⋅loge(magnitude(I⃗))if  semilog \begin{array}{l} \vec{I 阅读详情

相关推荐

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

圆环缺陷检测,极坐标变换,极坐标反变换,反极坐标变换,halcon缺陷检测,inspect_bottle_mouth.hdev,polar_trans_image_ext(针对图像),polar_trans_region(针对区域),polar_trans_contour_xld(针对XLD轮廓),polar_trans_image_inv(针对图像),polar_trans_region_inv(针对区域),polar_trans_contour_xld_inv(针对XLD轮廓)

优快云博客 1万+

Halcon 极坐标转换图像

极坐标转换

weixin_39354845的博客 1280

图像极坐标变换与反变换(Halcon + OpenCV)

基于OpenCV手动实现图像的极坐标变换

LucasZhang‘s Blog 4447

Halcon 极坐标变换

Halcon极坐标的展开:polar_trans_image_ext,极坐标的逆变换:polar_trans_image_inv

2202_75557553的博客 1299

Halcon极坐标变换实战:圆环缺陷检测的高效解决方案

本文深入探讨了Halcon极坐标变换法在圆环缺陷检测中的高效应用。通过核心算子polar_trans_image_ext和polar_trans_region_inv,将环形图像转换为矩形,简化了圆环类缺陷检测的流程,并提供了从圆心定位、动态阈值分割到结果映射的完整实战方案,有效解决了传统直角坐标系下的检测难题。

grpc6streamer的博客 608

Halcon极坐标变换实战:5步搞定圆环缺陷检测(附完整代码)

本文详细介绍了Halcon极坐标变换技术在圆环类缺陷检测中的实战应用。通过5个关键步骤,包括圆心定位、极坐标变换、缺陷特征提取等,结合polar_trans_image_ext和polar_trans_region_inv算子,实现高效准确的圆环形工件缺陷检测,并附完整代码示例。

weixin_33712987的博客 351

halcon中图像极坐标变换

1、极坐标系(polar coordinates)是指在平面内由极点、极轴和极径组成的坐标系。在平面上取定一点O,称为极点。从O出发引一条射线Ox,称为极轴。再取定一个单位长度,通常规定角度取逆时针方向为正。这样,平面上任一点P的位置就可以用线段OP的长度ρ以及从Ox到OP的角度θ来确定,有序数对(ρ,θ)就称为P点的极坐标,记为P(ρ,θ);ρ称为P点的极径,θ称为P点的极角。 2、极坐标系的...

m0_37706292的博客 5999

Halcon实战:5分钟搞定圆环缺陷检测(极坐标变换+动态阈值法)

本文详细介绍了如何利用Halcon的极坐标变换技术,将复杂的圆环检测区域转换为规整矩形图像,并结合动态阈值法高效实现圆环缺陷检测。通过实战案例解析了polar_trans_image_ext等核心算子的参数设置与完整流程,为工业视觉工程师提供了一套快速、稳定的解决方案,有效应对瓶口、垫圈等环形工件的检测难题。

yyy34的博客 263

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

点击上方“新机器视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文为优快云博主「小邢同学」的原创文章原文链接:https://blog.youkuaiyun.com/cashmood/java/article/details/1047095简介圆环类检测在我们日常的缺陷检测中经常遇到。比如玻璃瓶口的缺陷检测,硬币的缺陷检测,胶垫的缺陷检测…我们对于圆环检测不像对于矩形等物体的检测,检测区域...

weixin_39837207的博客 1442

Halcon如何便捷仿射变换,控制好Phi参数的选择?

*当Phi位于第二三象限时候为正常变换角度,超过这两个象限则需要翻转180°进行矫正 if (abs(Phi) > rad(90)) Phi := rad(180) + Phi endif 示例代码如下: dev_close_window () dev_open_window (0, 0, 480, 640, 'black', WindowHandle) dev_open_window (0, 490, 400, 200, 'black', WindowHandl...

NCUTer 2860

【C# + HALCON 机器视觉】HALCON经典算子:极坐标变换算子(polar_trans_image)在轮胎DOT码环形OCR识别中的实战应用

摘要:本文提出一种基于C#与HALCON的机器视觉解决方案,针对轮胎侧面DOT码的环形分布特点,利用极坐标变换技术实现高效准确的字符识别。系统首先通过HALCON的polar_trans_image算子将环形区域转换为矩形图像,再结合text_line_ocr进行字符识别,最终通过C#实现的MQTT客户端将识别结果上传至云端数据库。文中详细阐述了系统架构设计、图像预处理、极坐标变换、字符分割与识别等关键技术,并给出完整的代码实现。通过实际测试验证,系统在轮胎DOT码识别准确率达到99.2%,单帧处理时间小于

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1568

图像极坐标变换中的角度转换(用于相位相关对齐功能)

摘要: 极坐标变换后图像的角度计算需基于列坐标(Column),行坐标(Row)仅表示半径。核心公式:角度=Column×(2π/Width)(弧度)或Column×(360/Width)(度),Width为极坐标图像宽度。常见误区包括混淆Row/Column或使用固定比例,正确方法需动态计算。应用时通过Column值确定旋转角度(如Column=300,Width=1200对应90°旋转),确保图像对齐准确。关键原则:Column对应角度,Width决定比例,Row与角度无关。

weixin_45590420的博客 1075

Halcon入门笔记-(4)图像的极坐标变换

在halcon中对应的算子 (1)极坐标的展开:polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : ) (2)极坐标的逆变换:polar_trans_image_inv(...

Joke 3482

极坐标变换原理和用法

极坐标变换原理和用法

Douhaoyu的博客 4798

Halcon下商标的环形展开

Halcon下的环形展开,通过极坐标变换将直角坐标系映射到极坐标系,从而将环形物体插值成条形。

在安装之后使用labelme出现qtpy.PythonQtError:No Qt bindings could be found错误

我在base环境(python3.7)可成功安装和使用labelme,而在同py37版本和py36的虚拟环境中可安装labelme包,但在使用的时候出现报错,如下: 我尝试着去解决第一个错误提示,错误提示为:moduleNotFoundError:No module named ‘PySide’,结果掉入了一个无止无尽的坑,看到网上有朋友说这个只能在py27-py35才能安装,还有说需要VC+ 140等,他们说的这个解决方案只针对于这个缺包的描述,而我们仅仅只需要一个labelme,因此我直接对后面的错误

qq_33538651的博客 9815

Halcon极坐标变换在圆环缺陷检测中的实战应用与参数优化

本文深入探讨了Halcon极坐标变换在圆环缺陷检测中的核心应用。通过剖析polar_trans_image_ext等关键算子,详细阐述了如何将环形区域转换为矩形图像以简化检测流程。文章结合玻璃瓶口、金属硬币等工业案例,提供了从圆心定位、参数优化到结果反变换的完整实战方案,并分享了避免边界效应、优化动态阈值等关键调参技巧,为复杂圆环类产品的自动化视觉检测提供了高效可靠的解决思路。

night的博客 654

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1914

Halcon图像的极坐标变换

图像的极坐标变换图像的极坐标变换图像的极坐标变换

Major_S的博客 937

激光雷达接收芯片选型指南:APD、SiPM、SPAD阵列的优缺点对比

本文深入对比了激光雷达接收芯片APD、SiPM和SPAD阵列的核心技术原理与性能差异。APD作为线性模式工作的稳健选择,动态范围大;SiPM具备单光子探测和高增益优势;而SPAD阵列凭借像素级数字读出和集成TDC,在时间分辨率与系统集成度上领先。文章从灵敏度、时间精度、动态范围及系统成本等多维度剖析,为不同应用场景(如车载雷达、Flash LiDAR、消费电子)的芯片选型提供实战指南。

ik6789012的博客 656

华为路由器静态路由配置实战:从零搭建企业级网络环境(含常见错误排查)

本文以真实企业组网案例为基础,详细解析华为路由器静态路由的实战配置流程。内容涵盖从网络拓扑规划、IP地址分配到具体的`ip route-static`命令配置,并重点讲解了缺省路由、浮动路由等进阶应用。文章还提供了系统化的排错指南,帮助网络工程师规避回程路由缺失、子网掩码错误等常见问题,是掌握企业级网络搭建与维护的实用指南。

weixin_29313817的博客 89

HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷检测

auto_threshold 、select_obj ,自动阈值分割。 boundary提取区域边缘edges_sub_pix、segment_contours_xld、union_cocircular_contours_xld、length_xld、select_obj 、fit_circle_contour_xld 边界的提取、分割、合并、求长、选取、拟合。 polar_trans_image_ext极坐标变换polar_trans_region_inv反极坐标变换 mirror_region镜像

优快云博客 2701

get_ccopt系列命令介绍

get_ccopt_property:用来获取cts阶段,clock tree上所有的参数信息,可以通过get_ccopt_property –help *获取所有参数。get_ccopt_skew_group_delay:用来获取skew group的相关信息,可以通过筛选出特定条件下skew_group的参数,如skew_group下latency最长是多少;get_ccopt_clock_tree_source_groups:获取clock tree的source group名字;

芯冰乐 281
上一篇: halcon+C#联合编程涉及的面向过程与面向对象编写方式
programmingc_
博客等级 码龄6年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值