[解決済み] 画像を表すnumpy配列のリサンプリング
質問
私は新しいサイズで画像データを表すnumpy配列を再サンプリングする方法を探しています、できれば補間方法(直近、バイリニアなど)を選択できるようにしてください。私はそこにあることを知っています。
scipy.misc.imresize
は、PILのリサイズ関数をラップすることで、まさにこれを実現しています。唯一の問題は、PILを使用しているため、numpy配列は画像フォーマットに準拠する必要があり、最大4つのquot;color"チャンネルを与えてしまうことです。
私は、任意の数の"color"チャンネルを持つ、任意の画像のサイズを変更できるようにしたいです。私は、scipy/numpyでこれを行うための簡単な方法があるかどうか、または私が自分でロールバックする必要があるかどうか疑問に思っていました。
私は自分自身を作り上げる方法について2つのアイデアを持っています。
-
を実行する関数
scipy.misc.imresize
を各チャンネルで個別に実行する関数です。 -
を使用して自分で作成します。
scipy.ndimage.interpolation.affine_transform
最初のものは大きなデータではおそらく遅いでしょうし、2番目のものはスプライン以外の補間方法を提供していないようです。
どのように解決するのですか?
あなたの記述に基づくと、あなたは
scipy.ndimage.zoom
.
バイリニア補間の場合は
order=1
であり、最も近いものは
order=0
で、cubic はデフォルトです (
order=3
).
zoom
は、特に新しい解像度に再サンプリングしたい規則正しい格子状のデータのためのものです。
簡単な例として
import numpy as np
import scipy.ndimage
x = np.arange(9).reshape(3,3)
print 'Original array:'
print x
print 'Resampled by a factor of 2 with nearest interpolation:'
print scipy.ndimage.zoom(x, 2, order=0)
print 'Resampled by a factor of 2 with bilinear interpolation:'
print scipy.ndimage.zoom(x, 2, order=1)
print 'Resampled by a factor of 2 with cubic interpolation:'
print scipy.ndimage.zoom(x, 2, order=3)
そして、その結果。
Original array:
[[0 1 2]
[3 4 5]
[6 7 8]]
Resampled by a factor of 2 with nearest interpolation:
[[0 0 1 1 2 2]
[0 0 1 1 2 2]
[3 3 4 4 5 5]
[3 3 4 4 5 5]
[6 6 7 7 8 8]
[6 6 7 7 8 8]]
Resampled by a factor of 2 with bilinear interpolation:
[[0 0 1 1 2 2]
[1 2 2 2 3 3]
[2 3 3 4 4 4]
[4 4 4 5 5 6]
[5 5 6 6 6 7]
[6 6 7 7 8 8]]
Resampled by a factor of 2 with cubic interpolation:
[[0 0 1 1 2 2]
[1 1 1 2 2 3]
[2 2 3 3 4 4]
[4 4 5 5 6 6]
[5 6 6 7 7 7]
[6 6 7 7 8 8]]
編集します。 Matt S. が指摘したように、マルチバンド画像のズームにはいくつかの注意点があります。以下の部分を私の 以前の回答 :
ズームは、3D(およびnD)配列でも機能します。ただし、例えば2倍でズームした場合、以下のような方向にズームすることになるので注意が必要です。 すべて 軸に沿ってズームします。
data = np.arange(27).reshape(3,3,3)
print 'Original:\n', data
print 'Zoomed by 2x gives an array of shape:', ndimage.zoom(data, 2).shape
という結果が得られます。
Original:
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
Zoomed by 2x gives an array of shape: (6, 6, 6)
マルチバンド画像の場合、通常は "z" 軸に沿って補間し、新しいバンドを作成することはしたくありません。
ズームしたい3バンドのRGB画像のようなものがある場合、ズームファクターとしてタプルのシーケンスを指定することによって、これを行うことができます。
print 'Zoomed by 2x along the last two axes:'
print ndimage.zoom(data, (1, 2, 2))
という結果が得られます。
Zoomed by 2x along the last two axes:
[[[ 0 0 1 1 2 2]
[ 1 1 1 2 2 3]
[ 2 2 3 3 4 4]
[ 4 4 5 5 6 6]
[ 5 6 6 7 7 7]
[ 6 6 7 7 8 8]]
[[ 9 9 10 10 11 11]
[10 10 10 11 11 12]
[11 11 12 12 13 13]
[13 13 14 14 15 15]
[14 15 15 16 16 16]
[15 15 16 16 17 17]]
[[18 18 19 19 20 20]
[19 19 19 20 20 21]
[20 20 21 21 22 22]
[22 22 23 23 24 24]
[23 24 24 25 25 25]
[24 24 25 25 26 26]]]
関連
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] NumPyの配列で、N個の最大値のインデックスを得るには?
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] NumPy の配列を csv ファイルにダンプする
-
[解決済み] NumPyで、CSVデータをレコード配列に読み込むにはどうしたらいいですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】PILイメージをnumpyの配列に変換する方法は?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例