遥感影像道路提取

前言

  • 遥感影像道路提取技术在多个领域具有极其重要的应用价值。在城市规划中,它能够快速更新城市道路网络,为城市扩展和土地利用规划提供精准的数据支持,帮助规划者更好地理解城市空间结构和发展趋势。在交通管理方面,该技术可以优化交通流量分析,通过实时监测道路状况,为交通信号控制和拥堵管理提供决策依据,提升城市交通运行效率。在灾害应急领域,遥感影像道路提取能够辅助灾害评估与救援路径规划,快速定位受损道路和通行路径,为救援行动争取宝贵时间。此外,它还支持道路规划与设计,通过提供高精度的道路网络数据,帮助工程师进行更合理的道路布局和基础设施建设。在农业与农村地区,该技术可用于道路规划,促进农村交通网络的优化和农业资源的高效利用。同时,遥感影像道路提取为智能交通和自动驾驶提供了高精度地图,确保车辆能够准确识别道路边界和交通标志,提升行驶安全性。随着技术的不断发展,遥感影像道路提取的应用将更加广泛,为社会经济的可持续发展提供强有力的数据支持。

一、环境配置

基于深度学习的图像处理,几乎都面临着一个问题,那就是环境的配置,博主亦是如此。
首先说一下,博主的显卡是RTX5080,原先的电脑是3050的,本来利用第二部分的代码是可以利用3050处理的,但是由于换成了5080的,反而处理不了了,因此,博主就发现cuda可能装的不合适,只能升级到最新的12.8.
在这里插入图片描述
由于显卡的架构比较新,旧版本的torch还没有支持。就会出现上面的这种情况。这时候,就先看了一下自己的电脑的cuda的最高可到12.8,所以就下载了下面这几个。
在这里插入图片描述
cuda12.8
在这里插入图片描述
cudnn
在这里插入图片描述
直接csdn上搜索如何安装即可。给一个范例

安装anaconda,官网
在这里插入图片描述
在anaconda里,创建一个pytorch_env的环境:

conda create –n pytorch_env python=3.9

在这里插入图片描述
输入y
在这里插入图片描述
激活一下环境

conda activate pytorch_env

安装pytorch,官网
我们可以在conda里用这段代码去安装,但是下载速度特别缓慢,因为这个库可能是新出的,所以其他的清华源之类的还不存在。

 pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

所以,我就想着用离线安装的方法 在这里插入图片描述
离线下载: 网址
torch2.8.0
torchaudio2.6.0
torchvision0.22.0
在这里插入图片描述
下载后,直接如下离线安装,三个都是如此。
在这里插入图片描述
安装好后进行验证即可

python
>>> import torch # 如果pytorch安装成功即可导入
>>> print(torch.cuda.is_available()) # 查看CUDA是否可用
>>> print(torch.cuda.device_count()) # 查看可用的CUDA数量
>>> print(torch.version.cuda) # 查看CUDA的版本号

显示为true即说明安装成功。

二、代码下载

原始代码
感兴趣的朋友可以直接去这里下载:

> https://github.com/zlckanata/DeepGlobe-Road-Extraction-Challenge

三、数据下载

遥感影像道路提取数据集:
数据集介绍
网址:http://deepglobe.org/challenge.html

可以直接点击下载划分好的数据集下载后的数据
这里提供另外一个下载地址

数据集下载连接:
链接:https://pan.baidu.com/s/1Gt2L4N_bq0wmfc50ke1QcQ
提取码:arq2

在深度学习中,大尺寸图像会占用大量内存,裁剪到较小的尺寸可以减少内存使用,提高计算效率。

四、影像裁剪

import os
from skimage import io, transform

import cv2
import numpy as np

image_dir = 'dataset/train'

image_list = os.listdir(image_dir)

im_sz = 512  # 要分成的小块大小
step = im_sz  # 512    #相当于没有overlap,重叠的像素数为0

save_dir = 'dataset/train_seg'
# 如果这个文件夹不存在,则创建出来
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

times_all = 0

for image_name in image_list:
    img, mak = None, None
    if (image_name.split('.')[1] == 'jpg'):
        img = io.imread(os.path.join(image_dir, image_name))
        h, w, _ = img.shape
        print(img.shape)

    else:
        mask = io.imread(os.path.join(image_dir, image_name), as_gray=True)
        print(mask.shape)
        h, w = mask.shape

    name = image_name.split('_')[0]  # 把前面的图像编号取出来

    x_index = np.arange(0, h - im_sz, step).tolist()  # (0,1024-1024,768)
    y_index = np.arange(0, w - im_sz, step).tolist()

    print(x_index)

    # list[-1],表示列表最后一个元素,带负号的是从后往前找元素
    # 判断最后一个分割点是不是正好能够把图像右边界分割下来,若不是,加入
    if x_index[-1] != (h - im_sz):
        x_index.append(h - im_sz)
    if y_index[-1] != (w - im_sz):
        y_index.append(w - im_sz)

        # enumerate(),从0开始,0123·····
    for ind_x, col in enumerate(x_index):
        for ind_y, row in enumerate(y_index):

            if (img is not None):
                patch = img[col:col + im_sz, row:row + im_sz, :]
                print(col)
                print(col + im_sz)
                io.imsave(f'{save_dir}/{name}_{ind_x}_{ind_y}_sat.jpg', patch)
            else:
                patch_gt = mask[col:col + im_sz, row:row + im_sz]
                # 确保mask是uint8类型
                patch_gt = (patch_gt * 255).astype(np.uint8)  # 将浮点型转换为0-255的整数
                io.imsave(f'{save_dir}/{name}_{ind_x}_{ind_y}_mask.png', patch_gt)

五、数据划分

将标注的遥感图片划分为训练集、验证集和测试集。

import os
import shutil
import random

# 源文件夹路径
source_folder = 'dataset/train_seg'

# 目标文件夹路径
train_folder = 'dataset/train_set'
val_folder = 'dataset/val_set'
test_folder = 'dataset/test_set'

# 创建目标文件夹
os.makedirs(train_folder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值