您现在的位置是:主页 > news > 成都开发网站/沧州seo公司

成都开发网站/沧州seo公司

admin2025/5/22 10:39:25news

简介成都开发网站,沧州seo公司,日本做a视频网站,人才网站建设方案前言刚刚我们用python实现了形态学建筑物指数MBI提取建筑物:馨意:python实现形态学建筑物指数MBI提取建筑物​zhuanlan.zhihu.comMBI 算法利用建筑物的亮度、对比度、方向等特征来提取建筑物,提取效果较好,但其结果的同质区域内部…

成都开发网站,沧州seo公司,日本做a视频网站,人才网站建设方案前言刚刚我们用python实现了形态学建筑物指数MBI提取建筑物:馨意:python实现形态学建筑物指数MBI提取建筑物​zhuanlan.zhihu.comMBI 算法利用建筑物的亮度、对比度、方向等特征来提取建筑物,提取效果较好,但其结果的同质区域内部…

078dced6a2c40447be3c80163398ea70.png

前言

刚刚我们用python实现了形态学建筑物指数MBI提取建筑物:

馨意:python实现形态学建筑物指数MBI提取建筑物​zhuanlan.zhihu.com
1637deda1ee640d0510df323623d37a5.png

MBI 算法利用建筑物的亮度、对比度、方向等特征来提取建筑物,提取效果较好,但其结果的同质区域内部和外部均存在大量噪声点。针对该问题,可以将其结合超像素分割算法进行改善[1]

原理

先利用SLIC 算法对遥感影像进行分割生成具有同质像素的超像素区域,然后利用MBI 算法对遥感影像进行处理生成形态学建筑物指数灰度图,再计算每个超像素区域内的建筑物指数均值,当均值超过某一指定阈值时即可认为该区域是建筑物。

实验数据

与MBI单独算法数据一致。

e78cb526391f428b27e4cff40b22a2af.png
test.jpg

代码

from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
from skimage.filters import threshold_otsu
import numpy as np#  原图像
image_path = r"test.jpg"
#  MBI结果
MBI_path = r"test_mbi.jpg"
#  超像素分割图像
mark_bound_path = r"test_mark_bound.jpg"
#  建筑物提取结果图像
buildingPath = r"test_buliding_slic.jpg"
#  分割超像素数目(大致)
numSegments_set = 100
#  用于图像每个维度的预处理的高斯平滑核的宽度
#  值越大超像素对象越趋于直线化
sigma = 2width, height, bands, image, geotrans, proj = readTif(image_path)
width, height, bands, MBI, geotrans, proj = readTif(MBI_path)
#  转换成skimage图像格式
image = image.swapaxes(1, 0)
image = image.swapaxes(1, 2)
#  应用slic算法并获取分割结果
segments = slic(image, n_segments = numSegments_set, sigma = sigma)
#  为原图像画上超像素边界
mark_bound = mark_boundaries(image, segments)
#  转换为gdal格式
mark_bound = mark_bound.swapaxes(1, 0)
mark_bound = mark_bound.swapaxes(0, 2)
writeTiff(mark_bound, geotrans, proj, mark_bound_path)#  真实分割数目
numSegments_true = np.max(segments) + 1
#  来存储每个超像素的MBI均值
averageValue = []
#  循环遍历每个超像素
for i in range(numSegments_true):#  通过每个超像素的MBI总和和像素个数计算均值sum_i = 0num_i = 0for w in range(width):for h in range(height):if(segments[h][w] == i):num_i += 1sum_i += MBI[h][w]averageValue.append(sum_i / num_i)#  将均值投射到对应像素位置
MBI_aver = np.array(averageValue)[segments.astype(np.uint8)]
#  OUST计算阈值
thresh = threshold_otsu(MBI_aver)
MBI_aver[MBI_aver>thresh] = 255
MBI_aver[MBI_aver<=thresh] = 0
MBI_aver = MBI_aver.astype(np.uint8)
writeTiff(MBI_aver, geotrans, proj, buildingPath)

354c51170ca71476b239d00dc0a0bdc7.png
test_mark_bound.jpg

ee45bafbbe0f6068eaaafd43414d938f.png
test_buliding_slic.jpg

可以看到,引入超像素后结果明显变好了好多。

参考

  1. ^魏旭,高小明,岳庆兴,郭正胜.一种结合MBI和SLIC算法的遥感影像建筑物提取方法[J].测绘与空间地理信息,2019,42(10):100-103.