python图像的几何运算_python中图像的几何扭曲

本文探讨如何使用Python的scikit-image库进行图像的几何变换,特别是沿着特定曲线校正图像,以实现图像的拉直效果。示例中通过创建同心圆并尝试将其校正为平行线,但遇到问题。作者展示了代码示例,包括源图像坐标和目标坐标,以及使用ProjectiveTransform()函数进行变换的过程,但结果未达到预期。寻求更优雅的解决方案,不仅限于scikit-image。
摘要由CSDN通过智能技术生成

我想用python对图像执行几何变换,沿着给定的曲线“拉直”或校正图像。似乎scikit图像ProjectiveTransform()和{}对于这一点非常好,但是文档很少。我遵循了文档here,但是我不能让它在一个示例案例中正常工作。在

这里有一个例子:我将创建一个有两个同心圆的图像,目标是校正这些圆的四分之一,这样得到的图像是两条平行线。以下是示例数据:import numpy as np

a = np.zeros((500, 500))

# create two concentric circles with a thickness of a few pixels:

for i in range(500):

for j in range(500):

r = np.sqrt((i - 250)**2 + (j - 250)**2)

if r > 50 and r < 52:

a[i, j] = 10

if r > 100 and r < 102:

a[i, j] = 10

# now create the coordinates of the control points in the original image:

(x0, y0) = (250, 250)

r = 30 # inner circle

x = np.linspace(250 - r, 250, 50)

y = np.sqrt(r ** 2 - (x - x0) ** 2) + x0

r2 = 120 # outer circle

x2 = np.linspace(250 - r2, 250, 50)

y2 = np.sqrt(r2 ** 2 - (x2 - x0) ** 2) + x0

dst = np.concatenate((np.array([x, y]).T, np.array([x2, y2]).T))

这可以绘制出来,例如:

^{pr2}$

pspvE.png

所以我的目标是校正由红色控制点给出的象限图像。(在本例中,这与笛卡尔到极坐标变换相同。)使用文档示例中的scikit图像,我完成了:# create corresponding coordinates for control points in final image:

xi = np.linspace(0, 100, 50)

yi = np.zeros(50)

xi2 = xi

yi2 = yi + (r2 - r)

src = np.concatenate((np.array([xi, yi]).T, np.array([xi2, yi2]).T))

# transform image

from skimage import transform, data

tform3 = transform.ProjectiveTransform()

tform3.estimate(src, dst)

warped = transform.warp(a, tform3)

我原以为这幅warped图像会显示两条平行线,但是我得到了:

AzmZ8.png

我做错什么了?在

注意,虽然在本例中是笛卡尔到极坐标的变换,但在最一般的情况下,我要找的是从任意曲线的变换。如果有人知道更好的方法使用其他软件包,请告诉我。我可以通过使用ndimage.map_coordinates来解决这个问题,但是我正在寻找更优雅的方法。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值