图像处理算法(四)---边缘检测

本文探讨了图像处理中的边缘检测技术,重点讲解了如何通过卷积模板实现最佳检测,确保检测到的边缘位置与实际边缘的偏差最小,同时减少因单一边缘产生的多重响应,以获得清晰的单边缘结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像处理领域中涉及很多特征,角点特征,边缘特征,形状特征,纹理特征,颜色特征,直方图统计特征等等(还有很多^_^)。这些特征有些是比较底层的特征,如角点特征,边缘特征,颜色特征等,有些则是较为高层的特征,如形状特征,纹理特征,直方图统计特征。
      这里我们主要谈论底层特征中的边缘特征,提取这些特征的手段叫作边缘特征提取或叫作边缘检测。边缘检测常用的算子中分为一阶检测算子和二阶检测算子,这里提及的算子有些类似数学中的微分的概念(要有一定的数学基础哦)。边缘检测的另外一种形式也被成为相位一致性,这个概念我到后面再谈及,有了这个概念之后帮助我们从图像频域分析边缘提取这一过程。

表1 图像处理边缘检测算子分类表格
类型
具体算子
一阶边缘检测
Roberts交叉算子,Prewitt算子,Sobel算子和Canny算子
二阶边缘检测
Lapacian算子,Marr-Hildreth和LapLacian of Gaussian
其他边缘检测算子
Spacek算子,Petrou算子和Susan算子

      基于边缘检测的分析不易受整体光照强度变化的影响,同时利用边缘信息容易凸显目标信息和达到简化处理的目的,因此很多图像理解方法都以边缘为基础。边缘检测强调的是图像对比度。对比度从直观上的理解就是差异的大小,若对于灰度图像来说就是灰度值(亮度值)的差别,若对于彩色图像则是颜色的差异了。这些差异可以增强图像中的边界特征,因为这些边界就是图像对比度较大的体现。
      这就是我们感知目标边界的大体机制,因为目标的表现就是与它周围的亮度差别。
     一、水平差分算子、垂直差分算子
      亮度变化可以通过对相邻点进行差分处理来增强。对水平方向的相邻点进行差分处理可以检测垂直方向上的亮度变化,根据其作用通常被称为水平边缘检测算子(horizontal edge detector),这样就可以检测出垂直边缘Ex;对垂直方向的相邻点进行差分处理可以检测水平方向上的亮度变化,根据其作用通常被称为垂直边缘检测算子(vertical edge detector),这样就可以检测出水平边缘Ey。
E x = |P x,y - P x+1, y
E y = |P x,y - P x,
### Phase Congruency算法概述 Phase Congruency是一种基于频率域的边缘检测技术,能够有效地捕捉图像中的边缘和其他显著特征。该方法不仅适用于灰度图像,还能够在彩色图像中保持良好的性能[^2]。 ### 原理说明 Phase Congruency的核心在于通过分析不同尺度下的局部相位一致性来定位图像中的结构化变化区域。具体来说,在理想情况下,当多个正弦波在同一位置达到峰值时,则认为此处存在明显的边界或线条。这种现象反映了自然界物体轮廓处各方向上的信号趋于同步振荡的特点。对于自然场景而言,即使受到光照不均匀等因素影响,依然可以通过计算各个像素点周围邻域内滤波响应之间的相对相位关系得出一致程度较高的测量值作为最终输出结果的一部分。 ### 数学表达实现细节 为了量化上述概念,通常采用Gabor滤波器组或多分辨率Log-Gabor变换等方式构建一组具有特定空间频率特性的线性带通滤波器,并将其应用于输入图片上获取多通道复数值表示形式的数据集;接着利用反正切函数求取每个样本对应的绝对角度参数θ(x,y),进而依据下述公式完成后续操作: \[ PC(x, y) = \frac{\sum_{\omega} w(\omega)\left|A(\omega)\right|\cos (\phi(\omega)-\theta)}{N+\epsilon}\] 其中\(w(ω)\)代表权重系数,用来调整不同频率成分的重要性;而\(A(ω)\)和φ(ω)分别对应幅度谱初始相角矩阵;最后除以项数加一个小常量ε防止分母为零的情况发生。值得注意的是,实际应用过程中往往还会引入额外的归一化步骤确保输出范围稳定可控。 ```matlab function pc = phase_congruency(I) % I is the input grayscale image scales = [1 2 4]; % Define scale levels for multi-scale analysis orientations = 8; % Number of orientation bins per octave wavelength_min = 3; % Minimum wavelength (pixels) % Initialize variables to store results from different filters sumE = zeros(size(I)); sumO = zeros(size(I)); for s = 1:length(scales) sigma = scales(s); for o = 0:(orientations-1) theta = pi * o / orientations; % Create Gabor filter at current scale and orientation filt_real = fspecial('gaussian', round(sigma*7), sigma) .* ... cos((-(size(I,1)/2):size(I,1)/2)'*(-pi/size(I,1)) + ... -(size(I,2)/2:size(I,2)/2)*(theta-pi/2)/(size(I,2))); filt_imaginary = -fspecial('gaussian', round(sigma*7), sigma).*... sin((-(size(I,1)/2):size(I,1)/2)'*(-pi/size(I,1))+... -(size(I,2)/2:size(I,2)/2)*(theta-pi/2)/(size(I,2))); % Apply convolution with real part of complex-valued filter conv_result_real = imfilter(double(I),filt_real,'replicate'); % Apply convolution with imaginary part of complex-valued filter conv_result_imaginary = imfilter(double(I),filt_imaginary,'replicate'); % Accumulate energy across all scales/orientations sumE = sumE + abs(complex(conv_result_real,conv_result_imaginary)).^2; % Compute local mean amplitude over neighborhood defined by Gaussian window size=round(sigma*7) avgAmplitude = sqrt(sumE/(length(scales)*orientations)); % Calculate edge strength using normalized cross-correlation between filtered responses sumO = sumO + ((conv_result_real.*avgAmplitude).*(conv_result_real./max(avgAmplitude(:)))); end end % Finalize computation of phase congruency map epsilon = eps(class(I)); % Small constant added during division operations pc = atan2(sqrt(sumO),(sqrt(sumE)+epsilon)); end ``` 此代码片段展示了如何使用MATLAB编写一个简单的phase congruency算法实现版本。请注意这只是一个简化示例,真实应用场景可能会涉及到更复杂的预处理流程以及优化措施以提高效率并增强鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值