如何使用scikit-image实现图像逆时针方向的极坐标变换
逆时针极坐标变换解决方案
scikit-image的warp_polar函数默认按顺时针方向执行极坐标变换,要实现你需要的逆时针方向变换,最高效的方案是直接对变换后的极坐标结果沿角度维度(水平方向)做翻转,该操作基于numpy数组运算,无额外精度损耗,执行速度极快。
修改后的完整代码
from matplotlib import pyplot as plt import matplotlib.image as mpimg import matplotlib.gridspec as gridspec from skimage.transform import warp_polar import cv2 import numpy as np testImg = cv2.cvtColor(mpimg.imread('clock.png'), cv2.COLOR_BGR2GRAY) pol = warp_polar(testImg, radius=min(testImg.shape)/2) # 水平翻转极坐标图像,将顺时针角度转为逆时针 pol = np.fliplr(pol) # 创建子图 gs = gridspec.GridSpec(1, 2) fig = plt.figure() ax1 = fig.add_subplot(gs[0, 0]) # 第0行第0列 ax1.imshow(testImg) ax1.set_title("原始图像") ax2 = fig.add_subplot(gs[0, 1]) # 第0行第1列 ax2.imshow(pol) ax2.set_title("逆时针极坐标变换结果") plt.show()
方案说明
warp_polar输出的极坐标图像,行维度对应半径长度,列维度对应角度值,默认按顺时针从0°到360°排列- 使用
np.fliplr()对极坐标图像做水平翻转,本质是直接反转角度维度的排布顺序,可一步实现顺时针到逆时针的转换,最终得到3、2、1、12、11、10……的预期数字序列 - 可选替代方案:如果不想修改极坐标输出结果,也可以在执行极坐标变换前对原图做水平翻转,两种方案效果完全一致,可根据使用场景灵活选择
内容的提问来源于stack exchange,提问作者Khashayar
相关产品推荐
相关产品推荐

