当前位置: 首页 > news >正文

我谈一阶差分算子的演化

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P234

二维与一维最本质的不同在于,二维有对角方向。所以才有了Roberts、Prewitt和Sobel算子。
在这里插入图片描述

一维离散序列的一阶差分的定义可以直接扩展到二维离散序列。

前向差分 (Forward Difference)

对于一个函数 f ( x ) f(x) f(x),在点 x x x 处的一阶前向差分可以表示为:
f ′ ( x ) ≈ f ( x + h ) − f ( x ) h f'(x) \approx \frac{f(x + h) - f(x)}{h} f(x)hf(x+h)f(x)
其中, h h h 是一个小的正数,表示步长。前向差分是最简单的差分形式,它使用当前点和下一个点之间的差值来近似导数。

这样的直接扩展,二维是可分离的。
在这里插入图片描述

中心差分 (Central Difference)

中心差分通常提供更高的精度,因为它使用当前点两侧的点来近似导数:

f ′ ( x ) ≈ f ( x + h ) − f ( x − h ) 2 h f'(x) \approx \frac{f(x + h) - f(x - h)}{2h} f(x)2hf(x+h)f(xh)
一维到二维。
在这里插入图片描述
一维的计算MATLAB没有使用滤波,直接计算差分。

    case 'centraldifference' if isrow(I)            Gx = gradient(I);if nargout > 1Gy = zeros(size(I),'like',I);end            elseif iscolumn(I)            Gx = zeros(size(I),'like',I);if nargout > 1Gy = gradient(I);end                else            [Gx, Gy] = gradient(I);endcase 'intermediatedifference' Gx = zeros(size(I),'like',I);if (size(I,2) > 1)        Gx(:,1:end-1) = diff(I,1,2);endif nargout > 1Gy = zeros(size(I),'like',I);if (size(I,1) > 1)Gy(1:end-1,:) = diff(I,1,1);endend

Roberts、Prewitt和Sobel算子是考虑对角邻域的二维一阶差分模板。
Roberts是第一个,通过交叉,考虑了一个对角邻域。
在这里插入图片描述
Prewitt和Sobel算子均考虑了4个对角邻域。Sobel的数学推导
在这里插入图片描述
在这里插入图片描述
这三个MATLAB都是通过滤波计算。Roberts是在edge中,考虑了归一化。Prewitt和Sobel算子是在imgradientxy函数中,没有考虑归一化。

    elseif strcmp(method, 'roberts')x_mask = [1 0; 0 -1]/2; % Roberts approximation to diagonal derivativey_mask = [0 1;-1  0]/2;% compute the gradient in x and y directionbx = imfilter(a,x_mask,'replicate');by = imfilter(a,y_mask,'replicate');% compute the magnitudeb = kx*bx.*bx + ky*by.*by;
    case 'sobel'h = -fspecial('sobel'); % Align mask correctly along the x- and y- axesGx = imfilter(I,h','replicate');if nargout > 1Gy = imfilter(I,h,'replicate');endcase 'prewitt'h = -fspecial('prewitt'); % Align mask correctly along the x- and y- axesGx = imfilter(I,h','replicate');if nargout > 1Gy = imfilter(I,h,'replicate');end   

http://www.mrgr.cn/news/52245.html

相关文章:

  • 什么是CRM销售漏斗?如何用CRM从0-1构建销售漏斗?
  • 【保姆级教程】DolphinScheduler本地部署与远程访问详细步骤解析
  • 【算法】C++中的二分查找
  • 竞品分析|用户体验五要素|KANO模型
  • c语言:判断素数和完数对比总结(手写代码版)
  • 安防领域的CCTV是什么?
  • 如何做好数据防泄密?九大措施帮你保护数据安全
  • 简单说说 spring 是如何处理循环依赖问题的(源码解析)
  • Java【代码 19】含有换行符\r\n的字符串匹配(源码分享)处理Word文档里的Excel表格数据
  • 博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!
  • 代码随想录算法训练营第十七天|Day17二叉树
  • 可以在桌面上用的倒计时提醒app下载
  • 015集——c# 实现CAD excel交互(CAD—C#二次开发入门)
  • FreeRTOS - 链表机制
  • ESP32-C3实现非易失变量(Arduino IDE )
  • 广州市孤独症康复训练学校,携手迈向未来
  • 机器视觉系统硬件组成之工业相机篇
  • Python Numpy 的 View 与 Copy 使用详解与优化技巧
  • Django学习- ORM基础操作_创建数据
  • 塞班和诺基亚(中古手机图,你见过哪个?)