ANSI-C。 .pgm写真用のhigh-pass3フィルター
-
27-09-2019 - |
質問
私はウェブをさまよっていますが、私が読んだチュートリアルはありません。 .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
};
そして今、どのように開始するのですか?私が知っている限り、私はいくらかの合計を数えなければなりませんが、私は方法を完全には知りません、そしてこの合計は全体の画像のものですか、それとも単一のピクセルのものですか?わかりました、じゃあ何?私はそれをいくつかの商で分割する必要があります。その関数の議論ですか、それとも単独でそれをカウントする必要があります。私はこれについて本当に混乱しています。誰かがそのフィルターの実装を私に簡単に説明できることを簡単に説明できますか?
解決
まず、PGM画像を構造体に読み込む必要があります。これを行う方法がわからない場合は、 PGM形式.
それを行ったら、フィルターを構築する必要があります。あなたの少し曖昧な質問から、サイズのフィルターが必要なように聞こえます 3x3
. 。理論的には、再利用できます Image
フィルターを表す構造 - フィルターの内容( pixels
部分)は、使用している特定のフィルター(LaplacianまたはSobelなど)に依存します。フィルターを入手した後、 コンバルブ 最初のステップでロードした画像で。技術的には、ここでは完了ですが、実際に結果を見たいと思っていると仮定すると、 書きます 畳み込みは別のPGMファイルになります。
独自の畳み込み関数を書く必要があります(これには、質問で言及した「合計」部分が含まれます)。また、既に提供されていない限り、独自の画像I/O機能が必要になります。
畳み込み出力は似ています これ.
サイドノートとして、メモリ内の画像の表現と、デザインのファイルシステムの画像の表現を分離することをお勧めします。たとえば、現在、あなた Image
structは、各画像に対応することを想定しています filename
, 、それは意味がありません Image
ファイルシステムからロードされていませんでした(たとえば、自分で作成したフィルターの場合)。