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


test.jpg 
test_mark_bound.jpg 
test_buliding_slic.jpg

前言
刚刚我们用python实现了形态学建筑物指数MBI提取建筑物:
馨意:python实现形态学建筑物指数MBI提取建筑物zhuanlan.zhihu.com
MBI 算法利用建筑物的亮度、对比度、方向等特征来提取建筑物,提取效果较好,但其结果的同质区域内部和外部均存在大量噪声点。针对该问题,可以将其结合超像素分割算法进行改善[1]。
原理
先利用SLIC 算法对遥感影像进行分割生成具有同质像素的超像素区域,然后利用MBI 算法对遥感影像进行处理生成形态学建筑物指数灰度图,再计算每个超像素区域内的建筑物指数均值,当均值超过某一指定阈值时即可认为该区域是建筑物。
实验数据
与MBI单独算法数据一致。

代码
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)


可以看到,引入超像素后结果明显变好了好多。
参考
- ^魏旭,高小明,岳庆兴,郭正胜.一种结合MBI和SLIC算法的遥感影像建筑物提取方法[J].测绘与空间地理信息,2019,42(10):100-103.