遥感作业,最邻近插值法的放大代码
/*
最邻近插值法,将一个 二维数组 由3*3的矩阵扩大为5*5的矩阵
1.输出所有整数点,对其中的第一个整数点,求出该整数点在5*5矩阵中的映射点(小数)
2.如果在cur新表上的点到该映射点的距离与其他映射点比较后发现最小
3.输出cur新表上的点,给它赋值为旧表中的整数点的内容
4.遍历输出新表
*/
//创建一个二维数组ori
#include <iostream>
using namespace std;
int ori[3][3] = { {255,39,65}, {236,72,83}, {54,89,77} };
int main() {
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
cout << ori[i][j] << "\t";
cout << "\n";
}
int cur[5][5];
/*
新图像的像元坐标为(mq,np)0<=q,p<5
mq=1/2+q
np=1/2+p*
cur[0][0],tydx=0,tydy=0,
cur[0][1],tydx=0,tydy=0.6
cur[0][2],tydx=0,tydy=1.2
cur[0][3],tydx=0,tydy=1.8
cur[0][4],tydx=0,tydy=2.4
*/int c[5],d[5];
for (int q = 0; q < 5; q++)
{
double tydx = q * 0.6;
if (int(tydx) == 0) c[q] = 0;
else if (int(tydx) > 0 && tydx - int(tydx) < 0.5) c[q] = int(tydx);
else c[q] = int(tydx) + 1;
for (int p = 0; p < 5; p++)
{
double tydy = p * 0.6;
if (int(tydy) == 0) d[p] = 0;
else if (int(tydy) > 0 && tydy - int(tydy) < 0.5) d[p] = int(tydy);
else d[p] = int(tydy) + 1;
//每一个像元坐标都要遍历映射点的坐标求distance, 当取到最小的distance 时,取映射点的颜色,给像元坐标赋值,输出像元坐标,break;
/*映射点(xc, yd)0 <= c, d < 3
xc = a / i / 2 + a / i * c
yd = b / j / 2 + b / i
*/
cout << ori[c[q]][d[p]] << "\t";
}cout << endl;
}
}
//创建一个5*5的二维数组cur;宣布初值全为0,用来存放变化后的值
/*算法分析:
首先要求到映射点注意是中心点
a=5,b=5
i=3,j=3
映射点(xc,yd)0<=c,d<3
xc=a/i/2+a/i*c
yd=b/j/2+b/i*d
新图像的像元坐标为(mq,np)0<=q,p<5
mq=1/2+q
np=1/2+p
每一个像元坐标都要遍历映射点的坐标求distance,当取到最小的distance 时,取映射点的颜色,给像元坐标赋值,输出像元坐标,break;
*/