0

「2D配列のピクセル値で表される画像を入力として取り込むプログラムを作成する必要があります(簡単にするために、各ピクセルは整数で表すことができます)。のすべてのピクセルに平均フィルターを適用して、結果の平滑化された画像を出力します。アレイ」。

私は配列について学んでいるだけですが、このプログラムを開始する方法についてさえ迷っています。私がこのトピックを検索するときはいつでも、私が見つけたすべての例や概念が実際の画像を使用したり話したりしているため、非常に混乱します。私のプログラムは整数を使用しているので、何が必要で何が必要でないかを区別するのに苦労しています。基本的に私は前提を理解しています(少なくとも私はそう思います)、各数値はその周りの4つの数値の平均値を取る必要がありますが、基本的な概念の外では、何をする必要があるのか​​途方に暮れています。ヘルプ、提案、または例は素晴らしいでしょう。

ありがとう

4

2 に答える 2

0

0)画像をロードしますか?または整数配列が与えられていますか?

1)2D配列から始めて、コピーを生成します。int I[N][M]; int New[N][M];

2)値をループします。

for (i = 0; i < N; i++){
    for (j = 0; j < M; j++){

3)あなたのことをしなさい

New[i][j] = sum(I[i-1][j] + I[i][j-1]...)/4;
  • (iまたはj-1)が<0になり、(iまたはj + 1)>NまたはMになることに注意してください。適切と思われるこれらの境界条件を処理します。

明らかにこれが最も簡単な方法ですが、クラスにいるように見えるので問題ないはずです

于 2012-09-28T21:06:51.697 に答える
0

重要な概念:

int values[20][20];
float intermediates[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    intermediates = (float)values[y][x];

int means[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    means[y][x] = (int) ( (float) (intermediates[y-1][x-1] + intermediates[y-1][x] + intermediates[y-1][x+1] + intermediates[y][x-1] + intermediates[y][x] + intermediates[y][x+1] + intermediates[y+1][x-1] + intermediates[y+1][x] + intermediates[y+1][x+1]) / 9.0F); //  Divisor is 9 because we added nine values and we're getting the mean

現在、4つのコーナーケースがあります。中間体[0] [0]、中間体[0] [19]など、そしてすべての側面です。

すべての前に(フロート)配置したくなかったので、値は最初に「中間」にコピーされました。

于 2012-09-28T21:08:21.223 に答える