この課題解いてほしいです(C言語)。★ここを実装★と書かれた部分を埋めてほしいです。15時までに教えてほしいです。完成したコードをそのまま貼り付けてくれると助かります。
Q&A
#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];
}
}