当前位置: 首页 > news >正文

【记录】Tiff图像的前处理,median blur filter 及 linear stretch

文章目录

    • 读取Tiff
    • median blur filter 中值滤波器
    • 替换百分位值
    • 值域变成[0,255]

从Google Earth Engine上下载的sentinel-1遥感影像(float32)。对于SAR影像在使用前可以做如下前处理:

  1. 去除SAR噪点
  2. 替换百分位2%以下及百分位98%以上的点
  3. linear stretch 将sentinel-1的值域转化为0-255

当然也可以不做,应该不影响。

读取Tiff

import os
import cv2
import numpy as np
from osgeo import gdal
from scipy import ndimage
import matplotlib.pyplot as plt
def read_Tiff(filename):
    dataset = gdal.Open(filename)
    im_width = dataset.RasterXSize
    im_height = dataset.RasterYSize
    im_data = dataset.ReadAsArray(xoff = 0, yoff = 0, xsize = im_width, ysize = im_height)
    return dataset, im_data
    
tiff_file = $FILE_DIR
tiff_dataset, tiff_data = read_Tiff(tiff_file)

median blur filter 中值滤波器

median blur filter 是一种去除SAR影像噪点的方法,具体是用 以某一个点为中心,周围m*n大小的矩阵的中值来代替某一个点的值。具体可以用scipy中的ndimage实现。

filter_data = ndimage.median_filter(tiff_data, size = 5, mode = 'nearest')

左图为原图,右图为中值滤波器作用后的结果。

左图为原图,右图为中值滤波器作用后的结果。

替换百分位值

我也不知道为什么要做这个,但论文里是这么写的。好像是可以边缘增强。

import copy
per2 = np.percentile(filter_data[np.isnan(filter_data)==False],2)
per98 = np.percentile(filter_data[np.isnan(filter_data)==False],98)
print(per2, per98)
>> -21.94152530670166 2.2695427560806287

new_tiff_data = copy.deepcopy(filter_data)
new_tiff_data[new_tiff_data < per2] = per2
new_tiff_data[new_tiff_data > per98] = per98
print(np.nanmin(new_tiff_data), np.nanmax(new_tiff_data))
>> -21.941525 2.2695427

左图为中值滤波器作用后的结果,右图为百分数作用后的结果。

左图为中值滤波器作用后的结果,右图为百分数作用后的结果。

值域变成[0,255]

将值域为[-22.294464, 2.497968]的tiff图像转换到[0,255]。这里使用最简单的linear stretch。可以用专门的函数实现:cv2.normalize(),参考这里,也可以按以下关系式自己写:
x ′ = x − m i n m a x − m i n ∗ ( m a x ′ − m i n ′ ) + m i n ′ x' = \frac{x-min}{max-min} * (max'-min') + min' x=maxminxmin(maxmin)+min 其中,max和min是原数组最大最小值,max‘ min’ 对应255 和 0。

value_convert_data = ((new_tiff_data - np.nanmin(new_tiff_data))/(np.nanmax(new_tiff_data) - np.nanmin(new_tiff_data))) * 255 + 0

在这里插入图片描述

转换为0-255以后的结果。
最后画一下像素的直方图
hist = cv2.calcHist([value_convert_data[np.where(np.isnan(value_convert_data)==False)]],[0],None,[256],[0,255])
plt.figure()
plt.plot(hist)

不做百分位处理的直方图

不做百分位处理的直方图。

做百分位处理的直方图

做百分位处理的直方图。

相关文章:

  • wordpress默认后台登陆/百度百度一下
  • 重庆妇科医院排行榜/北京网站优化外包
  • wordpress 数据导出/抖音搜索优化
  • 中国机械加工网网址/搜索引擎优化中的步骤包括
  • 个人建设网站制作/三亚网络推广
  • 网站建设与网页制作案例教程/app推广怎么联系一手代理
  • 一个select死锁问题
  • 试卷安全分发系统
  • 酒水销售网站
  • 【MQTT】mqtt + go + M5Stack + SSR 远程灯控程序
  • 3DEXPERIENCE平台2023新功能揭秘!Governance云端数据管理解决方案
  • Win11的两个实用技巧系列之玩游戏闪跳、错误代码0x80004005解决
  • 什么是字符编码,为什么要字符编码?
  • LinkedList api
  • pybind11学习 | 面向对象编程
  • -防火墙-
  • 寒假集训题目集二A - 产生冠军
  • Spring5框架总结学习(从入门到进阶)-AOP