sobel算法边缘检测

小梅哥书上的教程讲得很好

《小梅哥-FPGA系统设计与验证实战指南_V24》P836 7.11

sobel算法做边缘检测其实也是一种二值化的预操作,在完成sobel处理后,与阈值进行比较,即完成了二值化,但这个阈值可以通过OTSU算法来计算出

简单定义:卷积是分析数学中一种重要的运算。

设:f(x),g(x)是R1上的两个可积函数,作积分:

可以证明,关于几乎所有的实数x,上述积分是存在的。这样,随着x的不同取值,这个积分就定义了一个新函数h(x),称为函数f与g的卷积,记为h(x)=(f*g)(x)。

容易验证,(f * g)(x) = (g * f)(x),并且(f * g)(x)仍为可积函数。这就是说,把卷积代替乘法,L1(R1)空间是一个代数,甚至是巴拿赫代数。

卷积与傅里叶变换有着密切的关系。利用一点性质,即两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,能使傅里叶分析中许多问题的处理得到简化。

由卷积得到的函数f*g一般要比f和g都光滑。特别当g为具有紧致集的光滑函数,f为局部可积时,它们的卷积f * g也是光滑函数。利用这一性质,对于任意的可积函数f,都可以简单地构造出一列逼近于f的光滑函数列fs,这种方法称为函数的光滑化或正则化。

Sobel算子的理解

sobel算子主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。

原理

算子使用两个33的矩阵(图1)算子使用两个33的矩阵(图1)去和原始图片作卷积,分别得到横向G(x)和纵向G(y)的梯度值,如果梯度值大于某一个阈值,则认为该点为边缘点

Gx方向的相关模板:

Gy方向的相关模板:

看了网上的很多资料,都把卷积和相关的概念给弄糊了,书上给的Sobel的模板不是卷积模板,而是相关模板,因为卷积的话要先将模板旋转180****度以后再与图像做相关的操作。

所以Sobel的卷积模板是:


体计算如下:

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率使用不开平方的近似值:

然后可用以下公式计算梯度方向:

OpenCV还提供了一个scharr函数,比Sobel算子更为精准,也是3x3的模板。

hu/),比Sobel算子更为精准,也是3x3的模板。

因为Sobel算子只是求取了导数的近似值,当内核大小为3时,以上Sobel内核可能产生比较明显的误差。为解决这一问题,OpenCV提供了 Scharr 函数,但该函数仅作用于大小为3的内核,该函数的运算与Sobel函数一样快,但结果却更加精确

4.代码

module sobel (input                       rst,input                       pclk,input                       ycbcr_hs,input                       ycbcr_vs,input                       ycbcr_de,input        [7:0]          fazhi,output reg                  data_out,output                      sobel_hs,output                      sobel_vs,output                      sobel_de,input  [7:0]               p1,input  [7:0]                p3,input  [7:0]                p2,input    [1:0]              zt,output reg                  data_out_pd);
reg  [7:0]  p11,p12,p13;
reg  [7:0]  p21,p22,p23;
reg  [7:0]  p31,p32,p33;reg  [9:0]  x1,x3;
reg  [9:0]  y1,y3;
reg  [9:0]  abs_x,abs_y;
reg  [10:0] abs_g;reg [8:0] hs_buf ;
reg [8:0] vs_buf ;
reg [8:0] de_buf ;
reg [7:0] fazhi_;
always fazhi_=fazhi;
always@(posedge pclk)//9个8位reg做移位计算,每次移入3个,并移出3个
beginp11 <= p1;p21 <= p2; p31 <= p3;p12 <= p11;p22 <= p21;p32 <= p31;p13 <= p12;p23 <= p22;p33 <= p32;
endalways@(posedge pclk)//sobel做卷积的核心代码
beginx1 <= {2'b00,p11} + {2'b00,p31} + {1'b0,p21,1'b0};x3 <= {2'b00,p13} + {2'b00,p33} + {1'b0,p23,1'b0};y1 <= {2'b00,p11} + {2'b00,p13} + {1'b0,p12,1'b0};y3 <= {2'b00,p31} + {2'b00,p33} + {1'b0,p32,1'b0};
endalways@(posedge pclk)
beginabs_x <= (x1 > x3) ? x1 - x3 : x3 - x1;abs_y <= (y1 > y3) ? y1 - y3 : y3 - y1;abs_g <= abs_x + abs_y;
endalways@(posedge pclk)
begin
/*if(zt==2'b11)
data_out <= (abs_g >65)? 1:0;
else
*/data_out <= (abs_g >fazhi_)? 1:0;end
//hs vs de delay 9 clock
always@(posedge pclk or negedge rst)
beginif (!rst)beginhs_buf <= 9'd0 ;vs_buf <= 9'd0 ;de_buf <= 9'd0 ;endelsebeginhs_buf <= {hs_buf[7:0], ycbcr_hs} ;vs_buf <= {vs_buf[7:0], ycbcr_vs} ;de_buf <= {de_buf[7:0], ycbcr_de} ;end
endassign sobel_hs = hs_buf[8] ;
assign sobel_vs = vs_buf[8] ;
assign sobel_de = de_buf[8] ;endmodule

