私が必要としている優れた関数があり、これは Java プログラムで実装されています: ImageJ. そこで使われているアルゴリズムを理解する必要があります。この関数にはいくつかのパラメーターがあります: リンク テキスト
また、FFT を使用する前に、画像を特別な画像に変換します。バンドパス フィルターは、特別なアルゴリズムを使用してエッジ アーティファクトを減らします (フーリエ変換の前に、元の画像の外側にある画像部分のミラーリングされたコピーを添付することで画像のサイズが拡張されるため、ジャンプはありません)。エッジで発生します)
この特別な変換について詳しく教えてください。実際に鏡像をタイリング。
私は C++ で書いていますが、プログラムのその部分を C++ で書き直したいと思っています。
EDIT1:ミラーリングされたイメージ操作をどのように行うかを理解する必要があります。それは特別なものかもしれません。実際には、最初は画像を新しいサイズの画像に変換するので、私の画像では、600X480 から 1024X1024 サイズの画像に変換します。ここでタイルはどのように使用されますか?
EDIT2:また、この tileMirrored 関数の説明を理解するのは難しいです:
ImageProcessor (ROI) を、サイズが幅 x 高さ y の新しい ImageProcessor の位置 (x,y) に配置します。画像は、FFT の影響を回避するために、そのエッジの周りがミラーリングされます。「... 位置 (x,y) で幅 x 高さ y のサイズ」とはどういう意味ですか?
EDIT3: そのバンドパス フィルターを実装したところ、元のプログラムと同じ結果が得られました。しかし、元のプログラム (私のプログラムでも) のアルゴリズム自体は非常に遅いです。プログラムでそのフィルターを一度も使用したくないのですが、呼び出しごとに約 0.5 から 2 秒を計算します (パラメーター値によって異なります)。FHT 変換 (FFT ではない) が使用されていますが、FFT よりも高速ですか? フィルタ自体が最適化されていないと思います。filterLargeSmall 関数の実装: ソース コードを参照してください。