边缘检测技术现状初探2:多尺度与形态学方法

news2025/4/3 14:41:45

一、多尺度边缘检测方法

多尺度边缘检测通过在不同分辨率/平滑度下分析图像,实现:

  1. 粗尺度(大σ值):抑制噪声,提取主体轮廓
  2. 细尺度(小σ值):保留细节,检测微观缺陷
  3. 尺度融合:综合各层级特征形成完整边缘描述

1.1 数学表达(高斯尺度空间)

图像 I ( x , y ) I(x,y) I(x,y)在尺度 t t t t = σ 2 t = \sigma^2 t=σ2)下的表示为:
L ( x , y , t ) = G ( x , y , t ) ∗ I ( x , y ) L(x,y,t) = G(x,y,t) * I(x,y) L(x,y,t)=G(x,y,t)I(x,y)
其中高斯核 G ( x , y , t ) = 1 2 π t e − x 2 + y 2 2 t G(x,y,t) = \frac{1}{2\pi t}e^{-\frac{x^2+y^2}{2t}} G(x,y,t)=2πt1e2tx2+y2


1.2 典型案例

高斯金字塔多尺度Canny
import cv2
import numpy as np
import matplotlib.pyplot as plt


def multi_scale_canny(img, scales=[1.0, 2.0, 4.0]):
    # 初始化结果矩阵
    edges_stack = np.zeros_like(img, dtype=np.uint8)

    for sigma in scales:
        # 高斯模糊
        blurred = cv2.GaussianBlur(img, (0, 0), sigmaX=sigma)
        # 动态阈值Canny(阈值随尺度调整)
        low_thresh = int(30 * (sigma / 2.0))
        high_thresh = int(90 * (sigma / 2.0))
        edges = cv2.Canny(blurred, low_thresh, high_thresh)
        # 多尺度叠加
        edges_stack = cv2.bitwise_or(edges_stack, edges)

    return edges_stack

img = cv2.imread("../sports.jpg", 0)
result = multi_scale_canny(img, scales=[1.0, 2.0, 4.0])

plt.figure(figsize=(15, 5))
plt.subplot(121), plt.imshow(img, cmap='gray'), plt.title('Original')
plt.subplot(122), plt.imshow(result, cmap='gray'), plt.title('multi_scale_canny')
plt.show()

在这里插入图片描述

Laplacian of Gaussian(LoG)算子

Laplacian of Gaussian(LoG)是一种基于二阶导数的边缘检测方法,通过结合高斯平滑与拉普拉斯算子实现多尺度边缘检测,其核心优势在于:

  1. 噪声免疫:高斯滤波先消除高频噪声,再进行边缘定位
  2. 零交叉特性:通过检测二阶导数过零点(Zero-Crossing)精确定位边缘中心
  3. 多尺度适应:调节高斯核σ值可控制边缘检测的粗细程度

数学表达式:
L o G ( x , y ) = − 1 π σ 4 ( 1 − x 2 + y 2 2 σ 2 ) e − x 2 + y 2 2 σ 2 LoG(x,y) = -\frac{1}{\pi\sigma^4}\left(1 - \frac{x^2 + y^2}{2\sigma^2}\right)e^{-\frac{x^2 + y^2}{2\sigma^2}} LoG(x,y)=πσ41(12σ2x2+y2)e2σ2x2+y2
实际应用中常使用离散近似核(如9×9核,σ=1.4)
代码例子

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 生成测试图像
img = np.zeros((300, 300), dtype=np.uint8)
cv2.rectangle(img, (50, 50), (250, 250), 200, 20)  # 灰色矩形框
img[120:180, 140:160] = 100  # 添加垂直划痕
img = cv2.GaussianBlur(img, (5, 5), 0.5)  # 模拟表面模糊

# LoG计算
gaussian = cv2.GaussianBlur(img, (9, 9), sigmaX=1.4)
laplacian = cv2.Laplacian(gaussian, cv2.CV_64F, ksize=3)

# 过零检测
log_edges = np.zeros_like(img, dtype=np.uint8)
h, w = laplacian.shape
for i in range(1, h - 1):
    for j in range(1, w - 1):
        # 检测相邻像素符号变化
        if (laplacian[i, j] * laplacian[i + 1, j] < 0) or \
                (laplacian[i, j] * laplacian[i, j + 1] < 0):
            log_edges[i, j] = 255

# 可视化
plt.figure(figsize=(15, 5))
plt.subplot(131), plt.imshow(img, cmap='gray'), plt.title('Original')
plt.subplot(132), plt.imshow(laplacian, cmap='jet'), plt.title('LoG Response')
plt.subplot(133), plt.imshow(log_edges, cmap='gray'), plt.title('Zero-Crossing Edges')
plt.show()

在这里插入图片描述

小波多分辨率检测

使用OpenCV的高斯金字塔模拟小波多尺度分解,通过残差计算提取高频信息,实现多分辨率边缘检测。

import cv2
import numpy as np

