遥感影像语义分割——影像拼接、去背景

遥感图像语义分割——影像拼接和去除背景

文章目录

  • 遥感图像语义分割——影像拼接和去除背景
    • 1.影像拼接
    • 2.去除背景

之前的两篇文章收到不少朋友的私信,前面文章写的是使用模型训练前的工作,这篇文章介绍一下分割后处理的工作。


1.影像拼接

​ 影像拼接指的是当我们需要生成一个产品,如何将一张张的识别结果拼接(如果有需要的话可能还涉及遥感图像的拼接)。这里介绍在python中如何完成影像拼接的工作。直接上代码:

# 实现图像的拼接
# 两步走
# 1 先拼成一列一列的
# 2 再把拼好的列左右拼接起来
from PIL import Image
import os
import numpy as np
import random

# 输入图像的路径
path = r'E:/tif/test'
filenames = os.listdir(path)
three = []
four=[]
print(three)
print(four)
print("目录:",path)
print("图像的总个数:",len(filenames))
print('开始执行:')

# 定义计数的
i = 0
# 定义空字符串存储数组
list_a = []
# 转换为numpy数组
# 1 下面的for循环用于将图像合成列,只有一个参数,就是num_yx,每列有几行图像
#循环行
for m in range(61):
    #循环列
    for n in range(64):
        # 定义每列有几张图像
        num_yx = 64
        # i用于计数
        i +=1
        print("第%d张"%i)
        # t用于换行
        t = (i-1)//num_yx
        # 获取img
        im = Image.open(path + '/'+ '04_'+str(m)+'_'+str(n)+'.png').convert('RGB')
            # 转换为numpy数组
        im_array = np.array(im)
            # 如果取的图像输入下一列的第一个,因为每列是3张图像,所以1,4,7等就是每列的第一张
        if (i-1) % num_yx == 0:
                # list_a[t] = im_array
            list_a.append(im_array)

            # 否则不是第一个数,就拼接到图像的下面
        else:
            list_a[t] = np.concatenate((list_a[t], im_array), axis=1)

# 2 合成列以后需要将列都拼接起来
for j in range(len(list_a)-1):
    list_a[0] = np.concatenate((list_a[0], list_a[j+1]),axis=0)

im_save = Image.fromarray(np.uint8(list_a[0]))
im_save.save("x.png")
print("执行完毕")

2.去除背景

​ 当我们将所有的识别结果(分割结果)拼接起来后,以二分类为例,如果只想保留关注的区域。例如:做了水体的分割,最后想看一下遥感影像上哪些地方有水体,需要将背景去除。这里我提供了一种python去除背景的方法,当然你也可以导入到arcgis中使用关于栅格的操作,将背景区域的值的颜色设置为无颜色。

from PIL import Image
Image.MAX_IMAGE_PIXELS = None
import numpy as np
img2 = Image.open(r'E:\tif\test.png')
img2 = img2.convert('RGBA')
pixdata = img2.load()
for y in range(img2.size[1]):
    for x in range(img2.size[0]):
        if pixdata[x,y][0]==0 and pixdata[x,y][1]==0 and pixdata[x,y][2]<256:
           pixdata[x, y] = (0, 0, 0,0)
img2 = img2.convert('RGBA')
img2.save('x.png')

​ 上面的代码中,RGBA是关键的。必须要使用PIL将图像的格式转换为RGBA的格式。


到此为止,一些后处理工作大概步骤以及相关的python代码已经展示完毕。希望对大家有帮助

你可能感兴趣的:(语义分割,深度学习,python)