卫星遥感图像处理——保存tiff文件以及直方图均衡化

对图像处理后出现图像太暗可以采用直方图均衡化:

import numpy as np
from PIL import Image
from skimage import exposure
import tifffile as tf
import cv2
import imageio
from osgeo import gdal
import matplotlib.pyplot as plt

def cv_show(name, img):    # 定义展示图片的函数
    cv2.namedWindow(name, 0)
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

"""
保存tiff文件
:param out_path: 保存tif文件路径
:param in_data: 原始数据路径 或 数据array(h,w), array(c,h,w) 或 array(h,w,c) 要求c<h,w
:param tiff_sample: tif样本路径, 用于提供投影和变换
:param dtype: gdal数据类型, 默认自动根据输入识别
"""
def save_tiff(out_path, in_data, tiff_sample = None, dtype = None):
    # 数据
    if isinstance(in_data, str):
        in_data = imageio.imread(in_data)
    # 调整维度
    if len(in_data.shape) == 2:
        in_data = in_data.reshape(1, *in_data.shape)
        dim = 1
    elif len(in_data.shape) == 3:
        if in_data.shape[0] > in_data.shape[-1]:
            in_data = in_data.transpose(2, 0, 1)
        dim = in_data.shape[0]
    else:
        raise NotImplementedError
    # 检测类型
    if dtype is None:
        if in_data.dtype == np.dtype('uint8'):
            dtype = gdal.GDT_Byte
        else:
            dtype = gdal.GDT_Float32
    # 参照文件
    if isinstance(tiff_sample, str):
        tiff_sample = gdal.Open(tiff_sample)
    # 创建TIFF文件
    tiff_driver = gdal.GetDriverByName('GTiff').Create(out_path, *[i for i in in_data.shape[::-1]], dtype)
    if tiff_sample:
        tiff_driver.SetProjection(tiff_sample.GetProjection())  # 投影
        tiff_driver.SetGeoTransform(tiff_sample.GetGeoTransform())  # 变换
    # 写入数据
    for i in range(dim):
        tiff_driver.GetRasterBand(i + 1).WriteArray(in_data[i])
    tiff_driver.FlushCache()
    return

# 直方图均衡化
work_dir = 'G:\SPEI_RF-Dataset_test\spei12'      # 自己手动改spei n 对每个时间尺度的图片均衡化
path = f'{work_dir}\\spei_test_result.tif'
before = 'G:\SPEI_RF-Dataset_test\SPEI_1_200101.tif'        # 用于作为模板的样本
after = f'{work_dir}\\spei_light_12.tif'          # 自己手动改spei n 对每个时间尺度的图片均衡化
image = tf.imread(path)
equalized_image = exposure.equalize_hist(image)
# spei = tf.imread(before)       # 用于作为模板的样本读为用于测试的数组
save_tiff(after, equalized_image, before)
equalized_image[np.isnan(equalized_image)] = 0      # 只要有一个nan,计算出来的就都是nan,此处将nan转为0
im = Image.fromarray(equalized_image)
if im.mode == "F":
    im = im.convert('RGB')
np.save(f'{work_dir}\\spei_light_12.npy', arr = equalized_image)      # 存入
cv_show('spei_light', equalized_image)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MATLAB中加载遥感图像有多种方法。 一种常用的方法是使用imread函数加载图像。该函数可以直接读取各种格式的图像文件,包括常见的遥感图像格式,如TIFF、JPEG等。例如,要加载名为"image.tif"的遥感图像,可以使用以下命令: image = imread('image.tif'); 加载后,图像数据会存储在名为image的多维矩阵中,可以对该矩阵进行后续的处理和分析。 另一种方法是使用geotiffread函数加载地理空间参考的遥感图像。该函数可以读取包含地理坐标信息的图像文件。例如,要加载包含地理坐标信息的遥感图像文件"image.tif",可以使用以下命令: [image, R] = geotiffread('image.tif'); 其中,image是图像数据矩阵,R是一个地理参考对象,包含了地理坐标信息。通过R对象,可以获取图像的空间参考信息,如图像的坐标系、分辨率等。 此外,还可以使用其他专门针对遥感图像处理的MATLAB工具箱,如Image Processing Toolbox和Mapping Toolbox。这些工具箱提供了更多的图像处理和地理空间分析功能,可以对加载的遥感图像进行更详细的处理和分析。 综上所述,MATLAB提供了多种方法来加载遥感图像,用户可以根据具体的需求选择合适的方法进行图像处理和分析。 ### 回答2: MATLAB是一种功能强大的科学计算软件,可以用于加载和处理遥感图像。下面是一个简单的步骤,以指导在MATLAB中加载遥感图像。 首先,确保遥感图像已经保存在计算机中。可以将图像保存为常见的图像格式(如.jpg、.png或.tif格式)。 接下来,在MATLAB命令窗口中输入以下代码,加载遥感图像: ```matlab image = imread('image_path'); % 替换image_path为图像的完整路径 ``` 这将使用imread函数加载图像,并将其赋值给变量image。 然后,可以使用imshow函数在MATLAB中显示加载的图像: ```matlab imshow(image); ``` 这将在新的窗口中显示图像。 此外,还可以使用MATLAB的其他图像处理函数对遥感图像进行处理和分析。例如,可以使用imresize函数调整图像大小、imadjust函数进行图像增强,或者使用im2double函数将图像转换为double类型。 最后,在完成遥感图像的处理后,可以使用imwrite函数将图像保存到计算机: ```matlab imwrite(image, 'output_image_path'); % 替换output_image_path为保存图像的路径和名称 ``` 这将把处理后的图像保存到指定的路径和名称。 综上所述,通过使用MATLAB的imread函数可以加载遥感图像,并通过其他图像处理函数进行进一步处理和分析。最后,使用imwrite函数可以将图像保存到计算机。 ### 回答3: 要在MATLAB中加载遥感图像,可以使用imread函数。imread函数可以加载JPEG、PNG、GIF、TIFF等常见的图片格式。首先,确保遥感图像文件保存在计算机中。 使用imread函数来加载图像,语法如下: im = imread('图像文件路径'); 其中,'图像文件路径'是遥感图像文件的路径和文件名。 加载后的图像保存在一个矩阵变量im中。该矩阵中存储了图像的像素值信息,可以进行进一步的处理和分析。 例如,加载名为"remote_sensing_image.jpg"的遥感图像文件,可以使用以下代码: im = imread('remote_sensing_image.jpg'); 通过加载遥感图像到MATLAB中,可以进行各种图像分析和处理操作,如图像增强、分类、目标检测等。MATLAB提供了许多有用的函数和工具箱,可以方便地进行遥感图像分析和处理。 加载后,可以显示图像,例如使用imshow函数: imshow(im) 此外,MATLAB还提供了其他处理遥感图像的函数,如imwrite函数可以用于将处理后的图像保存为新的文件,imadjust函数可以进行图像对比度和亮度的调整等。 综上所述,要在MATLAB中加载遥感图像,可以使用imread函数,加载后的图像可以进行各种处理和分析操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值