如何大幅提高遥感影像分辨率(Python+MATLAB)

前言:

算法:NSCT算法(非下采样变换)
数据:Landsat8 OLI 遥感图像数据
编程平台:MATLAB+Python
论文参考:毛克.一种快速的全色和多光谱图像融合算法[J].测绘科学,2016,41(01):151-153+98.DOI:10.16251/j.cnki.1009-2307.2016.01.028.
在这里插入图片描述

             左图:未进行融合的多光谱真彩色合成                              右图:利用NSCT变换后的多光谱真彩色合成

算法概述

  • (1)上采样低分辨率多光谱图像LRM,使其和全色图像HRP的分辨率相同,记为LRM杠;
  • (2)根据第i个多光谱波段LRMi杠来匹配全色图像得到新的图像HRPi杠;
    在这里插入图片描述
  • (3)使用NSCT变换两层分解HRPi杠,得到低频分量和细节子带;
  • 此处虽然说的是两层分解,但是我找遍了资料,还是不能理解是怎么得出。但是考虑到是低频分量,于是我利用的高斯模糊,方差为20,提取出了全色波段的低频部分。
    在这里插入图片描述
                                          图:全色波段的低频分量
  • (4)提高全色高频信息HF,即
    在这里插入图片描述
  • (5)按比例投影高频信息HF至LRMi杠中,得到融合图像HRMi
    在这里插入图片描述

matlab批量读取遥感影像并将影像矩阵存入.mat文件中:

clc;clear all;
file_path="C:\Users\稳魂\Desktop\data\";
img_path_list = dir(strcat(file_path,'LC08_L1TP_118038_20130525_20170504_01_T1_B*.TIF'));
img_num = length(img_path_list);
fprintf('正在读取的图像为:\n');
data_base={};
name={};
if img_num > 0 for j = 1:img_num if j~=9img_name = strcat(file_path,'LC08_L1TP_118038_20130525_20170504_01_T1_B',int2str(j),'.TIF');pitch=geotiffread(img_name);name{j}=img_name;data_base{j}=pitch;fprintf('第%02d个:%s\n',j,img_name);elsej=j+1;endend
end
save("D:\pythonProject\data_base.mat","data_base");

Python主程序代码(NSCT融合算法)

附加解释:
def load_mat:读取matlab的mat文件,对全色波段影像进行均值、方差、低频分量提取操作;
def hsc_data: 对多光谱影像进行上述均值、方差操作,并进行NSCT算法对各多光谱影像进行融合。

# coding=utf-8
from typing import List
import scipy.io as scio
import numpy as np
import cv2 as cv# matlab//python混编.mat数据传递
# 读取.mat数据
def load_mat(path):data_data1 = scio.loadmat(path)band8_1 = data_data1['data_base'][0, 7]row1, col1 = band8_1.shape  # get band8 sizeprint(band8_1.shape)  # outputmiu_p1 = np.nanmean(band8_1)  # 计算均值std_p1 = np.nanstd(band8_1)  # 计算标准差# 获取图像的低频分量//高斯模糊L_p1 = cv.GaussianBlur(band8_1, (0, 0), 20)# cv.imwrite("my.tif", L_p)# print(miu_p)# print(std_p)return data_data1, row1, col1, miu_p1, std_p1, L_p1, band8_1def hsc_data(data1, row1, col1, miu_p1, std_p1, L_p1, band81):# band_list = []miu_i_list = []  # 均值std_i_list = []  # 标准差# HRP_dd_list = []  # 各个波段的HRP影像HF_list = []  # 各个波段的高频分量HRM_list = []  # 融合图像列表for i in range(0, 4):band = data1['data_base'][0, i]band = cv.resize(band, (col1, row1))# band_list.append(band)miu_i = np.nanmean(band)miu_i_list.append(miu_i)std_i = np.nanstd(band)std_i_list.append(std_i)HRP_dd = ((band81 - miu_p1) / std_p1) * std_i + miu_i# HRP_dd_list.append(HRP_dd)HF = HRP_dd - L_p1HF_list.append(HF)band_aver = np.mean(miu_i_list)HRM = band + (band / band_aver) * HFHRM_list.append(HRM)return miu_i_list, std_i_list, HF_list, HRM_listif __name__ == '__main__':path1 = r"D:\pythonProject\data_base.mat"data_data, row, col, miu_p, std_p, L_p, band8 = load_mat(path1)miu_i_l, std_i_l, HF_l, HRM_l = hsc_data(data_data, row, col, miu_p, std_p,L_p, band8)# print(HRM_l[1])# cv.imwrite('HRM_4.tif', HRM_l[3])

如下结果是NSCT变换前与变换的图,利用arcmap工具打开:

在这里插入图片描述

                                                    图:未进行NSCT变换的原图

在这里插入图片描述

                                                   图:进行NSCT变换后的图

matlab真彩色合成

clc;clear allHSM_2=uint16(imread("HRM_2.tif"));
HSM_3=uint16(imread("HRM_3.tif"));
HSM_4=uint16(imread("HRM_4.tif"));
hsm_img=cat(3,HSM_4,HSM_3,HSM_2);
imwrite(hsm_img,'HSM.tif','tif');
%% band2=imread("LC08_L1TP_118038_20130525_20170504_01_T1_B2.TIF");
band3=imread("LC08_L1TP_118038_20130525_20170504_01_T1_B3.TIF");
band4=imread("LC08_L1TP_118038_20130525_20170504_01_T1_B4.TIF");
band_img=cat(3,band4,band3,band2);
imwrite(band_img,'BAND.tif','tif')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/101868.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s deployment创建pod流程图

