【发布时间】:2020-06-29 14:05:09
【问题描述】:
我目前正在尝试执行极坐标到笛卡尔坐标图像的转换,以将原始声纳图像显示为“扇形显示”。
最初我有一个np.float64 类型的 Numpy Array 图像,如下所示:
经过一番搜索,我发现了这篇 StackOverflow 帖子 Inverse transform an image from Polar to Cartesian in OpenCV 有一个非常相似的问题,其中发帖人似乎已经通过使用 Python Wand 库 (http://docs.wand-py.org/en/0.5.9/index.html) 解决了他/她的问题,特别是使用他们的一组失真函数。
但是,当我尝试使用 Wand 并读入图像时,我最终用 Wand 得到了下面的图像,它似乎比原始图像小。然而,奇怪的是img.size 给出的尺寸数字仍然与原始图像的形状相同。
这个转换的代码如下:
print(raw_img.shape)
wand_img = Image.from_array(raw_img.astype(np.uint8), channel_map="I") #=> (369, 256)
display(wand_img)
print("Current image size", wand_img.size) #=> "Current image size (369, 256)"
这绝对是一个很大的问题,因为 Wand 会自动给出错误的“粉丝形象”。以前是否有人熟悉 Wand 库的此类问题,如果是,请问有什么推荐的解决方案来解决此问题?
如果这个问题没有很快解决,我有一个使用 OpenCV 的 cv::remap 函数 (https://docs.opencv.org/4.1.2/da/d54/group__imgproc__transform.html#ga5bb5a1fea74ea38e1a5445ca803ff121) 的备用备份。然而,问题在于我不确定使用什么映射数组(即map_x 和map_y)来执行极坐标->笛卡尔变换,因为使用实现以下变换方程的映射矩阵:
r = polar_distances(raw_img)
x = r * cos(theta)
y = r * sin(theta)
似乎没有用,而是从 OpenCV 中抛出了错误。
非常感谢您对此问题的任何帮助和见解。谢谢!
- 尼克S
编辑我也尝试过另一个图像示例,但它仍然显示出类似的问题。所以首先,我使用 OpenCV 将图像导入 Python,使用以下代码行:
import matplotlib.pyplot as plt
from wand.image import Image
from wand.display import display
import cv2
img = cv2.imread("Test_Img.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.figure()
plt.imshow(img_rgb)
plt.show()
结果显示如下:
但是,当我继续尝试使用 Wand 打开 img_rgb 对象时,使用以下代码:
wand_img = Image.from_array(img_rgb)
display(img_rgb)
我得到的是以下结果。
我尝试直接在文件上使用wand.image.Image()打开图片,使用display()功能时可以正确显示图片,所以我相信安装上的魔杖库没有任何问题系统。
我是否需要将 numpy 转换为我缺少的 Wand Image 所需的步骤?如果是这样,它会是什么,建议的方法是什么?
请记住,我强调将 Numpy 转换为 Wand Image 非常重要,原始声纳图像存储为二进制数据,因此需要使用 Numpy 将它们转换为正确的图像。
【问题讨论】:
标签: python-3.x numpy opencv image-processing wand