首页 > 其他分享 >图像数据处理21

图像数据处理21

时间:2024-08-26 22:52:40浏览次数:11  
标签:21 image 算子 cv2 边缘 edges 图像 数据处理

五、边缘检测

5.2基于二阶导数的边缘检测

一阶导数(如Sobel、Prewitt算子)能够捕捉到灰度值的快速变化,但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置,可以利用二阶导数的零交叉点。零交叉点是是函数二阶导数为零(正负变换)的点。

高斯拉普拉斯算子是一种用于图像边缘检测的算法。它先对图像进行高斯平滑处理,然后计算拉普拉斯算子,以找到图像中的零交叉点,从而实现图像边缘位置的检测。

其的优点有

①抗噪声能力强:LoG算子结合了高斯平滑和拉普拉斯锐化的优点。高斯平滑能够有效地抑制图像中的噪声,减少噪声对边缘检测的影响。这使得LoG算子在处理含有噪声的图像时,能够更准确地检测出边缘,防止因噪声而出现伪边缘检测。

②可调整性强:LoG算子中的高斯核标准差(σ)是一个可调整的参数,通过改变σ的值,可以控制高斯平滑的程度,适应不同噪声水平和边缘特性的图像,进而优化缘检测的效果。

def apply_log(image, sigma):
    """
    应用高斯拉普拉斯算子进行边缘检测。

    参数:
    image: 输入图像
    sigma: 高斯核的标准差,用于平滑图像

    返回:
    edges: 检测到的边缘图像
    """
    # 使用高斯模糊平滑图像
    blurred_image = cv2.GaussianBlur(image, (0, 0), sigma)

    # 计算拉普拉斯算子
    laplacian_image = cv2.Laplacian(blurred_image, cv2.CV_64F)

    # 将拉普拉斯图像的数据类型转换为8位无符号整数
    laplacian_image = np.uint8(np.absolute(laplacian_image))

    # 找到零交叉点作为边缘
    # 使用阈值来近似找到零交叉点
    _, edges = cv2.threshold(laplacian_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

    return edges


# 读取图像
image = cv2.imread('fu.jpg', cv2.IMREAD_GRAYSCALE)

# 缩小原图
resized_image = cv2.resize(image, None, fx=0.4, fy=0.4)

# 应用LoG算子
edges = apply_log(resized_image, sigma=1.5)

# 缩小边缘图像(确保使用与原图相同的缩放因子)
resized_edges = cv2.resize(edges, (resized_image.shape[1], resized_image.shape[0]))

# 将原图和处理后的图像水平堆叠
stacked_image = np.hstack((resized_image, resized_edges))

# 显示结果
cv2.imshow('Original and Edges', stacked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.3 Canny边缘检测算子

5.3.1Canny边缘检测算子概念:Canny算法是应用于边缘检测的标准算法,其目标是找到一个最优的边缘检测解,即尽可能多地标识出图像中的实际边缘,同时使标识出的边缘尽可能接近实际边缘,并尽可能减少噪声对边缘检测结果的干扰。

5.3.2原理及步骤:

①图像平滑:使用高斯滤波器对原始图像进行平滑处理,减少图像噪声。高斯滤波器通过加权平均周围像素的值来模糊图像,降低噪声的影响。

②梯度计算:计算平滑后图像的梯度幅度和方向。通常使用Sobel算子、Prewitt算子等来计算图像在水平和垂直方向上的梯度值,从而得到每个像素点的梯度大小和方向。

③非极大值抑制:在梯度图像上,对每个像素点在其梯度方向上进行比较,并保留局部最大值点,抑制非边缘像素。从而细化边缘线条,减少边缘的宽度。 

④双阈值检测:设定高阈值和低阈值,梯度值大于高阈值的一定是边缘;梯度值小于低阈值的一定不是边缘,要是介于高阙值和低阙值之间,就要根据其的邻接像素做出判断。

⑤边缘连接:从强边缘像素开始,沿着梯度方向追踪并连接相邻的弱边缘像素,从而形成完整的边缘。

import cv2
import numpy as np

# 读取图片
image = cv2.imread('fu.jpg')

# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 应用高斯模糊
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

# 使用Canny算子进行边缘检测
low_threshold = 50
high_threshold = 150
edges = cv2.Canny(blurred_image, low_threshold, high_threshold)

# 获取原始图像和边缘检测图像的尺寸
height, width = image.shape[:2]
edges_height, edges_width = edges.shape[:2]

# 将图像缩小一半
resized_image = cv2.resize(image, (width // 2, height // 2))
resized_edges = cv2.resize(edges, (edges_width // 2, edges_height // 2))

# 显示原图和边缘检测结果
cv2.imshow('Original Image', resized_image)
cv2.imshow('Edges', resized_edges)

# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

标签:21,image,算子,cv2,边缘,edges,图像,数据处理
From: https://blog.csdn.net/2301_80400361/article/details/141425291

相关文章

  • 语言图像模型大一统!Meta将Transformer和Diffusion融合,多模态AI王者登场
    前言 就在刚刚,Meta最新发布的Transfusion,能够训练生成文本和图像的统一模型了!完美融合Transformer和扩散领域之后,语言模型和图像大一统,又近了一步。也就是说,真正的多模态AI模型,可能很快就要来了!欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读......
  • CTT2021
    D1T1末日魔法少女计划知识点:DP求构造,\(B\)叉树。感觉最近见到好多用DP来求最优构造的题目。可以将\(A_{i,j}=1\)看作拥有区间信息\([i,j)\),要求构造最少的区间信息,使得任何区间\([l,r)\)都可以被最多\(k\)个已知区间的加和表示。考虑\(k=2\)的时候,就是要构建猫......
  • SAM 2最新应用落地!牛津大学团队发布Medical SAM 2,刷新医学图像分割SOTA榜
    2023年4月,Meta公司发布了SegmentAnythingModel(SAM),号称能够「分割一切」,犹如一颗重磅炸弹震荡了整个计算机视觉领域,甚至被很多人看作是颠覆传统CV任务的研究。时隔1年多,Meta再度发布里程碑式更新——SAM2能够为静态图像和动态视频内容提供实时、可提示的对......
  • WIN/MAC 图像处理软件Adobe Photoshop PS2024软件下载安装
    目录一、软件概述1.1基本信息1.2主要功能二、系统要求2.1Windows系统要求2.2macOS系统要求三、下载四、使用教程4.1基本界面介绍4.2常用工具使用4.3进阶操作一、软件概述1.1基本信息AdobePhotoshop(简称PS)是一款由AdobeSystems公司开发并广泛使用的......
  • 代码随想录day41 || 121 买卖股票最佳时机,122 买卖股票最佳时机||,123 买卖股票最佳时
    121买卖股票最佳时机funcmaxProfit(prices[]int)int{ //dp五部曲 //1dp数组以及下标含义dp[i][0]表示第i天持有股票dp[i][1]表示第i天不持有 //2递推公式,dp[i][0]=max(dp[i-1][0],0-price[i]) //dp[i][1]=max(dp[i-1][1],dp[i-1][0]+price[......
  • 在 SQLAlchemy 中实现数据处理的时候,实现表自引用、多对多、联合查询,有序id等常见的一
    有时候,我们在使用SQLAlchemy操作某些表的时候,需要使用外键关系来实现一对多或者多对多的关系引用,以及对多表的联合查询,有序列的uuid值或者自增id值,字符串的分拆等常见处理操作。1、在SQLAlchemy中定义具有嵌套children关系的表要在SQLAlchemy中定义具有嵌套children关系......
  • 图像降噪神器:低通滤波技术的全面攻略
    今天我们来聊聊图像处理中的一个重要工具——低通滤波。通过理解低通滤波的原理和应用,我们可以更好地掌控图像质量,使得视觉效果更符合我们的预期。我会介绍低通滤波的多种类型、工作原理、具体应用场景及其优缺点,并结合实际案例进行详细分析。0 定义低通滤波(Low-PassFilte......
  • 让图像亮度不再是难题:伽马变换的神奇力量
    0背景在图像处理领域,我们经常需要调整图像的亮度和对比度,以满足不同的视觉需求。无论是摄影、电影制作,还是医学影像分析,图像的亮度调整都至关重要。而在众多的亮度调整技术中,伽马变换(GammaCorrection)以其灵活性和广泛应用而备受青睐。伽马变换是一种非线性操作,通过调整图像......
  • OpenCV 图像处理中滤波技术介绍
    VS2022配置OpenCV环境关于OpenCV在VS2022上配置的教程可以参考:VS2022配置OpenCV开发环境详细教程图像处理中滤波技术图像滤波是图像处理中的一种重要技术,用于改善图像质量或提取图像中的特定特征。以下是一些常见的图像滤波技术:均值滤波(MeanFilter):简单且广泛使用的......