车牌识别项目(3)sobel算法边缘检测相关推荐

  1. 【老生谈算法】matlab实现车牌识别中值滤波算法——车牌识别中值滤波算法

    基于Matlab的车牌识别中值滤波算法的研究与实现 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于Matlab的车牌识别中值滤波算 ...

  2. 开源车牌识别项目,OpenALPR

    今天在github上看到了一个开源的车牌识别项目,OpenALPR.github链接 我以前自己在MATLAB上编写了一个简单的车牌识别的程序,使用的是传统模板匹配法.只是有了初步的效果,还有很多需要 ...

  3. (2023最新)基于 Grounded-SAM 的车牌识别项目

    背景介绍 曾经在大二的图像处理课程中完成了一个基础的车牌识别项目,当时主要采用的是普通的图像处理技术,并且没有结合前沿的OCR方法导致字符识别准确率堪忧. 现如今已经涌现出诸如Grounded-SAM ...

  4. 数字图像处理:基于MATLAB的车牌识别项目

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  5. CSDN车牌识别项目

    完整项目已上传至github: https://github.com/duanshengliu/End-to-end-for-chinese-plate-recognition 喜欢的话顺手点个sta ...

  6. 车牌识别项目全过程——opencv知识自学(1)

    目录 什么是opencv? 图像数字化基础知识 图像获取 图像变换 改变大小 车牌识别内容分析 定位车牌 图像降噪 形态学处理 阈值分割+边缘检测 什么是opencv? OpenCV(Open Sou ...

  7. 车牌识别算法_PC端车牌识别SDK融入好算法

    PC端车牌识别SDK介绍 易泊PC端车牌识别SDK融合了车牌定位.车牌字符切分.车牌字符识别等算法,使该系统具有识别效率高.速度快.适应性强.使用方便等优势,技术处于国际先进水平.大力发展机器人.人工 ...

  8. python车牌识别使用训练集_基于Python 实现的车牌识别项目

    车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到. 简介 车牌识别系统 ...

  9. sobel算法边缘检测python版

    对图像进行边缘检测python版本: # coding=gbk import cv2 img = cv2.imread("1.jpg", 0) x = cv2.Sobel(img, ...

  10. 模式识别之车牌识别---一个开源车牌识别项目easypr

    http://doc.okbase.net/subconscious/archive/105312.html https://github.com/liuruoze http://www.cnblog ...

最新文章

  1. Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称
  2. hoj 1067 Rails //poj1363 Rails 栈的简单应用
  3. 如何筑起第二座“长城”?长城汽车:唯有科技
  4. 浅谈DevExpress六:为chart创建动态数据源
  5. 怎么添加项目到SVN上面
  6. java 工厂模式的写法_java简单工厂模式是什么
  7. Typecho评论邮件提醒插件美化版CommentToMail
  8. Coolite Toolkit学习笔记四:容器控件之FiledSet、Panel和Window
  9. innerHTML、innerText 和 outerHTML 区别
  10. nodeJS笔记参考菜鸟教程
  11. 实现网站在线客服系统代码过程中解决问题-js实现点击复制文本
  12. 尼尔森数据显示谷歌雅虎今夏流量均增长
  13. [解决方法] 连接深信服Easyconnect之后无法代理抓包
  14. 【MySql 数据库综合练习01 】
  15. 心醉花海,芳菲春色入梦来
  16. Arista发布容器化、开放EOS版本
  17. 视频编解码 — 码控算法
  18. 小米二手机价格多少钱
  19. 数据处理之连续数据离散化
  20. 013、full-page-writes(全页写)

热门文章

  1. python怎么写入聚类标签_标签传播算法(Label Propagation)及Python实现
  2. NetBean快捷键
  3. pdca实施的流程图_PDCA实战案例详解:PDCA的 4个阶段 8个步骤及应用详解
  4. 计算机中心pdca,信息中心日常运维工作PDCA持续改进.docx
  5. 概率论基础-严士健 第二版 习题与补充2.4答案
  6. 计算机指纹驱动程序,计算机指纹失灵,提示找不到支持Windows Hello指纹的指纹识别器...
  7. 计算机常见故障及其原因
  8. Springboot毕设项目会议预约系统设计与实现3if68(java+VUE+Mybatis+Maven+Mysql)
  9. PANTONE国际色卡CMYK配方表
  10. 智安网络丨漫画人工智能:人工智能简史