遥感图像处理——仿射变换,坏值删除或者填充(不直接按照某值填充,而是按照最近点的值填充)

本文介绍了遥感图像处理中的仿射变换,用于解决图像的几何纠正问题,特别是去除图像边缘的无效值或零值。通过Python的OpenCV库实现仿射变换,并探讨了如何处理变换后仍存在的无效值,如使用条件筛选和最近邻插值法进行数据填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

有的时候,我们想要计算指标,我们在裁剪出来以后发现图像是Geotiff,是具有地理坐标的。而利用shp裁剪或者用行列等裁剪方法裁剪出来的结果是一个长方形(往往是带有无效的值的)。如下图中左图所示,我们想将其转换为右图形式,以便于防止和其他图像一起计算某些结果的时候(混淆矩阵,比如另外一幅图像没有白边)。这个时候就需要使用仿射变换来解决这个问题。
在这里插入图片描述


一、仿射变换

1.什么是仿射变换

图像各种变换的概念参考链接
整理资料为:
(1)图像的几何变换主要分为三类:刚性变换、仿射变换和透视变换
在这里插入图片描述
笔者加入:可以看到刚性变换其实真的是“刚的”,只能旋转平移等;而仿射变换,有一种弹性的感觉,就是这个长方形的四个顶点是活动的,可以转;而透视变换就有了三维空间的感觉。

(2)图像基本变换包括:平移(Translation)、缩放(Scale)、旋转(Rotation)、翻转(Flip)和错切(Shear)

(3)其中错切的概念指的是:
在这里插入图片描述
(4)仿射变换是由:平移+旋转+缩放+错切组成的。

(5)仿射变换原理:矩阵的运算。具体见上面链接。

因此要想将上述前言中的图像摆正,就必须经过仿射变换

二、python-opencv实现仿射变换

1.使用python-opencv实现反射变换

实现仿射变换的代码可以参考这个链接

上面这个链接写的非常好,上面的链接给出了对图像实现平移,旋转,缩放,翻转的代码。直接参考就可以了,而且博主还封装好了函数,非常好用,点赞!!!

直接使用就可以了。

三、仿射变换后对无效值/零值的处理

1.有的时候虽然你对图像已经用过了仿射变换,但是白边值还有可能有分布的。比如说前言中的那两幅图。左边是原图,右边是我经过方法和旋转后的图像,但是两侧仍然有白边存在。(然而我已经不能再放大了,在方法有些值就要丢失了。)
在这里插入图片描述

2.这个时候就要考虑如何消除数组中不要的值了
参考链接为:NumPy数组ndarray中提取,删除满足条件的元素,行和列Numpy数组(ndarray)中含有缺失值(nan)行和列的删除方法
总结:上面的链接中从以下几个角度对如何删除或替换数组中的元素或者行列做了说明:(这里只总结结论,具体例子和用法得看链接)
(1)提取满足条件的元素,请使用ndarray [条件表达式],将返回返回一个展平的一维数组
(2)numpy.all():提取所有元素均满足条件的行/列,返回的是行或列满不满足条件,满足条件就True,不满足就False
numpy.any():提取具有至少一个满足条件的元素的行/列
(3)将负运算符〜添加到条件中,则将提取不满足条件的元素,行和列。这等效于删除满足条件的元素/行/列
(4)使用np.delete()将目标ndarray,删除指定索引的行或者列
(5)组合使用np.delete()和np.where()可以删除满足条件的行和列或者元素
(6)对于多种条件,可以使用&或|连接。

我使用的删除前言中作图的百变的方法是使用使用负数运算符。
第一行代码中axis= 1代表判断哪一行满足/不满足条件。我使用了np.all(),意思就是必须是哪一行全部满足或者不满足某种条件时才执行删除操作。因为我又使用了负操作符,所以第一句话的意思就是判断哪一行全部都等于0((a==0).all(axis=1)的作用),把不满足全行等于0的行留下(a【-某条件】的作用,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值