遥感院05上机

// 2005.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include<fstream>
#include <iostream>
#include <vector>
#define SUM 10000
#define M 125
#define N 80
#define S 100
#define T 100
using namespace std;
typedef vector<vector<int> >vecd;
vecd CK1(vecd&vec);
vecd CK2(vecd&vec);
int main()
{
ifstream infile("E://SourceData.txt");
ofstream outfile("E://result.txt");
if (!infile) { cout << "test.txt open failed" << endl; return 1; }
if (!outfile) { cout << "result.txt open failed" << endl; return 1; }
int i, j;
int data;
vector<int>vec;
for (i = 0; i < SUM; i++)
{
infile >> data;
vec.push_back(data);
}
vecd vec1(M, vector<int>(N));
vecd vec2(S, vector<int>(T));
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
vec1[i][j] = vec[i*N + j];
}
}
for (i = 0; i < S; i++)
{
for (j = 0; j < T; j++)
{
vec2[i][j] = vec[i*T + j];
}
}
    /*调用卷积运算函数,输出卷积矩阵1卷积后的数据*/
vecd vecd1(M, vector<int>(N));
vecd1=CK1(vec1);
outfile << "使用卷积矩阵1进行卷积后:" << endl;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
outfile << vecd1[i][j] << " ";
}
outfile << endl;
}
/*调用卷积运算函数,输出卷积矩阵2卷积后的数据*/
vecd vecd2(S, vector<int>(T));
vecd2 = CK2(vec2);
outfile << "使用卷积矩阵2进行卷积后:" << endl;
for (i = 0; i < S; i++)
{
for (j = 0; j < T; j++)
{
outfile <<vecd2[i][j] << " ";
}
outfile << endl;
}
outfile.close();
infile.close();
return 0;
}
/*卷积函数1*/
vecd CK1(vecd&vec)
{
int a[] = {0,-1,0,-1,5,-1,0,-1,0};
int i, j;
vecd vec_ck1(M,vector<int>(N));
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
vec_ck1[i][j] = vec[i][j];
}
}
for (i = 1; i < M - 1; i++)
{
for (j = 1; j < N - 1; j++)
{
vec_ck1[i][j] = vec_ck1[i - 1][j - 1] * a[0] + vec_ck1[i - 1][j] * a[1] + vec_ck1[i - 1][j + 1] * a[2]
+ vec_ck1[i][j - 1] * a[3] + vec_ck1[i][j] * a[4] + vec_ck1[i][j + 1] * a[5]
+ vec_ck1[i + 1][j - 1] * a[6] + vec_ck1[i + 1][j] * a[7] + vec_ck1[i + 1][j + 1] * a[8];
}
}
return vec_ck1;
}




/*卷积函数2*/
vecd CK2(vecd&vec)
{
int b[] = {0,0,-1,0,0,0,-1,-2,-1,0,-1,-2,16,-2,-1,0,-1,-2,-1,0,0,0,-1,0,0};
int i, j;
vecd vec_ck2(S, vector<int>(T));
for (i = 0; i < S; i++)
{
for (j = 0; j < T; j++)
{
vec_ck2[i][j] = vec[i][j];
}
}
for (i = 2; i < S - 2; i++)
{
for (j = 2; j < T - 2; j++)
{
vec_ck2[i][j] = vec_ck2[i - 2][j - 2] * b[0] + vec_ck2[i - 2][j-1] * b[1] + vec_ck2[i - 2][j] * b[2]
+ vec_ck2[i-2][j+1] * b[3] + vec_ck2[i - 2][j + 2] * b[4] + vec_ck2[i-1][j -2] * b[5]
+ vec_ck2[i - 1][j -1] * b[6] + vec_ck2[i - 1][j] * b[7] + vec_ck2[i - 1][j +1] * b[8]
+ vec_ck2[i - 1][j + 2] * b[9] + vec_ck2[i][j - 2] * b[10] + vec_ck2[i][j -1] * b[11]
+ vec_ck2[i][j] * b[12] + vec_ck2[i][j+1] * b[13] + vec_ck2[i][j + 2] * b[14] + vec_ck2[i+1][j-2] * b[15]
+ vec_ck2[i+1][j-1] * b[16] + vec_ck2[i + 1][j] * b[17] + vec_ck2[i + 1][j+1] * b[18] + vec_ck2[i + 1][j + 2] * b[19]
+ vec_ck2[i + 2][j -2]* b[20]+ vec_ck2[i + 2][j - 1] * b[21] + vec_ck2[i + 2][j] * b[22] + vec_ck2[i + 2][j+1] * b[23] + vec_ck2[i+2][j+2] * b[24];
}
}
return vec_ck2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值