質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

2727閲覧

R: 画像のfftパワースペクトラム

Shellykagoshima

総合スコア17

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

1クリップ

投稿2019/07/17 23:49

Rのimagerパッケージを使って画像のfftを行い、fftパワースペクトラムを表示したいのですが、以下のエラーが出ます。解決方法を教えてください。

library(imager)
img = grayscale( boats )
plot(img)

ff <- FFT(img,inverse=FALSE)
plot(ff$real,main="Real part of the transform")
plot(ff$imag,main="Imaginary part of the transform")
power <- sqrt(ff$real^2+ff$imag^2)
plot(power,main="Power spectrum")
###############################################
error message:
Error in FFT_realim(im.real, inverse = inverse) : CImgList::FFT(): Specified real and imaginary parts (256,384,1,1) have non 2^N dimension along the Y-axis.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fftは、高速フーリエ変換 fast Fourier transformの略語です。
高速フーリエ変換は、次数が2の累乗であるとき、O(NlogN)の計算量でできる方法です。(離散フーリエ変換の計算量は、O(N*N)なので、N=1024だと2桁ぐらい速くなります)

FFTを使うには、『次数が2の累乗であるとき』という条件を満たす必要があります。
ところが、Shellykagoshimaさんが与えたデータは(256,384,1,1)という次元で、2つ目の次数が384という2の累乗ではない数値であるため、FFTを使えないのです。
(エラーメッセージ"CImgList::FFT(): Specified real and imaginary parts (256,384,1,1) have non 2^N dimension along the Y-axis."を直訳すると、指定された実数部と虚数部(256,384,1,1)はY軸に2のN乗ではない次数が使われているます、となります)

<解決方法>
1) 縦と横のピクセル数が2の累乗であるような画像のデータを使う
2) FFTを諦めて、離散フーリエ変換を使う

投稿2019/07/18 00:59

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsunosuke

2019/07/18 01:47

なるほど・・・。横からのコメントと質問で恐縮なのですが、 boats というものはパッケージから標準で提供されているものなので、 なぜこんなエラーが起きてしまうのかが理解できないでいます。 ちなみに私の環境ではそのまま動きました。 ただ、確かに、 > img Image. Width: 256 pix Height: 384 pix Depth: 1 Colour channels: 1 という内容になっていて、扱っているデータは同一のもののはずです。 参考までに環境系の情報です。 > version _ platform x86_64-apple-darwin15.6.0 arch x86_64 os darwin15.6.0 system x86_64, darwin15.6.0 status major 3 minor 6.1 year 2019 month 07 day 05 svn rev 76782 language R version.string R version 3.6.1 (2019-07-05) nickname Action of the Toes > packageVersion("imager") [1] ‘0.41.2’
Shellykagoshima

2019/07/19 07:58

ありがとうございます。2^n乗に画像の大きさをすることで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問