【参考】
- https://blog.csdn.net/LuohenYJ/article/details/114842373
- https://zhuanlan.zhihu.com/p/267898474
一、 极坐标
极坐标:通过长度和角度来表示点的位置的坐标系。
在平面上,取一点O称为极点,从O出发的水平射线OX称为极轴,然后我们就可以确定了一个极坐标系。
长度一般用ρ (rho)表示,角度一般用θ (theta)表示。在极坐标系中任何一点的坐标都可以用( ρ , θ ) 来表示。如下图所示:

其中θ ∈ [ 0 , 2 π ]

极坐标转为直角坐标的公式逆变换:

二、圆环展开为矩形推导
参考VisionPro的转换内容

确定theta和rho:
theta = angleResolution * w + angleStart
rho = OuterRadius - h
w和h对应矩形图像宽和高的索引;
极坐标转笛卡尔坐标:
x = x0 + rho * cos(theta)
y = y0 + rho * sin(theta)
(x0,0)原始圆环的中心坐标;
三、插值方法
1、最近邻插值
计算变换后的坐标在原图像中的位置(x,y),计算离开位置最近的整数坐标值,并以此对应的像素值作为目标点的像素值。

2、双线性插值
目标图像通过缩放系数,计算缩放后的坐标在原图像中的位置

首先,对 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQHIbhSW-1649065523379)(https://cdn.nlark.com/yuque/0/2022/svg/25959739/1649035327431-2c96071f-6f2b-4089-8efc-3148f1dd4592.svg#clientId=uc04f40f3-42a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u0f13eeed&margin=%5Bobject%20Object%5D&originHeight=15&originWidth=12&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ue0c02d86-4478-4e1e-8c2c-68e51908960&title=)] 轴进行像素插值:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1i5XDncf-1649065523379)(https://cdn.nlark.com/yuque/0/2022/svg/25959739/1649035327459-aa23adf7-5ff4-4a0e-a978-a90b8a9417a5.svg#clientId=uc04f40f3-42a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u85a223f7&margin=%5Bobject%20Object%5D&originHeight=50&originWidth=397&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u5f5ea6f8-2b10-40f7-bf3d-0b1fd8df061&title=)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nuCcnWjY-1649065523380)(https://cdn.nlark.com/yuque/0/2022/svg/25959739/1649035327411-aace42c1-1f40-44f9-9360-49b53a7bb127.svg#clientId=uc04f40f3-42a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uaae0f9c9&margin=%5Bobject%20Object%5D&originHeight=50&originWidth=397&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u4179505a-5490-46a3-a253-2106d841d05&title=)]
然后,对 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4c0OfHby-1649065523380)(https://cdn.nlark.com/yuque/0/2022/svg/25959739/1649035327447-5d9beb6d-fd11-46ef-9c74-e50306eedc23.svg#clientId=uc04f40f3-42a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u92f44e75&margin=%5Bobject%20Object%5D&originHeight=18&originWidth=10&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u29ee4eea-6175-43a6-853d-5a518f80eaa&title=)] 轴进行像素插值:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3acOVV5c-1649065523380)(https://cdn.nlark.com/yuque/0/2022/svg/25959739/1649035327618-55902b69-f872-4b56-b2a1-4f82ee9ac893.svg#clientId=uc04f40f3-42a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u061c3654&margin=%5Bobject%20Object%5D&originHeight=51&originWidth=396&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=uc336c0bd-5ce2-4548-bc7b-24ad10b8874&title=)]
暂时没有对双线性插值算法优化
四、测试
Opencv顺时针方向操作
输入图像

AngleStart: 0 AngleSpan: 360
最近邻插值结果

双线性插值结果

AngleStart: 30 AngleSpan: 270

AngleStart: -30 AngleSpan: 270
