@2525littlemy2525

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

この課題解いてほしいです(C言語)。★ここを実装★と書かれた部分を埋めてほしいです。15時までに教えてほしいです。完成したコードをそのまま貼り付けてくれると助かります。

#include // qsort 用
// 比較関数(qsort 用)- これは完成版
int compare_uchar(const void* a, const void* b) {
return ((uchar)a - (uchar)b);
}
// メディアンフィルタ本体
void medianFilter(IplImage* inImage, IplImage* outImage) {
int x0, y0, x, y;
uchar window[9]; // 3× 3窓の値を格納する配列
int index;
// 画像の端を除いて処理(1ピクセルの余白)
for (y0 = 1; y0 < inImage->height - 1; y0++) {
for (x0 = 1; x0 < inImage->width - 1; x0++) {
// ★ここを実装 1★
// 3× 3窓内の 9個の画素値をwindow 配列に格納
// ヒント:2重ループでy=-1~1, x=-1~1を走査
index = 0;
for (y = -1; y <= 1; y++) {
for (x = -1; x <= 1; x++) {
// CV_IMAGE_ELEM を使って画素値を取得
window[index] = /* ★ここを埋める★ /;
index++;
}
}
// ★ここを実装 2★
// window 配列をソート(昇順)
// ヒント:qsort(配列, 要素数, 要素サイズ, 比較関数)
qsort(/
★引数を埋める★ /);
// ★ここを実装 3★
// 中央値を出力画像に書き込む
// ヒント:9個の要素の中央値は何番目?(0から数える)
outImage->imageData[outImage->widthStep * y0 + x0] =
window[/
★何番目?★ */];
}
}
// 境界処理(これは完成版)
// 上端と下端をコピー
for (x0 = 0; x0 < inImage->width; x0++) {
outImage->imageData[x0] = inImage->imageData[x0];
outImage->imageData[outImage->widthStep *
(inImage->height - 1) + x0] =
inImage->imageData[inImage->widthStep *
(inImage->height - 1) + x0];
}
// 左端と右端をコピー
for (y0 = 0; y0 < inImage->height; y0++) {
outImage->imageData[outImage->widthStep * y0] =
inImage->imageData[inImage->widthStep * y0];
outImage->imageData[outImage->widthStep * y0 +
inImage->width - 1] =
inImage->imageData[inImage->widthStep * y0 +
inImage->width - 1];
}
}

0 likes

2Answer

Comments

  1. すみません、ありがとうございます。

// CV_IMAGE_ELEM を使って画素値を取得

(これが指示なのかメモなのかわからないけれど)
他の場所では画素データアクセスにこのマクロを全然使っていないのに,何故ここだけ使うんだろう…?
とりあえずは他と同様に書いてみればいいじゃないかと思う.
マクロ使用がmustなのであれば,その後でこのマクロの定義を見て書き換えればいい.
CV_IMAGE_ELEM は,各所に書いてあるような処理そのものなので単純に置き換えればいい)

残りの穴埋めは以下のような物でしかないので,他者に尋ねている暇があるならさっさと埋めた方が早いのではないかな,と.

  • qsort() なる関数の「使い方」なので,この関数の仕様を調べれば(:ググれば)終了
  • 0, 1, ... ,8 なる9個の値の並びがあるとき,丁度真ん中にある値はなんでしょう? っていうだけの話
0Like

Comments

Your answer might help someone💌