wordpress建站菜单栏 二级标题,乡下房屋室内装修,网站建设人员需求,代运营公司哪个地方好数字图像处理#xff1a;图像分割应用
图像分割是图像处理中的一个关键步骤#xff0c;其目的是将图像分成具有不同特征的区域#xff0c;以便进一步的分析和处理。
1.1 阈值分割法 阈值分割法#xff08;Thresholding#xff09;是一种基于图像灰度级或颜色的分割方法图像分割应用
图像分割是图像处理中的一个关键步骤其目的是将图像分成具有不同特征的区域以便进一步的分析和处理。
1.1 阈值分割法 阈值分割法Thresholding是一种基于图像灰度级或颜色的分割方法它通过设置一个或多个阈值将图像划分为前景和背景。它的基本思想是根据像素的灰度值来判断该像素是否属于某个目标区域。 基本原理 将像素的灰度值与设定的阈值进行比较。 如果像素值高于阈值则归为目标区域如果低于阈值则归为背景。 在多阈值分割中多个阈值将图像分成多个区域。
1.2 区域生长法 区域生长法Region Growing是一种基于像素相似性的分割方法它从某些初始的“种子点”开始逐步将与种子点相似的邻域像素归入同一分割区域直到没有更多满足条件的像素可以合并。 基本原理 从选定的“种子点”开始根据预定义的相似性准则如灰度值相似度或纹理相似度将相邻的像素添加到种子区域中。 相邻像素的相似性准则一般基于像素的灰度差异、颜色差异或纹理等特征。 当不再有符合相似性条件的像素时生长过程停止得到一个完整的区域。
1.3 边缘检测法 边缘检测法Edge Detection是一种基于图像梯度信息的分割方法它通过检测图像中灰度值或颜色发生显著变化的位置来确定区域的边界适用于具有明显边界的目标区域分割。 基本原理 利用图像梯度即像素灰度值或颜色的变化率来识别边缘。 边缘通常是图像中像素灰度值或颜色发生急剧变化的地方通常代表物体的边界。 常用的边缘检测算法包括Sobel算子、Canny算子、Prewitt算子等。
1.4 代码实现
1选取实验用的图像完成图像读取和显示 2使用阈值分割法、区域生长法、边缘检测法对图像进行分割并显示结果 3使用深度学习模型进行图像分割并比较结果。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
import random# 读取图像并转换为RGB格式
img_dir rD:\Document\Experiment\data\image.png
rgb cv.imread(img_dir)
rgb cv.cvtColor(rgb, cv.COLOR_BGR2RGB) # 转换为RGB格式# 转换为灰度图
gray cv.cvtColor(rgb, cv.COLOR_RGB2GRAY)# 1阈值分割法
def threshold_segmentation(image, threshold_value128):使用简单的阈值分割法_, thresholded_image cv.threshold(image, threshold_value, 255, cv.THRESH_BINARY)return thresholded_image# 2区域生长法
def region_growing(image, seed_point, threshold5):使用简单的区域生长算法h, w image.shapesegmented_image np.zeros_like(image)visited np.zeros_like(image, dtypebool)seed_value image[seed_point[1], seed_point[0]]# 初始化种子列表seeds [seed_point]segmented_image[seed_point[1], seed_point[0]] 255visited[seed_point[1], seed_point[0]] True# 区域生长while seeds:x, y seeds.pop(0)for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: # 邻域4连通nx, ny x dx, y dyif 0 nx w and 0 ny h and not visited[ny, nx]:if abs(int(image[ny, nx]) - int(seed_value)) threshold:segmented_image[ny, nx] 255seeds.append((nx, ny))visited[ny, nx] Truereturn segmented_image# 3边缘检测法
def edge_detection(image):使用Canny边缘检测法edges cv.Canny(image, 100, 200) # 调整阈值可以影响边缘检测效果return edges# 应用阈值分割法
threshold_image threshold_segmentation(gray, threshold_value128)# 应用区域生长法
seed_point (1055, 788) # 随机选择一个种子点
region_growing_image region_growing(gray, seed_point, threshold30)# 应用边缘检测法
edges_image edge_detection(gray)# 展示分割结果
plt.figure(figsize(15, 5))# 展示原始图像
plt.subplot(1, 4, 1)
plt.title(Original)
plt.axis(off)
plt.imshow(rgb)plt.subplot(1, 4, 2)
plt.title(Threshold Segmentation)
plt.axis(off)
plt.imshow(threshold_image, cmapgray)plt.subplot(1, 4, 3)
plt.title(Region Growing Segmentation)
plt.axis(off)
plt.imshow(region_growing_image, cmapgray)plt.subplot(1, 4, 4)
plt.title(Edge Detection)
plt.axis(off)
plt.imshow(edges_image, cmapgray)plt.show()也可以使用segment-anything进行分割效果如下