通过分类算法得到遥感专题分类结果后,结果图中可能存在许多孤立的像素点。这些像素点占比不大,但是会导致结果的可视化效果很差,需要在实际应用中去除。
而ArcGIS软件并没有提供很好的函数或解决方案。
本程序主要使用了gdal库来完成对碎斑的清除。主要思想是先计算像素的连通域,然后将小于某个阈值的区域用周围的像元值进行替换。
完整代码如下:
"""
#
# 实现对分类结果的椒盐噪声(碎斑)去除
# 输入图像应该是分类图,像素值为整数
#
@author: lxy
"""
from osgeo import gdal
import shutil
import os
import time
# 1 文件复制到新文件夹中
src_image = 'D:/test/classfication_2021.tif'
filename = os.path.basename(src_image)
src_path = os.path.dirname(src_image)
out_folder = src_path + '/result'
dst_image = os.path.join(out_folder,filename)
if not os.path.exists(out_folder):
os.makedirs(out_folder)
shutil.copy(src_image,dst_image)
print('已加载数据')
st = time.time()
# 2 对文件夹中的文件处理
## 参数设置
remove_pixels =80 #碎斑像素
neighbours = 8 #连通域, 4或8
Image = gdal.Open(dst_image, 1) # open i