边缘检测算子和小波变换提取图像边缘【matlab】
Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差。
小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感性。所以可以边缘检测。
Roberts边缘检测算子:
clear;
I=imread('D:\文件及下载相关\图片\gray2.png');
I=rgb2gray(I);
grayPic=mat2gray(I);
[m,n]=size(grayPic);
newGrayPic=grayPic;
robertsNum=;
robertThreshold=0.2;
for j=:m-
for k=:n-
robertsNum = abs(grayPic(j,k)-grayPic(j+,k+)) + abs(grayPic(j+,k)-grayPic(j,k+));
if(robertsNum > robertThreshold)
newGrayPic(j,k)=;
else
newGrayPic(j,k)=;
end
end
end
figure,imshow(newGrayPic);
title('roberts')
小波变换检测边缘:
clear all;
I = imread('D:\文件及下载相关\图片\gray2.png');
I = rgb2gray(I);imshow(I);
I1 = imadjust(I,stretchlim(I),[,]);figure;imshow(I1);
[N,M] = size(I);
h = [0.125,0.375,0.375,0.125];
g = [0.5,-0.5];
delta = [,,];
J = ;
a(:N,:M,,:J+) = ;
dx(:N,:M,,:J+) = ;
dy(:N,:M,,:J+) = ;
d(:N,:M,,:J+) = ;
a(:,:,,) = conv2(h,h,I,'same');
dx(:,:,,) = conv2(delta,g,I,'same');
dy(:,:,,) = conv2(g,delta,I,'same');
x = dx(:,:,,);
y = dy(:,:,,);
d(:,:,,) = sqrt(x.^+y.^);
I1 = imadjust(d(:,:,,),stretchlim(d(:,:,,)),[ ]);figure;imshow(I1);
lh = length(h);
lg = length(g);
for j = :J+
lhj = ^j*(lh-)+;
lgj = ^j*(lg-)+;
hj(:lhj)=;
gj(:lgj)=;
for n = :lh
hj(^j*(n-)+)=h(n);
end
for n = :lg
gj(^j*(n-)+)=g(n);
end
a(:,:,,j+) = conv2(hj,hj,a(:,:,,j),'same');
dx(:,:,,j+) = conv2(delta,gj,a(:,:,,j),'same');
dy(:,:,,j+) = conv2(gj,delta,a(:,:,,j),'same');
x = dx(:,:,,j+);
y = dy(:,:,,j+);
dj(:,:,,j+) = sqrt(x.^+y.^);
I1 = imadjust(dj(:,:,,j+),stretchlim(dj(:,:,,j+)),[ ]);
figure;imshow(I1);
end
图像边缘检测经典算子及MATLAB实现 - CSDN博客 http://blog.csdn.net/u012808193/article/details/45722283
边缘检测是图像分析和模式识别的主要特征提取手段。所谓边缘是指其周围像素灰度后阶变化或屋顶状变化的那些像素的集合,它存在于目标与背景、目标与目标、区域与区域,基元与基元之间。 因此它是图象分割所依赖的重要的特征,也是纹理特征的重要信息源和形状特征的基础;而图象的纹理形状特征的提取又常常依赖于图象分割。 图象的边缘提取也是图象匹配的基础,因为它是位置的标志,对灰度的变化不敏感,它可作为匹配的特征点。
目前常用的边缘检测方法有:Roberts边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Laplace边缘检测算子等等。
1、Roberts边缘检测算子
Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差。
MATLAB实验代码如下:
clear;
sourcePic=imread('lena.jpg'); %读取原图像
grayPic=mat2gray(sourcePic); %实现图像矩阵的归一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
robertsNum=; %经roberts算子计算得到的每个像素的值
robertThreshold=0.2; %设定阈值
for j=:m- %进行边界提取
for k=:n-
robertsNum = abs(grayPic(j,k)-grayPic(j+,k+)) + abs(grayPic(j+,k)-grayPic(j,k+));
if(robertsNum > robertThreshold)
newGrayPic(j,k)=;
else
newGrayPic(j,k)=;
end
end
end
figure,imshow(newGrayPic);
title('roberts算子的处理结果')
实验结果:
2、Sobel边缘检测算子
对数字图像的每个像素,考察它上、下、左、右邻点灰度的加权差,与之接近的邻点的权大。
MATLAB实验代码如下:
clear;
sourcePic=imread('lena.jpg');%读取原图像
grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
sobelNum=;%经sobel算子计算得到的每个像素的值
sobelThreshold=0.8;%设定阈值
for j=:m- %进行边界提取
for k=:n-
sobelNum=abs(grayPic(j-,k+)+*grayPic(j,k+)+grayPic(j+,k+)-grayPic(j-,k-)-*grayPic(j,k-)-grayPic(j+,k-))+abs(grayPic(j-,k-)+*grayPic(j-,k)+grayPic(j-,k+)-grayPic(j+,k-)-*grayPic(j+,k)-grayPic(j+,k+));
if(sobelNum > sobelThreshold)
newGrayPic(j,k)=;
else
newGrayPic(j,k)=;
end
end
end
figure,imshow(newGrayPic);
title('Sobel算子的处理结果')
实验结果:
3、Prewitt边缘检测算子
Prewitt算子是一种边缘样板算子。这些算子样板由理想的边缘子图像构成。依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值。
MATLAB实验代码
clear;
sourcePic=imread('lena.jpg');%读取原图像
grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
PrewittNum=;%经Prewitt算子计算得到的每个像素的值
PrewittThreshold=0.5;%设定阈值
for j=:m- %进行边界提取
for k=:n-
PrewittNum=abs(grayPic(j-,k+)-grayPic(j+,k+)+grayPic(j-,k)-grayPic(j+,k)+grayPic(j-,k-)-grayPic(j+,k-))+abs(grayPic(j-,k+)+grayPic(j,k+)+grayPic(j+,k+)-grayPic(j-,k-)-grayPic(j,k-)-grayPic(j+,k-));
if(PrewittNum > PrewittThreshold)
newGrayPic(j,k)=;
else
newGrayPic(j,k)=;
end
end
end
figure,imshow(newGrayPic);
title('Prewitt算子的处理结果')
实验结果
4、Laplace边缘检测算子
Laplacian 算子是n维欧几里德空间中的一个二阶微分算子。
MATLAB实验代码
clear;
sourcePic=imread('lena.jpg');%读取原图像
grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
LaplacianNum=;%经Laplacian算子计算得到的每个像素的值
LaplacianThreshold=0.2;%设定阈值
for j=:m- %进行边界提取
for k=:n-
LaplacianNum=abs(*grayPic(j,k)-grayPic(j-,k)-grayPic(j+,k)-grayPic(j,k+)-grayPic(j,k-));
if(LaplacianNum > LaplacianThreshold)
newGrayPic(j,k)=;
else
newGrayPic(j,k)=;
end
end
end
figure,imshow(newGrayPic);
title('Laplacian算子的处理结果')
实验结果
边缘检测算子和小波变换提取图像边缘【matlab】的更多相关文章
- 利用matlab写一个简单的拉普拉斯变换提取图像边缘
可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个 ...
- 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure ...
- matlab 提取图像轮廓(图像边缘提取)
利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...
- 基于MATLAB边缘检测算子的实现
基于MATLAB边缘检测算子的实现 作者:lee神 1. 概述 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要 ...
- 图像边缘检测——几种图像边缘检测算子的学习及python 实现
本文学习利用python学习边缘检测的滤波器,首先读入的图片代码如下: import cv2 from pylab import * saber = cv2.imread("construc ...
- MATLAB·提取图像中多个目标
基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...
- canny算子求图像边缘,edgebox那部分
过程: 1. 彩色图像转换为灰度图像 2. 对图像进行高斯模糊 3. 计算图像梯度,根据梯度计算图像边缘幅值与角度(这里其实用到了微分边缘检测算子来计算梯度幅 ...
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...
- OpenCV图像处理篇之边缘检测算子
OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...
随机推荐
- [Android] SQLite数据库之增删改查基础操作
在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...
- static、final修饰符、内部类
static修饰符: static修饰符能够与属性.方法和内部类一起使用,表示静态的.类中的静态变量和静态方法能够与类名一起使用.不须要创建一个类的对象来訪问该类的静态成员. class Static ...
- bootstrap的两种在input框里面增加一个图标的方式
具体代码如下: <div class="input-group"> <div class="input-icon-group"> < ...
- 通过设置标签class值控制标签的显示与隐藏
需求背景如下: 原项目居民.单位.计量三模块共用一个jsp文件,显示的页面也顺理成章的统一了,幸亏没有调用同一个js,在此基础上要求居民和单位计量的分离,即居民的显示居民的相关信息,单位和计量的显示相 ...
- Mac Xcode下配置OpenGL
暂时搁置一下iOS,又要去弄一些杂七杂八的东西了,毕竟是学校的作业,还是要完成的. 作业是让我们用OpenGL做一个茶壶- -.而且要三维立体能旋转的那种. 好吧这些都不是重点,重点是我最终决定在Ma ...
- python selenium ---键盘事件
转自:http://www.cnblogs.com/fnng/p/3258946.html 本节重点: l 键盘按键用法 l 键盘组合键用法 l send_keys() 输入中文运行报错问题 键盘按键 ...
- Android与JS进行交互传文件路径
webview+h5这种混合开发最近很火,其中最重要的大概就是java代码和js的交互了,刚接触这东西两天,写写收获. 新建一个assets文件夹,要与res这个文件夹同级,其中存放web项目. 先看 ...
- 将Cmder添加到系统右键菜单中
1.把 Cmder 加到环境变量 把Cmder.exe存放的目录添加到系统环境变量: 加完之后,Win+r一下输入cmder,即可. 2.添加 cmder 到右键菜单:环境变量添加后,在任意文件夹中即 ...
- linux一条命令添加一个root级别账户并设置密码
内网机器提权添加账户,无回显,设置密码就不好弄,下面就是添加一个root级别的账户并设置密码的命令 ? 1 useradd -p `openssl passwd -1 -salt 'lsof' a ...
- Objective-C之成魔之路【5-选择结构】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...