【Crecimiento de la región】Código

El siguiente es el código completo del método de crecimiento de regiones basado en 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)

Este código implementa el reconocimiento óptico de objetivos de imágenes basado en el método de crecimiento de regiones. Los pasos específicos son los siguientes:

  1. Lea la imagen óptica original y conviértala en una imagen en escala de grises.
  2. Establezca las coordenadas del punto de semilla de entrada y el umbral de crecimiento.
  3. Defina region_growuna función nombrada para implementar el método de crecimiento de la región, y los parámetros de entrada son la imagen óptica original, los puntos de semilla y el umbral de crecimiento. El concepto de máscara se utiliza en la función de expandir gradualmente el área del deslizamiento hasta que se cumplan las condiciones para detener el crecimiento. Finalmente regresamos a la máscara de la zona del desprendimiento.
  4. Llame a la función en la función principal region_growpara obtener la máscara del área del deslizamiento de tierra.
  5. La máscara del área del deslizamiento de tierra se fusiona y se muestra con la imagen óptica original para facilitar la observación.

Tenga en cuenta que este código solo proporciona una implementación básica del método de crecimiento de regiones. En la aplicación real, es posible que sea necesario optimizar el algoritmo de crecimiento en función de circunstancias específicas.

Supongo que te gusta

Origin blog.csdn.net/qq_38308388/article/details/132628819
Recomendado
Clasificación