图像数据处理25

六、 图像分割

6.2区域生长

6.2.1区域生长的基本概念:可以理解成先选择一个像素区域,然后将其邻接区域中相似程度高的像素合并进去,直到找不到可以合并的像素为止。其的主要优点是能够较为精准地将具有相同特征的联通区域分割出来。

6.2.2相似性判断的主要依据:设定一个阙值,计算每个候选像素的灰度值与已生长区域像素的平均灰度值之间的差的绝对值,要是这个值小于阙值,则认为相似程度高,将其合并到生长区域像素中去,反之则不进行合并。

6.3.3实际应用:

import cv2
import numpy as np


def region_growing(img, seed, threshold):
    """
    区域生长算法实现。

    参数:
        img: 输入图像,NumPy数组。
        seed: 种子点,格式为(x, y)。
        threshold: 生长阈值,决定相邻像素是否加入区域。

    返回:
        一个NumPy数组,表示区域生长的结果。
    """
    rows, cols = img.shape
    region = np.zeros((rows, cols), dtype=np.uint8)
    seeds = [seed]
    region[seed[0], seed[1]] = 255
    neighbors = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]

    while seeds:
        x, y = seeds.pop(0)
        for nx, ny in neighbors:
            nx, ny = x + nx, y + ny
            if 0 <= nx < rows and 0 <= ny < cols and region[nx, ny] == 0:
                # 确保像素值被转换为整数进行比较
                if abs(int(img[nx, ny]) - int(img[x, y])) < threshold:
                    region[nx, ny] = 255
                    seeds.append((nx, ny))

    return region


# 加载图像
img_path = 'taiyang2.jpg'  # 替换为你的图像路径
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)  # 以灰度模式读取图像

# 检查图像是否成功加载
if img is None:
    print("错误:无法加载图像。请检查文件路径。")
else:
    # 种子点和阈值
    seed = (100, 100)  # 替换为你的种子点坐标
    threshold = 20 # 替换为你的阈值

    # 执行区域生长算法
    result = region_growing(img, seed, threshold)

    # 缩小图像
    img_small = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
    result_small = cv2.resize(result, (0, 0), fx=0.5, fy=0.5)

    # 拼接图像
    concat_img = cv2.hconcat([img_small, result_small])

    # 显示结果
    cv2.imshow('Region Growing Comparison', concat_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值