最邻近插值法

遥感作业,最邻近插值法的放大代码

最邻近插值法_第1张图片

 

/*
最邻近插值法,将一个   二维数组  由3*3的矩阵扩大为5*5的矩阵
1.输出所有整数点,对其中的第一个整数点,求出该整数点在5*5矩阵中的映射点(小数)
2.如果在cur新表上的点到该映射点的距离与其他映射点比较后发现最小
3.输出cur新表上的点,给它赋值为旧表中的整数点的内容
4.遍历输出新表
*/
//创建一个二维数组ori
#include
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;
*/

你可能感兴趣的:(蓝桥杯,职场和发展,图像处理)