几个小结.

前段时间做算法优化。该算法主要功能为16位数据到8位数据的转换。

在日常生活中,电子设备展示的大多为256色影像,即8位影像。但部分无人机以及绝大部分卫星拍摄的都是16位数据,即65536色影像。然而,受限于显示器的色彩表达能力,在展示16位数据时,需要通过一些算法将其转为8位数据后再进行显示。在这个过程中,会造成影像信息的丢失,在遥感影像中尤为明显,常见表达形式为高亮区曝光。

2020年上半年写了一个算法,可以实现16位数据转为8位数据的过程中,信息不丢失。但缺点是算法复杂度和空间复杂度太高。2020年下半年一直在忙一些杂事,一直到2020年12月25日后才有时间对算法进行改造。

通过visual studio的性能检测器,发现算法主要耗时于影像的上下采样。由于opencv提供的上下采样函数结果与预期效果不一致,所以自己写了图像的上下采样函数。在编写的时候使用了openMP,实现了多核CPU的加速,CPU利用率可以达到80%以上,但在处理4GB大小的多光谱影像时,速度依旧很慢,耗时10分钟。因此,使用GPU对算法进行加速,使用cuda实现影像的上下采样,而在上下采样过程中,有滤波操作,而这,也是GPU擅长的。

将影像数据读取到GPU后,使用纹理内存绑定数据,好处是可以加速影像的卷积处理,不用担心数组越界错误。要注意的是纹理内存的大小,因为遥感影像尺寸较大,GPU不一定支持超大的纹理内存处理。在遇到这种情况时,通过将遥感影像切分,以小块为单位进行处理,可以规避GPU的硬件限制。但是,要注意块与块之间的相关性,不然分块处理的结果会存在马赛克、大花脸的情况。对于那种情况的处理,属于别的算法了。

通过GPU加速,算法运行效率提升了25~30%,但与用户提升3倍的目标还是有很远的距离。同时也因为算法本身确实存在较高空间复杂度和时间复杂度的问题,所以理论上速度提升空间也确实有限。只是目前除了超大影像(4GB),其他情况下的数据处理效率还行,所以后来就没对软件的算法模块进行更新。

第二个算法是计算航片之间的重叠区。计算航片重叠区的方法很多,但大多需要GPS信息作为辅助信息。当影像没有GPS辅助信息时,影像间重叠区的计算就有些困难了。

前段时间做项目,有一种古老的算法叫做“傅里叶梅林匹配算法”,该算法通过傅里叶变换计算,通过频谱分析,可以求出两幅影像间的平移、旋转、尺度比例等变换信息,可以用于影像间重叠区的计算。但算法瓶颈是,当无人机拍摄航线出现拐弯时,傅里叶梅林匹配算法就失效了。目前正在找低复杂度的算法完成拐弯影像的重叠区计算。

第三个是水域的特征点寻找,有的单位实现了水域特征点匹配。不知道是怎么实现的,如果自己也能做到,在行业里还是有点用的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值