2019武大国重考研地理信息(GIS,资源与环境)复试上机题目分享

2019武大国重考研地理信息系统专硕(测绘工程/资源与环境)(GIS)复试上机题目分享

1.前言

  有天晚上睡不着,突然想起来考研复试上机的题目到现在都没解决,于是开始回忆当时的解法,并思考新的思路。想不到的是很快有了一个自己认为还不错的方案,起码相对于当时的解法。在此记录。

2.题目要求

  原题目要求用C语言实现均值滤波算法,已经给出的是整个项目工程,其中函数,头文件,数据都已经写好了(数据是一个8×8的二维数组),用VS打开可以直接运行。我们需要做的就是在两个函数里面填代码实现功能。第一个函数实现模板为3×3的均值滤波,第二个则进行通用化,实现n*n大小的均值滤波。
  个人认为题目还是比较简单的,只要会基础的C语法,把思路描述出来就好了。甚至只写注释都是会给分的,下来之后分数也普遍偏高,所以你懂的,并不是越好的学校会越为难大家。

3.新旧思路

3.1旧思路

  考虑到对数据中间部分和边界滤波是不同的,因为中间的一部分可以直接查找周围的数值求和并平均,而边界上的值是缺的,比如第一行数据缺了上面的一行,最后一行缺了最下面一行。其中每一行列的情况也不同,以8×8数组为例,(0,0)和(0,7)一个左边缺一个右边缺。所以对数据分情况讨论。大概分成最中间部分 + 4个顶点 + 4条边界 9部分,依据每一类的不同情况计算相应的和。
  这种思路还是比较复杂的,当时两个小时3×3模板的基本做完了,N×N模板的只做了一半,因为没时间了。

3.2新思路

  考虑到均值滤波在边界处需要进行填充后操作,突然想到如果填充成一个新的数组,即把边界扩充,原数组的大小正好是现数组可以直接进行求和的大小,在这个数组上进行操作,那不是就不用分情况了!
为了方便理解,我放出原始数组和扩充后的数组图片。这里边界全部是0,还没有填充,可以直观对比。
原始数组
原始数据赋值后的数组
  下一步就是对边界填充实际数值了,这也是有点麻烦的一步。如果是边界0填充的方式,那就简单很多了,省下一半工作。而现在使用最邻近边填充的话,仍然需要分情况对其赋值。这里就不展开讲了,主要是分上下左右4种情况,具体看最后的代码吧
滤波结果

4. 总结

  这个小代码还是很有趣的,对我来说有点意义。如果能帮到其他人就更好了大佬们有其他意见欢迎指点!目前没有优化,有些地方是不够简洁的。另外,还没有参考网上其他人的解决方案,等后面再补充。

5.全部代码

import numpy as np


# 创建一个数组,用来进行均值滤波
n = 8
arr = np.zeros((n, n))
for i in range(n):
    for j in range(n):
        arr[i, j] = i + j*j
print('原数组----------')
print(arr)


# 均值滤波算法。array为计算的数组,d为滤波模板的长度(d*d),d为奇数
def filtering(array, d):
    # 首先对原始数组进行扩充,以相邻边的值填充边界
    new_arr = np.zeros((len(array)+int(d/2)*2, len(array)+
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值