В настоящее время я пытаюсь выполнить преобразование полярного в декартово-координатное изображение, чтобы отобразить необработанное изображение сонара в «веерное отображение».
Изначально у меня есть Numpy изображение массива типа np.float64
, это можно увидеть ниже:
После некоторого поиска я наткнулся на этот пост StackOverflow Обратное преобразование изображения из Polar Декартову в 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)"
Это определенно весьма проблематично c, поскольку 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.
Любая помощь и понимание этой проблемы очень ценится. Спасибо!
- NickS
EDIT Я пробовал и на другом примере изображения, и он все еще показывает аналогичную проблему. Итак, во-первых, я импортировал изображение в Python с помощью OpenCV, используя следующие строки кода:
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()
, который в результате показал следующее отображение:
Однако, продолжая и пытаясь открыть объект img_rgb
с помощью Wand, используя следующий код:
wand_img = Image.from_array(img_rgb)
display(img_rgb)
Вместо этого я получаю следующий результат.
Я попытался открыть изображение, используя wand.image.Image()
непосредственно в файле, что позволяет правильно отображать изображение при использовании функции display()
, поэтому я считаю, что в установке библиотеки палочек нет ничего плохого.
Есть ли пропущенный шаг, который мне потребовался для преобразования numpy в изображение палочки, которое мне не хватает? Если это так, что бы это было и каков предлагаемый метод для этого?
Пожалуйста, имейте в виду, что я подчеркиваю, что преобразование Numpy в изображение жезла весьма важно, необработанные изображения сонара сохраняются в виде двоичных данных, поэтому необходимо использовать Numpy для преобразования их в правильные изображения.