2017-02-02 4 views
1

imresize.m documentationを読んだ後、入力画像が実際に複素数の行列である場合はどうなるのか分かりません。私は必要な出力を生成するコードを見ていて、imresize(A,n)を使用しています。ここで、Aは複素行列で、nはサイズ変更係数です。私は首尾よくグレースケールのバージョン(実際のdouble型)を実装しました。これはC++でバイキュービック補間を使ってimresizeですが、どのように関数が複雑な値を扱うのか分かりません。MATLAB imresize()は、入力画像行列が実際に複雑な型の場合はどうしますか?

編集:私は別に両方の実部と虚部に私の現在作業バイキュービック補間関数を実行しようとしました、その後、それらを一緒に追加しているの詳しい情報

。同じ結果は得られません。

+0

もう一度元気にしましょう。あなたの入力タイプは、なぜ複素値ですか?画像のサイズ変更は、データが実数または整数であることを前提としています。 – rayryeng

+0

正直言って、なぜ入力が複雑であるのかわかりません。私はそれも変わったと思って、移植されるアルゴリズムがうまくいかないと確信していました。しかし、残念ながら、アルゴリズム内でそのimresize()関数を使用すると、期待される出力が生成され、アルゴリズム内のimresize()関数は適切にサイズ変更された別の行列を返します。 – Envidia

+0

これらの結果を得るために逆FFTを使用していますか?それはなぜそれらが複雑な価値があるのか​​を説明するかもしれません。 – hbaderts

答えて

4

私の推測では、imresizeは実数部と虚数部に別々に適用されているかのように機能します。それはまったく同じワットヤス複雑なデータを実データに適用されるように、本質的には

N = 10; 
scale = 2; 
x = randn(N); 
y = randn(N); 
z1 = imresize(x+1i*y,scale); 
z2 = imresize(x,scale)+1i*imresize(y,scale); 
norm(z1-z2) % it is zero 

が、それは、単にアップサンプリング+フィルタリングます:ここで効果を実証する例があります。

+0

これは当てはまりません。 imresize()の出力は、適切にサイズ変更された複素数値行列です。それは実数値の行列を返さない。実際の出力複合値がこの時点でどのような値であるべきかわかりません。私が知っているのは、imresize()は適切なサイズ変更された次元の別の複素数値行列を出力するということです。私は、バイキュービック補間関数を実装して、実際の値と複雑な値を別々に処理しようとしています...同じ結果を生成しません。 – Envidia

+1

それはまさに私のコードが示すものです;-)ポイントは、入力画像がX = Y + iZならば、出力画像はimresize(Y)+ i imresize(Z)、すなわち入力の実数部です画像は出力の実部にリサイズされ、入力画像の虚部は出力の虚部にリサイズされます。あたかも別々に扱ったかのように。 – Florian

関連する問題