最邻近插值法

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

 

/*
最邻近插值法,将一个   二维数组  由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;
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值