【发布时间】:2012-04-13 00:38:16
【问题描述】:
我想将 Python 2d 数组/图像转换为极坐标,然后进行处理,然后将它们转换回笛卡尔坐标。以下是 ImajeJ Polar Transformer 插件的结果(在示例代码的同心圆上使用):
图像的数量和暗度非常大,所以我正在检查 openCV 是否有快速简单的方法来做到这一点。
我读过关于 cv. CartToPolar 和 PolarToCart 但我没有使用它。我更了解LogPolar,其中输入和输出是数组,您可以在其中设置中心、插值和反转(即CV_WARP_INVERSE_MAP)。有没有办法以类似的方式使用 CartToPolar/PolarToCart?
import numpy as np
import cv
#sample 2D array that featues concentric circles
circlesArr = np.ndarray((512,512),dtype=np.float32)
for i in range(10,600,10): cv.Circle(circlesArr,(256,256),i-10,np.random.randint(60,500),thickness=4)
#logpolar
lp = np.ndarray((512,512),dtype=np.float32)
cv.LogPolar(circlesArr,lp,(256,256),100,cv.CV_WARP_FILL_OUTLIERS)
#logpolar Inverse
lpinv = np.ndarray((512,512),dtype=np.float32)
cv.LogPolar(lp,lpinv,(256,256),100, cv.CV_WARP_INVERSE_MAP + cv.CV_WARP_FILL_OUTLIERS)
#display images
from scipy.misc import toimage
toimage(lp, mode="L").show()
toimage(lpinv, mode="L").show()
这适用于断层扫描 (CT) 工作流程,如果环形伪影显示为线条,则可以更轻松地过滤掉它们。
【问题讨论】:
标签: python image-processing opencv numpy