我正在尝试将图像从笛卡尔转换为极性,以便我可以解开图像,但是我遇到了运行时错误。如果您对视觉效果感到好奇,请参阅this example.
代码:
import scipy
import scipy.ndimage
import numpy as np
from math import *
import cv2
def logpolar(input):
# This takes a numpy array and returns it in Log-Polar coordinates.
coordinates = np.mgrid[0:max(input.shape[:])*2,0:360] # We create a cartesian array which will be used to compute log-polar coordinates.
log_r = 10**(coordinates[0,:]/(input.shape[0]*2.)*log10(input.shape[1])) # This contains a normalized logarithmic gradient
angle = 2.*pi*(coordinates[1,:]/360.) # This is a linear gradient going from 0 to 2*Pi
# Using scipy's map_coordinates(), we map the input array on the log-polar coordinate. Do not forget to center the coordinates!
lpinput = scipy.ndimage.interpolation.map_coordinates(input,(log_r*np.cos(angle)+input.shape[0]/2.,log_r*np.sin(angle)+input.shape[1]/2.),order=3,mode='constant')
# Returning log-normal...
return lpinput
# Load image
image = cv2.imread("test.jpg")
result = logpolar(image)
控制台中的错误消息:
Traceback (most recent call last): File "test.py", line 23, in <module> result = logpolar(image) File "test.py", line 15, in logpolar lpinput = scipy.ndimage.interpolation.map_coordinates(input,(log_r*np.cos(angle)+input.shape[0]/2.,log_r*np.sin(angle)+input.shape[1]/2.),order=3,mode='constant') File "/Library/Python/2.7/site-packages/scipy-0.13.0.dev_c31f167_20130415-py2.7-macosx-10.8-intel.egg/scipy/ndimage/interpolation.py", line 295, in map_coordinates raise RuntimeError('invalid shape for coordinate array') RuntimeError: invalid shape for coordinate array
答案 0 :(得分:1)
我的第一个猜测是你传递的是三维彩色图像。乍一看,我不认为你的代码可以解决这个问题。
我的猜测是基于您粘贴的错误,特别是 “坐标数组的形状无效” 当使用像这样的高维数组时,通常需要传递额外的参数来指定重复操作的轴,甚至有时它也不起作用。我没有在你的参数列表的末尾看到重复的额外整数,所以我认为你没有明确地处理这种情况,并且可能忘记在读取图像后检查你的数组维度。
很高兴它有所帮助:)