dog算子处理图片边界matlab代码,圖像邊緣檢測——二階微分算子(上)Laplace算子、LOG算子、DOG算子(Matlab實現)...

本文主要是介绍dog算子处理图片边界matlab代码,圖像邊緣檢測——二階微分算子(上)Laplace算子、LOG算子、DOG算子(Matlab實現)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果圖像灰度變化劇烈,進行一階微分則會形成一個局部的極值,由數學上的知識,對圖像進行二階微分則會形成一個過零點,並且在零點兩邊產生一個波峰和波谷,我們要設定一個閾值,檢測到這個過零點,如下圖所示:

40f7bb227f6e8b9718f251146bf336dc.png

帶來了兩個好處:

1. 二階微分關心的是圖像灰度的突變而不強調灰度緩慢變化的區域,對邊緣的定位能力更強。

2. Laplace算子是各項同性的,即具有旋轉不變性(后面會證明),在一階微分里,我們是用|dx|+|dy|來近似一個點的梯度的,當圖像旋轉一個角度時,這個值就變化了,但對於Laplace算子來說不管圖像怎么旋轉,得到的響應是一樣的。

一個注意點:

我們檢測的必須是“過零點“,而不單單是零點,也就是要保證這個被選中的點一定要是局部極值點。比如下面這個例子,上面的曲線是圖像空間,虛線處的點並不是圖像的局部極值點,但求二階導的時候確實是零點。再比如圖像灰度的平坦區域,不管是一階導還是二階導都是0,它們顯然不是我們要的點:

461cdfd7b4c71274fe893b5f171efcf5.png

過零點的確定:

以p為中心的一個3*3領域,p點為過零點意味着至少有兩個相對的領域像素的符號不同。有四種要檢測的情況:左/右、上/下,和兩個對角。如果g(x,y)的值與一個閾值比較(一種通用的方法),那么不僅要求相對領域的符號不同,數值差的絕對值要超過這個閾值,這時p稱為一個過零點像素。

Laplace算子

09d3d5f4e21487dfb171b722b321878b.png

Laplace算子是梯度的散度 :

4c82a8b4b3abf78e62f52bf2704bf317.gif

577a6b758984fa19b652042752464dd7.png

圖像是離散的二維矩陣,用差分近似微分:

34e702cd1479f8398ff0ccb5b68113ca.gif

所以,

e3426187c9438145cdd566b7469e7e4b.gif

模板表示為:                                              其他常用的模板還有:

1f8ffa18974badd93235ccaa07cf2c98.png                                                                   

751c5418044f97907c179cd4c2ce54d3.gif                          

e0ed19419e94004e1d64b78ccacc628f.gif

Laplace算子的旋轉不變性證明如下:

fc82b36c829ba4b7f247473d086e40ea.png

兩個缺點:

1.沒有了邊緣的方向信息;

2.雙倍加強了噪聲的影響。

在Matlab中的測試結果:

原圖:

3b856297e3480933620311f7cec5972a.png

原圖在不同閾值下的邊緣檢測效果:

9525cdb20832f341f95f59d02d007fc8.png

加了椒鹽噪聲之后:

72e5845e3157261e0755b41ad91f73b4.png

加了高斯噪聲之后:

e8865fa3e370f08437c404fb5b07052d.png

代碼:

lenna = imread('E:\ImageTest\512\g512_006\lena.pgm');

%---------------------------------------------------------------------------

lenna_3=mat2gray(lenna); %圖像矩陣的歸一化

[m,n]=size(lenna_3);

lenna_4=lenna_3; %保留圖像的邊緣一個像素

L=0;

t=0.2; %設定閾值

%Laplace算子

for j=2:m-1

for k=2:n-1

L=abs(4*lenna_3(j,k)-lenna_3(j-1,k)-lenna_3(j+1,k)-lenna_3(j,k+1)-lenna_3(j,k-1));

if(L > t)

lenna_4(j,k)=255; %白

else

lenna_4(j,k)=0; %黑

end

end

end

figure;

imshow(lenna_4,[]);title('Laplacian 0.2')

可以明顯的看出,Laplace算子雖然解決了一階微分算子確定閾值的困難,但是卻不能克服噪聲的干擾。

於是LoG算子橫空出世。

LOG算子

1980年,Marr和Hildreth提出將Laplace算子與高斯低通濾波相結合,提出了LOG(Laplace and Guassian)算子。 步驟如下:

1.對圖像先進性高斯濾波(G

b63727d3a1772313d2c5572262198128.gif × f),再進行Laplace算子運算Δ(G

b63727d3a1772313d2c5572262198128.gif × f);

2.保留一階導數峰值的位置,從中尋找Laplace過零點;

3.對過零點的精確位置進行插值估計。

66e4a549a788c380c96d4b44838a9016.png

由上圖可以看出,高斯濾波之后邊緣信息才顯現出來。

d3fe6a9e2b6d80bd185d042a87e33e3d.gif

59bba3413938995ae91a18e98430c120.gif  微分算子與卷積算子的次序可以交換。

LOG算子如下:

b444e56f8057fa565ca3e3fee0b6bbef.png

根據sigma的不同以及3sigma原則可以建立不同的模板,sigma是一個尺度參數,在圖像處理中引入尺度以及建立多尺度空間是一個重要的突破,sigma越大,圖像越模糊濾除噪聲效果越好,sigma越小,效果相反。

常用模板如下:

05ff230a23df64aa7ab81e8667f340f0.gif

LOG的Matlab效果:

86b4940c3c5e78466783d338ebce60cc.png

lenna = imread('E:\ImageTest\512\g512_006\lena.pgm');

subplot(121)

imshow(lenna,[]);title('原圖')

%-------------------------------------------------------------

%自帶函數

lenna=double(lenna);

lenna_1 = edge(lenna,'log');

subplot(122)

imshow(lenna_1,[]);title('LoG 0.5')

由數學上的關系,我們可以簡化LOG的計算——這便是DOG算子。

DOG算子

二維高斯對sigma求導:

9a19e612d8c127086902739e79d28ed6.png

上面我們已經得到:

d759c98969f7a23e462e36c11f8ea960.png

可以看出:

cb6e1ad09d1d0552cef5b16bfae5e594.png

由導數定義:

bf7d5b7ade8f1e83f38d95748bd320e2.png

所以,

290ced91a870ddb752184d51e61e15c1.png

變形一下得到:

66ee6616b1682c41527f977026685496.png

右邊比LOG算子只是多了一個系數,在實際應用中不影響。

我們定義:

94a93018671a749f71a26b636b12bbbf.gif

當我們用DOG算子代替LOG算子與圖像卷積的時候:

ffd66ca27d78961793a1a2798783382e.png

近似的LOG算子

b63727d3a1772313d2c5572262198128.gif值的選取:

b30281b988bd0497e8e862f9863522bb.gif

當使用這個值時,可以保證LoG和DoG的過零點相同,只是幅度大小不同。

這樣,我們只要對圖像進行兩次高斯平滑再將結果相減就可以近似得到LOG作用於圖像的效果了!

DOG的matlab效果:

9c07c2b89a747e90fb3f363c7aee216e.png

这篇关于dog算子处理图片边界matlab代码,圖像邊緣檢測——二階微分算子(上)Laplace算子、LOG算子、DOG算子(Matlab實現)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180390

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer