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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1429閲覧

画像処理の周波数0は何を意味しているのか

te623

総合スコア4

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/09 06:13

画像処理の勉強をしているのですが周波数について質問があります。
「周波数は平均すると0になってしまうため他の値を表すことができないけど、周波数0は何を意味しているのか」という質問を先輩から頂いたのですがどうしてもわかりませんでした。
周波数は明るさを表していると解釈しているのですが、周波数0が画像の明るさにどう関係しているかがわかりません。

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

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

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

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

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

te623

2021/11/09 06:57

詳しく記載しておらず申し訳ありませんでした。 空間周波数です。
jbpb0

2021/11/09 07:19 編集

画像をFFTした後の空間周波数が0の値は、画像の明るさ(各画素の画素値)の総和です よく、FFT後にデータ数(画像の場合は総画素数)で割りますけど、そうした場合は画像の明るさの平均値になります > 周波数は平均すると0になってしまうため他の値を表すことができない は、どういう意味でしょうか? 空間周波数自体を平均するのですか? それとも、いろんな空間周波数の振幅とか位相とかを平均するのですか? どちらにしても、「他の値を表すことができない」というのが、どういうことを意味してるのかが分からない 【追記】 FFTでの正規化のやり方はライブラリによってまちまちなので、このコメントの最初に書いた「画像をFFTした後の空間周波数が0の値は...」は、質問者さんがお使いのライブラリによっては違うかもしれません Pythonのnumpyと、MATLABと、Gnu Octaveは、このコメントに書いた通りです ただし、違う場合でも係数が掛け算されるだけなので、画像の明るさの平均値に比例はします 【追記2】 FFTの前に窓関数を適用してる場合は、上記の「画像の明るさ」は、窓関数適用後の値になります
fana

2021/11/09 07:29

「直流成分」という言葉で調べると良いのでは.
te623

2021/11/09 08:04

少し前の話なので記憶が曖昧なのですが 周波数を一次元の波で考えると、どんな周波数でも基本的に平均値が0になるので、0以外の値を表せないそうです。この時に周波数の値が0の波が関係してくるそうです。 先輩は画像処理に詳しい方なので、間違っているとすれば自分の解釈が間違っています。
te623

2021/11/09 08:13

直流成分では検索をかけていなかったので調べてみます
jbpb0

2021/11/09 08:45 編集

> 周波数を一次元の波で考えると、どんな周波数でも基本的に平均値が0になる 意味が分かりました 周波数が整数(データの両端が滑らかにつながる)の成分で、直流を除くものは、全部足したら0になるので、画像の明るさの「平均値」を0以外にすることに寄与することはできません なので、「周波数が整数の成分だけ」考えたら、画像の明るさの「平均値」を0以外にするのは、直流成分だけです たぶん、そのことを言ってるのでしょう でも、周波数が整数では無い成分は、全部足しても0にはならないので、それは平均値を0以外にするのに寄与すると思いますけど 画像内に周波数が整数の成分しか無い、なんて都合良い場合なんて、滅多に無いですよ FFTでは、周波数が整数の成分しか出てこないから、分かり難いんだけど https://www.logical-arts.jp/archives/124 の「2)周期性が成り立たない場合」のグラフを見てください これは、周波数が3.5の成分だけがあり、直流成分はありませんが、全部足しても0ではないので、平均値は0ではありませんよね 無限の長さで積分したら直流以外は全部0になるけど、実際に扱うデータは無限の長さではないので、画像の平均値(が0では無い場合)は直流成分の寄与のみ、とは言えないわけです 【追記】 上記Webページのグラフは、全部足したら0になりますね 例が悪かった もっと中途半端なところで切れてるような周波数の場合の話です 一番上からちょっとだけ下がったところで終わってるとか
te623

2021/11/09 11:46

なるほど! 丁寧な説明ありがとうございます。とてもスッキリしました!
fana

2021/11/10 00:55

(それもう回答にしたら良いのでは…と思いますが,自己解決の方向にもっていってもらう 方針/想定 なのでしょうか?)
guest

回答1

0

質問の「周波数」が、画像のFFTでの空間周波数と解釈して、書きます

FFTの結果の周波数は、整数のみになります
ただし、ここでの周波数の基準になるデータの長さは、物理的な長さ(ミリメートルとか秒とか)ではなく、データの全長を1.0とした周波数です
たとえば、周波数1は波長がデータ全長と同じ場合で、周波数2は波長がデータ全長の1/2の場合です

周波数が整数の成分で、直流(周波数0)を除くものは、全部足したら0になるので、画像の明るさの「平均値」を0以外にすることに寄与することはできません

一方、直流(周波数0)は波長が無限なので、画像内で変化しない一律の値で、これが画像の明るさの「平均値」です

したがって、画像の明るさの「平均値」は、直流成分のみで決まります

ここからは実装依存の話です
Pythonのnumpyと、MATLABと、Gnu Octaveは、画像をFFT処理した後の直流の振幅は、画像の明るさの総和です
FFT処理後に振幅を総データ数(画像の場合は総画素数)で割った場合は、直流の振幅は画像の明るさの平均値になります
(FFTでの正規化のやり方はライブラリによってまちまちなので、使うライブラリによっては、そのようにならない場合もあります)

なお、FFT前にデータに窓関数を適用する場合は、これまでの説明で画像の明るさの総和とか平均値とか言ってるものは、窓関数適用後の値になります

投稿2021/11/11 11:28

jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問