参考 k8s 创建pod和deployment的流程 - SoulChild随笔记

TCP的可靠性之道:确认重传和流量控制

TCP 全称为 Transmission Control Protocol(传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议,其中可靠性是相对于其他传输协议的优势点。TCP 为了确保数据传输的可靠性主要做了以下几点: 发送确…

【vue3+ts项目】配置husky+配置commitlint

上一篇文章中配置了eslint校验代码工具 【vue3ts项目】配置eslint校验代码工具,eslintprettierstylelint 1、配置husky 每次手动执行命令才能格式化代码,如果有人没有格式化就提交到远程仓库,这个规范就起不到作用了,所有需要强…

Java日志框架概览

SLF4J 提供统一的日志门面API,即图中紫色部分,实现中立的日志记录API 桥接功能,蓝色部分,把各种日志框架API(绿色部分)桥接到SLF4J API。这样即便你的程序中使用各种日志API记录日志,最终都可桥…

带你了解SpringBoot---开启Durid 监控

文章目录 数据库操作--开启Durid 监控整合Druid 到Spring-Boot官方文档基本介绍Durid 基本使用代码实现 Durid 监控功能-SQL 监控需求:SQL 监控数据SQL 监控数据-测试页面 Durid 监控功能-Web 关联监控需求:Web 关联监控配置-Web 应用、URI 监控重启项目 Durid 监控功能-SQL 防…

进程调度和进程切换——《王道考研》

一、王道书咋说 二、chatgpt咋说 进程调度和进程切换是多道程序操作系统中两个关键的概念,它们在处理多个进程时起着不同的作用。 2.1进程调度是指: 操作系统根据一定的调度算法,从就绪态的进程队列中选择一个进程来占用CPU资源&#xff0…

最新消息:谷歌将在Chromebook上运用UWB技术,无线通信更上一层

超宽带(UWB)技术是一种创新的短距离无线通信技术,具有高速数据传输和精确定位物体位置的优势。尽管该技术已经存在一段时间,但最近开始广泛应用于各种设备中。据最新报道,Pixel Watch 2可能会搭载UWB模块,这…

商城-学习整理-高级-性能压测缓存问题(十一)

目录 一、基本介绍1、性能指标2、JMeter1、JMeter 安装2、JMeter 压测示例1、添加线程组2、添加 HTTP 请求3、添加监听器4、启动压测&查看分析结果 3、JMeter Address Already in use 错误解决 二、性能监控1、jvm 内存模型2、堆3、jconsole 与 jvisualvm1、jvisualvm 能干…

20230822 Windows上使用find_package引入OpenCV报错

报错信息 打开Cmake项目时,find_package 报错: Found OpenCV Windows Pack but it has no binaries compatible with yourconfiguration.You should manually point CMake variable OpenCV_DIR to your build of OpenCVlibrary.原因 大概率原项目是在 …

发布完体验版以后,出现接口调用失败,但是在本地开发环境中可以正常访问的情况,解决办法

1.一般解决办法 通过打开微信小程序调试模式 进行调用,但这会有些许问题,出现vConsole按钮**,影响美观** 如图所示: 1.1.进入小程序 点击右上角的3个点儿 1.2.点击开发调试 1.3.点击打开调试 1.4.显示出vconsole按钮&#xf…

Fastadmin框架 聚合数字生活抵扣卡系统v2.8.6

【2.8.6更新公告】 1.【优化】优化已知问题。 2.【新增 】新增区县影院。

Docker入门

1. 什么是docker docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件、程序)的过程。docker自己本来是运行在操作系统上一个程序软件…

软考高级系统架构设计师(二)计算机操作系统

【原文链接】软考高级系统架构设计师(二)计算机操作系统 2.1 进程管理 2.1.1 操作系统的三个重要作用 管理计算机中运行的程序和分配各种软硬件资源为用户提供友善的人机界面为应用程序的开发和运行提供一个高效的平台 2.1.2 操作系统的四个特征 并…

jmeter HTTP请求默认值

首先,打开JMeter并创建一个新的测试计划。 右键单击测试计划,选择"添加" > “配置元件” > “HTTP请求默认值”。 在HTTP请求默认值中,您可以设置全局的HTTP请求属性,例如: 服务器地址&#xff1a…

加速乐(__jsl_clearance_s)动态cookie生成分析实战

文章目录 一、写在前面二、抓包分析三、逆向分析 一、写在前面 加速乐(JSL)是阿里推出的一项反爬虫服务,其生成cookie的原理基于浏览器的行为特征 我们知道普通网站生成cookie是在请求时生成,而它先生成cookie,然后向服…

allegro输出.IPC文件

1、ipc文件的导出 板厂会使用cam软件生产一个网表文件;如果传递给板厂的数据中也有一个IPC文件,板厂将对两个网表文件进行对比;提高生产的安全性,准确性; 1,PCB软件输出的光绘文件,有时会变异&a…

JUC--线程池

目录 一、线程池的介绍 二、线程池的创建 三、特殊线程池 3.1.CompletionService异步处理 3.2.ThreadPoolExecutor 3.3 ForkJoinPool 虽然多线程的技术大大帮助了程序运行的效率,但是在太多的线程的创建与销毁下,系统的开销也将会是非常庞大的。所以…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

Python土力学与基础工程计算.PDF-隧道涌水量

Python 求解代码如下: 1. # 定义参数 2. A 2000 # 地表面积,单位:平方米 3. S 10 # 截面积,单位:平方米 4. h 500 # 年地下径流深度,单位:毫米 5. 6. # 转换单位 7. h h / 1000 # 单…

基于51单片机直流电机PWM调速液晶1602显示设计

一、系统方案 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等…