【区域生长】代码

以下是基于Python的区域生长法完整代码:

python 复制代码
import numpy as np
import cv2

# 读入原始光学影像并转为灰度图像
img = cv2.imread('optical_image.jpg', cv2.IMREAD_GRAYSCALE)

# 设定种子点(滑坡区域)
seed_point = (200, 200)

# 设定生长阈值
threshold = 50

# 定义函数实现区域生长法
def region_grow(img, seed_point, threshold):
    # 定义8邻域(包括中心点),用于判断种子点周围的像素是否属于滑坡区域
    neigbors = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]

    # 构造滑坡区域的掩膜(初始状态全部为0)
    mask = np.zeros(img.shape, dtype=np.uint8)

    # 将种子点置为255(滑坡区域)
    mask[seed_point] = 255

    # 开始生长
    while True:
        # 复制掩膜
        new_mask = mask.copy()

        # 遍历掩膜中所有的像素
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                # 如果该像素已标记为滑坡区域,则检查它周围的8个像素
                if mask[i, j] == 255:
                    for neigbor in neigbors:
                        # 计算8邻域中每个像素的坐标
                        x = i + neigbor[0]
                        y = j + neigbor[1]

                        # 如果该像素在图像范围内且未被标记,并且其与种子点之间的差值小于阈值,则标记为滑坡区域
                        if x >= 0 and y >= 0 and x < img.shape[0] and y < img.shape[1]:
                            if mask[x, y] == 0 and abs(int(img[x, y]) - int(img[i, j])) < threshold:
                                new_mask[x, y] = 255

        # 如果掩膜未发生变化,则生长结束
        if np.array_equal(mask, new_mask):
            break

        # 更新掩膜
        mask = new_mask

    # 返回滑坡区域掩膜
    return mask

# 调用区域生长函数获取滑坡区域掩膜
mask = region_grow(img, seed_point, threshold)

# 显示滑坡区域掩膜和原始光学影像(滑坡区域为红色)
img_with_mask = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
img_with_mask[np.where(mask == 255)] = [0, 0, 255]
cv2.imshow('Slip Area', img_with_mask)
cv2.imshow('Original Image', img)
cv2.waitKey(0)

该代码实现了基于区域生长法的光学影像目标识别,具体步骤如下:

  1. 读入原始光学影像,并将其转为灰度图像。
  2. 设定输入种子点的坐标和生长阈值。
  3. 定义名为region_grow的函数实现区域生长法,传入参数为原始光学影像、种子点和生长阈值。在函数中运用掩膜的概念,逐渐将滑坡区域扩大,直到满足停止生长的条件。最终返回滑坡区域掩膜。
  4. 在主函数中调用region_grow函数获取滑坡区域掩膜。
  5. 将滑坡区域掩膜与原始光学影像合并并显示出来,方便观察。

注意,该代码仅提供了一个基本的区域生长法实现,实际应用时可能需要根据具体情况对生长算法进行优化。

相关推荐
火山引擎开发者社区2 小时前
技术速递|使用 GitHub Copilot CLI 构建 Emoji 列表生成器
人工智能
weelinking2 小时前
【产品】12_接入数据库——让数据永久保存
jvm·数据库·python·react.js·数据挖掘·前端框架·产品经理
codefan※3 小时前
干掉“幻觉“实战:如何构建企业级知识图谱增强 RAG
人工智能·知识图谱
wukangjupingbb3 小时前
传统基于药物 SMILES 序列和蛋白质氨基酸序列的 DTI(Drug-Target Interaction)预测方法的缺陷
人工智能
沪漂阿龙3 小时前
Codex 额度重置周期变化:AI 编程免费试玩时代正在结束
人工智能
程序大视界3 小时前
【Python系列课程】Python正则表达式(下):环视、命名分组与日志实战
开发语言·python·正则表达式
TickDB3 小时前
美股行情 API 接入避坑:REST 快照、WebSocket 推送、盘前盘后数据的边界
人工智能·python·websocket·行情数据 api
装不满的克莱因瓶3 小时前
深入理解卷积神经网络(CNN)——从原理到代码实践
人工智能·神经网络·cnn
完成大叔3 小时前
模块二,Agent知识图谱的工具链思考
人工智能
lauo4 小时前
ibbot手机发布:搭载poplang技术 + token节点经济,革新AI手机体验
人工智能·智能手机