1

画像を解読できるようにデカルト座標から極座標に画像を変換しようとしていますが、実行時エラーが発生します。これが視覚的にどのように見えるか興味がある場合は、この例を参照してください。

コード:

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)


コンソールのエラー メッセージ:

トレースバック (最新の呼び出しが最後):
  <module> 内のファイル「test.py」、23 行目
    結果 = 対数極(画像)
  ファイル "test.py"、15 行目、logpolar
    lpinput = scipy.ndimage.interpolation.map_coordinates(input,(log_r*np.cos(角度)+input.shape[0]/2.,log_r*np.sin(角度)+input.shape[1]/2. )、順序 = 3、モード = '定数')
  ファイル "/Library/Python/2.7/site-packages/scipy-0.13.0.dev_c31f167_20130415-py2.7-macosx-10.8-intel.egg/scipy/ndimage/interpolation.py"、295 行目、map_coordinates
    Raise RuntimeError('座標配列の形状が無効')
RuntimeError: 座標配列の形状が無効です
4

1 に答える 1

1

私の最初の推測は、あなたが 3 次元のカラー画像を渡しているということです。一見すると、あなたのコードがそれを処理できるとは思えません。

私の推測は、あなたが貼り付けたエラー、具体的には「座標配列の無効な形状」に基づいていました通常、そのような高次元配列を使用する場合、操作を繰り返す軸を指定するために追加のパラメーターを渡す必要があり、それでも機能しない場合があります. 引数リストの最後に余分な整数が繰り返されているのを見なかったので、そのケースを明示的に処理しようとしておらず、画像を読み取った後に配列の次元を確認するのを忘れた可能性があると考えました。

役に立ってよかった:)

于 2013-05-20T21:34:53.547 に答える