プロが教える店舗&オフィスのセキュリティ対策術

2次元FFT図を逆FFTし元の画像を得るプログラムを作ったのですが、得られた画像は、右斜上方向に数本の線やら何か入っててその線によって画像の濃度を逆転したりしています(説明が悪くてすいません)。その障害はありますが、少し画像は得られてます。
2次元FFT図は、自分で作ったものです。picture.backcolor=RGB(0,0,0)でスペクトルの点は、半径1、RGB(255,255,255)です。サイズは256*256です。一点かき、逆FFTで水平方向に白、黒、白・・・・(画像)を得ることを目的としております。
画像を読み込みの時、
For j = 1 To Size
For i = 1 To Size
rTemp(i) = Picture.Point(i, j) And &HFFFFFF
iTemp(i) = 0#

Next i
For i = 1 To Size
rData(i, j) = rTemp(i)
iData(i, j) = iTemp(i)

Next i
Next j
(r-実部、i-虚部)
このように白い点だけ実数部に読み込ませて、逆FFTをしています。
虚部もよみ込ませる必要あるのですか?
読み込ませるとしたら、値をどのように与えてやればいいのですか?
それか結果(得られる画像にいろんな障害がある)の原因は別のところにあるのですか?
説明が不十分や悪いとは思いますが、宜しくお願い致します。

A 回答 (3件)

実例となると自分で作ってみるしかないのですが、フーリエ変換式というのはこういうものでしょうか。

DFTの具体的なアルゴリズムをご提示ください。
http://www.geocities.jp/shotajp/fourier.htm

計算結果が複素数で出力されますが、この結果はノルムだけをとっても0から255の間の整数に収まらないので最大値を255として比例配分することになります。ただ、この操作では全体的に数値の小さいところがほとんどになり、画面上は真っ黒になってしまいます。人間の視覚で判断するには対数スケールで配分した方がわかりやすくなります。もちろん次の計算には使うことができないので見るだけですが。
    • good
    • 0
この回答へのお礼

ありがとうございました。

0から255の間の整数に収まらないので最大値を255として比例配分することになります。がポイントですね。

がんばってみます。

お礼日時:2003/02/03 08:34

グレースケール上ではRGBのそれぞれの8ビット値が一致すればよいので、演算はどれか8ビット値だけを取り出してフーリエ変換すればいいと思います。

もちろんフーリエ変換の前は実数変換を行い、フーリエ変換後もスケーリングをして0~255の整数値に規格化する必要があります。これをRGB値のそれぞれに代入することになるでしょう。フーリエ変換後の複素数の取り扱いはいろいろな課題があります。ノルムだけを使用するのか、実数部をとるのかこのあたりは求める内容やそれ以降の処理の進め方によります。

この回答への補足

ありがとうございます。

>演算はどれか8ビット値だけを取り出して
すいません。よろしければ、具体例を教えていただけませんでしょうか?

規格化っていうのは、どういうことなのでしょうか?

ご指導の程よろしくおねがいします。

補足日時:2003/01/29 06:56
    • good
    • 0

どうしても説明が読みとれません。


使用する逆FFT図はRGB値各8ビット×4の組み合わせでモノクロかもしれませんが、その32ビット値をフーリエ変換してしまうと別の色を表現することになってしまいます。常にグレースケール上に配分できるように変換する作業はできているのでしょうか。

この回答への補足

遅くなって申し訳ございません。

>どうしても説明が読みとれません。
すいません。日本語の表現が苦手です。

>使用する逆FFT図はRGB値各8ビット×4の組み合わせでモノクロかもしれませんが、その32ビット値をフーリエ変換してしまうと別の色を表現することになってしまいます。常にグレースケール上に配分できるように変換する作業はできているのでしょうか。

すいません。勉強不足です。
グレースケール上に配分という処理はどのような処理ですか?
詳しく教えてください。お願いします。

補足日時:2003/01/27 05:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!