def opencv_wavelet_edge(img, levels=3):
    # 初始化高斯金字塔
    pyramid = [img.astype(np.float32)]
    
    # 构建高斯金字塔
    for _ in range(levels):
        layer = cv2.pyrDown(pyramid[-1])
        pyramid.append(layer)
    
    # 各尺度边缘检测
    edges = []
    for i in range(1, levels+1):
        # 上采样重建低频图像
        upsampled = cv2.pyrUp(pyramid[i], dstsize=pyramid[i-1].shape[::-1])
        
        # 计算高频残差(近似小波高频子带)
        residual = cv2.subtract(pyramid[i-1], upsampled)
        residual = cv2.normalize(residual, None, 0, 255, cv2.NORM_MINMAX)
        
        # 动态阈值Canny(基于尺度调整)
        thresh_low = 30 + 20*(i-1)
        thresh_high = 90 + 20*(i-1)
        edge_layer = cv2.Canny(np.uint8(residual), thresh_low, thresh_high)
        
        # 尺寸对齐(避免层级尺寸不匹配)
        if edge_layer.shape != img.shape:
            edge_layer = cv2.resize(edge_layer, img.shape[::-1])
        
        edges.append(edge_layer)
    
    # 多尺度融合(加权叠加)
    final = cv2.addWeighted(edges[0], 0.5, edges[1], 0.3, 0)
    if levels > 2:
        final = cv2.addWeighted(final, 0.7, edges[2], 0.2, 0)
    return final

# 使用示例
img = cv2.imread("sports.jpg", 0)
result = opencv_wavelet_edge(img, levels=3)

在这里插入图片描述

二、形态学方法

1.1 核心原理与基础操作

形态学方法基于集合论结构元素对图像进行形状分析,主要操作包括:

操作类型数学定义视觉效果工业应用场景
腐蚀 A ⊖ B A \ominus B AB收缩物体,消除细小噪声去除塑料表面微小噪点
膨胀 A ⊕ B A \oplus B AB扩张物体,填充孔洞连接断裂的注塑件边缘
开运算 ( A ⊖ B ) ⊕ B (A \ominus B) \oplus B (AB)B平滑轮廓,保持主体形状毛刺去除
闭运算 ( A ⊕ B ) ⊖ B (A \oplus B) \ominus B (AB)B闭合小孔,连接邻近区域气泡缺陷修复

2.1 基础形态学操作

import cv2
import numpy as np

def morphology_optimization(edges):
    # 定义结构元素(十字形消除毛刺,椭圆形填充孔洞)
    kernel_cross = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))
    kernel_ellipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))

    # 去噪:开运算消除孤立噪点
    cleaned = cv2.morphologyEx(edges, cv2.MORPH_OPEN, kernel_cross)
    
    # 连接:闭运算修复断裂边缘
    connected = cv2.morphologyEx(cleaned, cv2.MORPH_CLOSE, kernel_ellipse)
    
    # 细化处理(可选)
    thin = cv2.ximgproc.thinning(connected)
    return thin

canny_edges = cv2.Canny(img, 50, 150)  # 初始Canny边缘
kernel = np.ones((3, 3), np.uint8)
edges = cv2.dilate(canny_edges, kernel, iterations=1)
optimized_edges = morphology_optimization(canny_edges)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI News | 20250402】每日AI进展

AI Repos 1、Dolphin 由数据海洋AI与清华大学联合研发的Dolphin多任务语音识别模型正式亮相。该模型覆盖东亚、南亚、东南亚及中东地区40余种语言&#xff0c;并支持22种汉语方言&#xff0c;训练数据量超21万小时&#xff08;含自有及开源数据&#xff09;&#xff0c;具备语…

操作系统高频(七)虚拟地址与页表

操作系统高频&#xff08;六&#xff09;虚拟地址与页表 1.什么是文件系统&#xff1f;它的作用是什么&#xff1f;⭐ 存储管理&#xff1a;文件系统负责管理计算机的存储设备&#xff0c;如硬盘、固态硬盘等。它将文件存储在这些设备上&#xff0c;并负责分配和回收存储空间…

openEuler24.03 LTS下安装Flume

目录 前提条件 下载Flume 解压 设置环境变量 修改日志文件 测试Flume 在node2安装Flume 前提条件 Linux安装好jdk Flume一般需要配合Hadoop使用&#xff0c;安装好Hadoop完全分布式集群&#xff0c;可参考&#xff1a;openEuler24.03 LTS下安装Hadoop3完全分布式 下载F…

现代几何风格网页标牌标识logo海报标题设计psai英文字体安装包 Myfonts – Gilroy Font Family

Gilroy 是一款具有几何风格的现代无衬线字体。它是原始 Qanelas 字体系列的弟弟。它有 20 种粗细、10 种直立字体和与之匹配的斜体。Light 和 ExtraBold 粗细是免费的&#xff0c;因此您可以随心所欲地使用它们。设计时考虑到了强大的 opentype 功能。每种粗细都包括扩展语言支…

ControlNet-Tile详解

