当前位置: 首页 > 知识库问答 >
问题:

将图像从笛卡尔转换为极地-肢体变暗

尤祖鹤
2023-03-14
import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('C:\\Users\\not my user name\\Desktop\\20140505_124500_4096_HMIIC.jpg', 0)

norm_image = cv2.normalize(img, dst=None, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)

plt.imshow(norm_image, cmap='afmhot', interpolation='bicubic')
plt.xticks([]), plt.yticks([])
plt.show()

我正在使用的太阳能光盘:

我想知道是否有一种简单的方法将图像从笛卡尔转换为极性?

如以下示例:

或者像这样的例子:

出于某种原因,我在MATLAB中找到了许多示例,但在Python中还没有找到。我一直在从opencv看这个,但我不完全确定这是我想要的,因为我想保持原始图像/数组的大小。我知道转换为极坐标会“破坏”图像,但这很好,我想做的主要事情是测量太阳圆盘从中心到边缘的强度,绘制强度与半径的函数,以便我可以测量肢体变暗。

共有3个答案

郑嘉悦
2023-03-14

Scikit-image还提供了这些转换。请参阅skimage.transform.warp_polar。

注意,这确实引入了像素强度的插值。

另请参阅极性演示以了解使用示例。

齐典
2023-03-14

您可以在终端中使用ImageMagick在命令行上进行极性笛卡尔失真-它安装在大多数Linux发行版上,适用于macOS和Windows:

convert sun.jpg +distort DePolar 0 result.jpg

这里有安东尼·蒂森的一些很好的提示和技巧。

赫连冠玉
2023-03-14

OpenCV具有将图像从笛卡尔形式转换为极坐标形式的功能,反之亦然。由于需要将图像转换为极坐标形式,因此可以采用以下方法

代码:

import cv2
import numpy as np
 
source = cv2.imread('image_path', 1)

#--- ensure image is of the type float ---
img = source.astype(np.float32)
 
#--- the following holds the square root of the sum of squares of the image dimensions ---
#--- this is done so that the entire width/height of the original image is used to express the complete circular range of the resulting polar image ---
value = np.sqrt(((img.shape[0]/2.0)**2.0)+((img.shape[1]/2.0)**2.0))
 
polar_image = cv2.linearPolar(img,(img.shape[0]/2, img.shape[1]/2), value, cv2.WARP_FILL_OUTLIERS)
 
polar_image = polar_image.astype(np.uint8)
cv2.imshow("Polar Image", polar_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

 类似资料:
  • 我正在尝试将一个包含许多圆心相同的圆的图像从笛卡尔坐标转换为极坐标(这样新图像将是圆,但是线,而不是圆,请参见下图),使用以下代码可以很好地解决这一问题: 问题是,我不明白为什么它会起作用?(显然这不是我的代码),我的意思是,当我使用函数cart2pol时,我甚至没有使用图像,它只是一些由meshgrid函数生成的向量x和y。。另一个问题是,我想以某种方式得到一个新图像(不仅仅是能够用wrap函数

  • 我试图对下面的第一幅图像进行极坐标变换,最后得到第二幅。然而,我的结果是第三张图片。我有一种感觉,这与我选择的“原产地”有关,但我不确定。

  • 我想知道是否有人帮助我理解如何将顶部图像转换为底部图像。以下链接中提供了这些图像。顶部图像采用笛卡尔坐标。底部图像是极坐标中的转换图像

  • 我正在尝试将极坐标的图像转换为笛卡尔坐标。 将图像转换为极坐标的示例显式执行-想要一个光滑的矩阵方法 我原以为使用上述方法是小菜一碟,但事实并非如此!!如果有人发现我的代码有错误,请告诉我! 我发现非常奇怪的是,当我改变phi时,它会做出根本性的改变,而不是以我期望的方式! 干杯

  • 我试图将图像从极坐标转换为笛卡尔坐标,但在应用公式后,我得到了浮点坐标(r和teta),我不知道如何使用x和y的浮点来表示空间中的点。可能有一种方法可以将它们转换为整数,并仍然保留分布,但我不知道如何。我知道OpenCV中有像warpPolar这样的函数,但我想自己实现它。任何想法都会有帮助:) 这是我的代码:

  • 我无法将[R,theta]格式的图像转换为[x,y] 我正在尝试使用interp2。 然后我会: 最后: 但图像不正确! 以下是输入图像(图1)(带R,θ几何): 我想在笛卡尔网格上重建它(使用interp2),所以它看起来像这样(图2): 极坐标图像(图1)中的所有数据应映射到笛卡尔图像的红色部分(图2)。