В настоящее время я пытаюсь выполнить преобразование полярного изображения в декартово координатное изображение, чтобы отобразить необработанное изображение сонара в «веерном отображении».
Изначально у меня есть образ массива Numpy типа np.float64
, который можно увидеть ниже:
После некоторого поиска я наткнулся на этот пост StackOverflow преобразовать изображение из полярного в декартово в 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 ранее, и если да, могу ли я спросить, какое рекомендуемое решение для устранения этой проблемы?
Если эта проблема не будет решена в ближайшее время, у меня есть альтернативная резервная копия с использованием функции cv::remap
OpenCV (https://docs.opencv.org/4.1.2/da/d54/group__imgproc__transform.html#ga5bb5a1fea74ea38e1a5445ca803ff121). Однако проблема с этим заключается в том, что я не уверен, какие массивы отображения (т.е. map_x
и map_y
) использовать для выполнения преобразования Polar- > Cartesian, используя матрицу отображения, которая реализует уравнения преобразования ниже:
r = polar_distances(raw_img)
x = r * cos(theta)
y = r * sin(theta)
похоже, это не сработало, и вместо этого также были выброшены ошибки из OpenCV.
Любая помощь и понимание этого вопроса очень ценятся. Спасибо!
- НикС
РЕДАКТИРОВАТЬ Я также попробовал другой пример изображения, и он по-прежнему показывает аналогичную проблему. Итак, сначала я импортировал изображение в 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 в Wand Image, который мне не хватает? Если да, то что это будет и каков предлагаемый метод для этого?
Пожалуйста, имейте в виду, что я подчеркиваю, что преобразование Numpy в изображение Wand очень важно, необработанные изображения сонара хранятся в виде двоичных данных, поэтому необходимо использовать Numpy для преобразования их в правильные изображения.