python与建筑地铁结合_python实现形态学建筑物指数MBI与面向对象结合提取建筑物...

前言

刚刚我们用python实现了形态学建筑物指数MBI提取建筑物:馨意:python实现形态学建筑物指数MBI提取建筑物​zhuanlan.zhihu.com

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

原理

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

实验数据

与MBI单独算法数据一致。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 = 2

width, 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 = 0

num_i = 0

for w in range(width):

for h in range(height):

if(segments[h][w] == i):

num_i += 1

sum_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)test_mark_bound.jpgtest_buliding_slic.jpg

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值