如何解释 skimage 方向以拉直图像?

数据挖掘 Python scikit-学习 计算机视觉
2022-02-21 15:01:23

我有一堆要拉直的图像,因此图像是水平的(长轴是水平的),但我不了解skimage 中regionprops 方法orientation的输出。如何将其转换为度数?输出角度的轴参考是多少?

这是 skimage 文档:

方向:浮动。第 0 轴(行)与具有与该区域相同的秒矩的椭圆长轴之间的角度,逆时针范围从 -pi/2 到 pi/2。

我的问题:给定方向,我如何计算旋转图像的角度以使主轴与 skimage 水平?

代码示例

基本上,该对象的主轴和主轴属于 pandas 数据帧的索引 1。对象的方向是-1.184075,应该属于主轴。

from skimage.measure import label, regionprops_table

# connected pixels of same label get assigned a value
label_img = label(binary_image_here)
props = regionprops_table(label_img, properties=('centroid',
                                             'bbox',
                                             'orientation',
                                             'major_axis_length',
                                             'minor_axis_length'))

df = pd.DataFrame(props)

在此处输入图像描述

1个回答

根据您提供的文档,方向以弧度为单位,逆时针方向从 -pi/2 到 pi/2 :

方向:浮动。第 0 轴(行)与具有与该区域相同的秒矩的椭圆长轴之间的角度,逆时针范围从 -pi/2 到 pi/2。

此外,正如regionpropos doc中所说,从 0.16.0 开始,他们在任何地方都使用“rc”坐标。他们说对于大多数计算,您可以通过简单的转换找到旧结果,但对于其他计算,它更复杂,例如方向:

例如,新方向是 π/2 加上旧方向。

这意味着获得所需角度的正确公式是这个:

angle_in_degrees = orientation * (180/np.pi) + 90 

方向是指图像上的这个角度: 在此处输入图像描述

现在:如果您希望您的主轴和第 0 轴对齐,则将图像旋转-angle_in_degrees

from skimage.transform import rotate
rotate(image, -angle_in_degrees, resize=True)