0

私はウェブをさまよっていますが、読んだチュートリアルはどれもよくわかりません。.pgm 画像に High-pass3 フィルタを実装するにはどうすればよいですか? 私は画像の構造を持っています:

struct Image {

 char* file_name; //name of .pgm file
 char header[3];  
 int max_grey_value; 
 int height;   
 int width;   
 int **pixels;  //pixels matrix
 struct Image *next; //next element in the list

};

そして今、どのように始めるのですか?私が知る限り、SUMを数える必要がありますが、方法がまったくわかりません。この合計は画像全体の合計ですか、それとも単一ピクセルの合計ですか? よし、じゃあ何?ある商で割る必要があります。関数のその引数ですか、それとも単独でカウントする必要がありますか。私はこれについて本当に混乱しています。初心者が理解できる簡単な言葉で、そのフィルターの実装を説明してもらえますか?

4

1 に答える 1

2

まず、PGM イメージを構造体に読み込む必要があります。これを行う方法がわからない場合は、PGM 形式について読んでください。

それが完了したら、フィルターを構築する必要があります。少しあいまいな質問から、 size のフィルターが必要なようです3x3。理論的には、構造体を再利用Imageしてフィルターを表すことができます。フィルターの内容 (pixels部分) は、使用している特定のフィルター (ラプラシアンやソーベルなど) によって異なります。フィルターを取得したら、最初のステップで読み込んだ画像と畳み込みます。技術的にはこれで完了ですが、実際に結果を確認したい場合は、畳み込みの結果を別の PGM ファイルに書き込む必要があります。

独自の畳み込み関数を作成する必要があります (これには、質問で言及した「SUM を数える」部分が含まれます)。まだ提供されていない場合は、独自のイメージ I/O 関数も必要になります。

畳み込み出力は次のようになります

補足として、メモリ内のイメージの表現とファイル システム内のイメージの表現を設計で分離することをお勧めします。たとえば、現在、Image構造体は各画像に対応する があると想定しています。これは、ファイル システムからロードされていない場合 (たとえば、自分で作成したフィルタの場合)filenameは意味がありません。Image

于 2010-11-23T08:27:13.187 に答える