• 【区域生长】代码


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

    1. import numpy as np
    2. import cv2
    3. # 读入原始光学影像并转为灰度图像
    4. img = cv2.imread('optical_image.jpg', cv2.IMREAD_GRAYSCALE)
    5. # 设定种子点(滑坡区域)
    6. seed_point = (200, 200)
    7. # 设定生长阈值
    8. threshold = 50
    9. # 定义函数实现区域生长法
    10. def region_grow(img, seed_point, threshold):
    11. # 定义8邻域(包括中心点),用于判断种子点周围的像素是否属于滑坡区域
    12. neigbors = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
    13. # 构造滑坡区域的掩膜(初始状态全部为0)
    14. mask = np.zeros(img.shape, dtype=np.uint8)
    15. # 将种子点置为255(滑坡区域)
    16. mask[seed_point] = 255
    17. # 开始生长
    18. while True:
    19. # 复制掩膜
    20. new_mask = mask.copy()
    21. # 遍历掩膜中所有的像素
    22. for i in range(img.shape[0]):
    23. for j in range(img.shape[1]):
    24. # 如果该像素已标记为滑坡区域,则检查它周围的8个像素
    25. if mask[i, j] == 255:
    26. for neigbor in neigbors:
    27. # 计算8邻域中每个像素的坐标
    28. x = i + neigbor[0]
    29. y = j + neigbor[1]
    30. # 如果该像素在图像范围内且未被标记,并且其与种子点之间的差值小于阈值,则标记为滑坡区域
    31. if x >= 0 and y >= 0 and x < img.shape[0] and y < img.shape[1]:
    32. if mask[x, y] == 0 and abs(int(img[x, y]) - int(img[i, j])) < threshold:
    33. new_mask[x, y] = 255
    34. # 如果掩膜未发生变化,则生长结束
    35. if np.array_equal(mask, new_mask):
    36. break
    37. # 更新掩膜
    38. mask = new_mask
    39. # 返回滑坡区域掩膜
    40. return mask
    41. # 调用区域生长函数获取滑坡区域掩膜
    42. mask = region_grow(img, seed_point, threshold)
    43. # 显示滑坡区域掩膜和原始光学影像(滑坡区域为红色)
    44. img_with_mask = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    45. img_with_mask[np.where(mask == 255)] = [0, 0, 255]
    46. cv2.imshow('Slip Area', img_with_mask)
    47. cv2.imshow('Original Image', img)
    48. cv2.waitKey(0)

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

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

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

  • 相关阅读:
    【JavaWeb】
    【图论】SPFA求负环
    甲骨文真的要开放Java EE?
    最近公共祖先LCA的三种求法
    随手记录第十一话 -- PHP + yii2 初体验
    关于统信UOS不能使用“modprobe brd”创建内存盘的问题
    【专利】一种光伏加工产品缺陷检测方法
    数字货币--暗池
    vue axios封装并发请求
    Linux常用指令--查找指令
  • 原文地址:https://blog.csdn.net/qq_38308388/article/details/132628819