资源简介
2019年研究生复试 测绘遥感信息工程国家重点实验室 实验操作
使用C++或Java,在已经形成的框架中调试和编制程序,完成均值滤波算法。
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了以目标像素为中心的周围像素,用模板中的全体像素的平均值来代替原来像素值。
代码片段和文件信息
#include “stdafx.h“
//请根据正确的路径修改下列宏,保证文件正确读取
#define OUTFILE3x3 “D:\\OpOutputC3.txt“
#define OUTFILE5x5 “D:\\OpOutputC5.txt“
//如需子函数,请在此处定义
/*================================================================================
3x3均值滤波:
对输入的影像进行3x3均值滤波。
该函数结果不正确,请修改正确。
输入:
影像arrImage,整型数组
影像宽nCol,像素个数
影像高nRow,像素个数
输出:
滤波完成的影像arrImage
返回:无
==================================================================================*/
void Blur3x3(int* arrImage const int nCol const int nRow)
{
//开辟临时空间
int *arrNewImage = new int[nCol * nRow];
//均值滤波计算
for (int i = 0; i < nRow; ++i)
{
for (int j = 0; j < nCol; ++j)
{
double sum = 0.0;
sum += arrImage[(i - 1)*nCol + j - 1];
sum += arrImage[(i - 1)*nCol + j];
sum += arrImage[(i - 1)*nCol + j + 1];
sum += arrImage[i*nCol + j - 1];
sum += arrImage[i*nCol + j];
sum += arrImage[i*nCol + j + 1];
sum += arrImage[(i + 1)*nCol + j - 1];
sum += arrImage[(i + 1)*nCol + j];
sum += arrImage[(i + 1)*nCol + j + 1];
arrNewImage[i*nCol + j] = int(sum / 9 + 0.5);
}
}
//将计算结果复制回arrImage并清理临时空间
for (int i = 0; i < nRow; ++i)
for (int j = 0; j < nCol; ++j)
arrImage[i*nCol + j] = arrNewImage[i*nCol + j];
delete arrNewImage;
return;
}
/*================================================================================
NxN均值滤波:
对输入的影像进行NxN均值滤波。
该函数功能未实现,请补全。
输入:
影像arrImage,整型数组
影像宽nCol,像素个数
影像高nRow,像素个数
滤波窗口尺寸nN,奇数
输出:
滤波完成的影像arrImage
返回:无
==================================================================================*/
void BlurNxN(int* arrImage const int nCol const int nRow const int nN)
{
//开辟临时空间
int *arrNewImage = new int[nCol * nRow];
//当前实现仅仅是数据复制,请修改补全,完成NxN均值滤波
for (int i = 0; i < nRow; ++i)
{
for (int j = 0; j < nCol; ++j)
{
arrNewImage[i*nCol + j] = arrImage[i*nCol + j];
}
}
//将计算结果复制回arrImage并清理临时空间
for (int i = 0; i < nRow; ++i)
for (int j = 0; j < nCol; ++j)
arrImage[i*nCol + j] = arrNewImage[i*nCol + j];
delete arrNewImage;
return;
}
//=============答题分割线===========此线以后修改的修改不作为答题内容==================================================
void Output(const char *fileName const int *arrImage const int nCol const int nRow)
{
FILE *fp = fopen(fileName “w“);
for (int i = 0; i < nRow; ++i)
{
fprintf(fp “%d“ arrImage[i*nCol]);
for (int j = 1; j < nCol; ++j)
fprintf(fp “%d“ arrImage[i*nCol + j]);
fprintf(fp “\n“);
}
fclose(fp);
}
int main()
{
//初始化环境
int arrImage[] = {
0 255 0 255 0 255 0 255
255 0 255 0 255 0 255 0
0 255 0 255 0 255 0 255
255 0 255 0 255 0 255 0
0 255 0 255 0 255 0 255
255 0 255 0 255 0 255 0
0 255 0 255 0 255 0 255
255 0 255 0 255 0 255 0
};
int nCol = 8 nRow = 8;
//3x3均值滤波
Blur3x3(arrImage nCol nRow);
Output(OUTFILE3x3 arrImage nCol nRow);
//5x5均值滤波
BlurNxN(arrImage
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 36834 2019-03-12 19:30 试题.docx
目录 0 2019-03-12 19:16 1_CPP Project\
目录 0 2019-03-12 19:16 1_CPP Project\OPTest\
文件 3373 2019-03-12 19:15 1_CPP Project\OPTest\OPTest.cpp
文件 8073 2019-03-11 15:24 1_CPP Project\OPTest\OPTest.vcxproj
文件 1333 2018-03-08 18:00 1_CPP Project\OPTest\OPTest.vcxproj.filters
文件 1708 2018-03-08 18:00 1_CPP Project\OPTest\ReadMe.txt
文件 293 2018-03-08 18:00 1_CPP Project\OPTest\stdafx.cpp
文件 320 2018-03-08 18:00 1_CPP Project\OPTest\stdafx.h
文件 314 2018-03-08 18:00 1_CPP Project\OPTest\targetver.h
文件 1300 2018-03-08 18:00 1_CPP Project\OPTest.sln
文件 2363392 2019-03-12 19:15 1_CPP Project\OPTest.VC.db
目录 0 2019-03-12 19:13 2_Java Project\
目录 0 2019-03-12 19:13 2_Java Project\OpTest\
文件 301 2018-03-08 12:19 2_Java Project\OpTest\.classpath
文件 382 2018-03-08 12:19 2_Java Project\OpTest\.project
目录 0 2019-03-12 19:13 2_Java Project\OpTest\.settings\
文件 598 2018-03-08 12:19 2_Java Project\OpTest\.settings\org.eclipse.jdt.core.prefs
目录 0 2019-03-12 19:13 2_Java Project\OpTest\bin\
文件 2885 2019-03-12 19:12 2_Java Project\OpTest\bin\StartOp.class
目录 0 2019-03-12 19:13 2_Java Project\OpTest\src\
文件 3840 2019-03-12 19:12 2_Java Project\OpTest\src\StartOp.java
评论
共有 条评论