图像分割(二)

python 复制代码
# 在绘图中显示中文字体,而非乱码
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
import cv2
import matplotlib.pyplot as plt
import numpy as np

使用图割算法对3到5张图像进行分割(要求图像背景包含简单背景和复杂背景),并简要叙述本章中所有图像分割算法的特点、优缺点和适用场景。

python 复制代码
# 图割算法代码,选择三张图片分别处理复制粘贴即可
img1 = cv2.imread(你的图片)
cv2.namedWindow("select", cv2.WINDOW_NORMAL)
cv2.imshow("select", img1)
roi_mask = cv2.selectROI('select', img1, True, False)
roi = img1[int(roi_mask[1]):int(roi_mask[1]+roi_mask[3]), int(roi_mask[0]):int(roi_mask[0]+roi_mask[2])]
mask = np.zeros(img1.shape[:2], dtype=np.uint8)
rect_roi = (int(roi_mask[0]), int(roi_mask[1]), int(roi_mask[2]), int(roi_mask[3]))
bgdmodel = np.zeros((1, 65), np.float64)   
fgdmodel = np.zeros((1, 65), np.float64)  
cv2.grabCut(img1, mask, rect_roi, bgdmodel, fgdmodel, 11, mode=cv2.GC_INIT_WITH_RECT)
mask_foreground = np.where((mask == 1) + (mask == 3), 255, 0).astype('uint8')
result = cv2.bitwise_and(img1, img1, mask=mask_foreground)
title_list = ["原图", "图割"]
img_list = [img1, result]
for i in range(len(img_list)):
    plt.subplot(2, 1, i+1)
    plt.imshow(cv2.cvtColor(img_list[i], cv2.COLOR_BGR2RGB))
    plt.title(title_list[i])
    plt.xticks([])
    plt.yticks([])
plt.show()

边缘检测:

特点:基于像素梯度的边缘检测。

优点:简单,计算量小。

缺点:对噪声敏感,边缘定位不精确。

适用场景:简单场景的边缘提取。

阈值分割:

特点:根据像素值的阈值进行分割。

优点:简单,快速。

缺点:对光照变化敏感,难以处理复杂背景。

适用场景:背景与前景对比明显的场景。

区域分割:

特点:基于像素区域特性的分割。

优点:能够处理同质区域。

缺点:对边界不精确,容易漏分割。

适用场景:同质区域明显的图像。

分水岭分割:

特点:基于拓扑学原理的分割。

优点:能够处理复杂形状。

缺点:计算量大,对噪声敏感。

适用场景:需要精确分割的复杂图像。

Mean Shift分割:

特点:基于密度的聚类分割。

优点:能够处理任意形状。

缺点:计算量大,对参数敏感。

适用场景:聚类分析,目标跟踪。

SLIC超像素分割:

特点:基于空间邻近性和颜色相似性的分割。

优点:简单,能够生成均匀的超像素。

缺点:对参数选择敏感。

适用场景:需要超像素表示的图像。

主动轮廓模型:

特点:基于能量最小化的轮廓演化。

优点:能够处理复杂形状。

缺点:计算量大,需要初始化。

适用场景:医学图像分割,目标检测。

图割算法:

特点:基于图论的全局优化分割。

优点:能够处理复杂场景。

缺点:计算量大,需要训练数据。

适用场景:场景理解,图像分割。

相关推荐
小兵张健2 小时前
35岁程序员的春天来了
人工智能
大怪v2 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
冬奇Lab2 小时前
OpenClaw 深度解析(六):节点、Canvas 与子 Agent
人工智能·开源
刀法如飞4 小时前
AI提示词框架深度对比分析
人工智能·ai编程
IT_陈寒5 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
1G6 小时前
openclaw控制浏览器/自动化的playwright MCP + Mcporter方案实现
人工智能
踩着两条虫6 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能
扉川川6 小时前
OpenClaw 架构解析:一个生产级 AI Agent 是如何设计的
前端·人工智能
Flittly6 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
星浩AI6 小时前
让模型自己写 Skills——从素材到自动生成工作流
人工智能·后端·agent