一、模型功能与应用 1. 模型功能 ControlNet-Tile模型的主要功能是图像的细节增强和质量提升。它通过以下几个步骤实现这一目标&#xff1a; 语义分割&#xff1a;模型首先对输入的图像进行语义分割&#xff0c;识别出图像中不同的区域和对象。这一步是为了让模型理解图像的内…

leetcode 2873. 有序三元组中的最大值 I

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 文章目录 题目描述题目剖析&信息挖掘解题思路方法一 暴力枚举法思路注意复杂度代码实现 方法二 公式拆分动态规划思路注意复杂度代码实现 题目描述 [2873] 有序三元…

RabbitMQ应用2

RabbitMQ应用2 一.实际业务逻辑订单系统中使用MQ&#xff08;不写订单系统逻辑&#xff09;1.项目的创建和准备2.代码实现ControllerConfigurationproperties 二.物流系统使用MQ&#xff08;不实现物流系统业务&#xff09;1.项目创建同订单&#xff08;一样&#xff09;2.代码…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0&#xff08;也就是 Windows Vista 和 Windows Server 2008&#xff09;开始&#xff0c;微软引入了一种全新的日志文件格式&#xff0c;称为 evtx。这种格式取代了之前 Windows 系…

【postgresql】锁概览

常规锁 场景测试案例

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…

【AI产品分享】面向图片的原始位置翻译功能

1. 背景 在撰写文字材料时&#xff0c;往往需要配套图像以增强表达效果。然而&#xff0c;有时自己绘制的图可能达不到理想的质量&#xff0c;而在其他文献材料中却能发现更清晰、直观的示例。希望在“站在巨人的肩膀上”优化自己的图像时&#xff0c;通常希望在保留原始图像的…

【无标题】跨网段耦合器解决欧姆龙CJ系列PLC通讯问题案例

欧姆龙CJ系列PLC不同网段的通讯问题 一、项目背景 某大型制造企业的生产车间内&#xff0c;采用了多台欧姆龙CJ系列PLC对生产设备进行控制。随着企业智能化改造的推进&#xff0c;需要将这些PLC接入工厂的工业以太网&#xff0c;以便实现生产数据的实时采集、远程监控以及与企业…

K8S学习之基础七十二:Ingress基于Https代理pod

Ingress基于Https代理pod 1、构建TLS站点 &#xff08;1&#xff09;准备证书&#xff0c;在xianchaomaster1节点操作 cd /root/ openssl genrsa -out tls.key 2048 openssl req -new -x509 -key tls.key -out tls.crt -subj /CCN/STBeijing/LBeijing/ODevOps/CNak.lucky.com…

node.js版本管理

概述 遇到了版本升级后&#xff0c;以前项目不兼容的问题。 下载一个node.js的版本管理工具&#xff0c;官网下载地址&#xff0c;可以选择版本下载&#xff0c;我选择的1.11.1版本的。下载完成后点击安装&#xff0c;分别选择nvm安装目录和nodejs的安装目录&#xff0c;点击安…

Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战

根据Gartner最新预测&#xff0c;2025年全球生成式人工智能&#xff08;GenAI&#xff09;支出将达到6440亿美元&#xff0c;较2024年增长76.4%&#xff0c;其中80%的支出将集中于硬件领域&#xff0c;尤其是集成AI能力的服务器、智能手机和PC等设备。这一增长的核心驱动力来自…

重新安装VMware tools为灰色无法点击问题解决|读取电脑文件的共享文件夹方法

1.问题VMware tools为灰色 sudo systemctl status vmware-tools 显示&#xff1a;Unit vmware-tools.service could not be found. 改 检测方式 弹出&#xff08;之前没有&#xff09; 在重启的瞬间点安装 弹出&#xff1a; 双击打开 右键打开终端&#xff0c;解压 cd ~ ta…

构造超小程序

文章目录 构造超小程序1 编译器-大小优化2 编译器-移除 C 异常3 链接器-移除所有依赖库4 移除所有函数依赖_RTC_InitBase() _RTC_Shutdown()__security_cookie __security_check_cookie()__chkstk() 5 链接器-移除清单文件6 链接器-移除调试信息7 链接器-关闭随机基址8 移除异常…

Outlook客户端无法连接到服务器,添加账户显示“无网络连接,请检查你的网络设置,然后重试。[2603]”

1、先切换一下到手机热点或者其他网络&#xff0c;判断是不是现在所连接的网络的问题。如果有VPN代理软件&#xff0c;网银软件&#xff0c;加密软件在后台运行&#xff0c;麻烦退出一下。 2、打开电脑上的 控制面板——网络和Internet——Internet选项——高级——先点击还原…

LlamaIndex实现RAG增强:融合检索(Fusion Retrieval)与混合检索(Hybrid Search)

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

蓝桥杯冲刺:一维前缀和

系列文章目录 蓝桥杯系列&#xff1a;一维前缀和 文章目录 系列文章目录前言一、暴力的写法&#xff1a;二、一维前缀和的模板&#xff1a; 具体实现&#xff1a; 三、具体例题&#xff1a;求和 1.题目参考&#xff1a;2.以下是具体代码实现&#xff1a; 总结 前言 上次我介绍…