边缘检测算子和小波变换提取图像边缘【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 ...
随机推荐
- 使用caffe的HDF5数据完毕回归任务
一直在研究怎样用caffe做行人检測问题.然而參考那些经典结构比方faster-rcnn等,都是自己定义的caffe层来完毕的检測任务. 这些都要求对caffe框架有一定程度的了解.近期看到了怎样用c ...
- Hibernate继承类的实现
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5603724.html 对于继承关系类的映射.比如在论坛中文章(Ar ...
- Ubuntu 18.04修改IP地址
注:配置/etc/network/interfaces已无用 root@ubuntu:~# vim /etc/netplan/50-cloud-init.yaml network: ethernets ...
- Swift的数组与OC中数组的区别
相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSAr ...
- excel 的几个函数使用
=IF(表1[[#此行],[state]]="修改", IF( ISBLANK( VLOOKUP( ...
- 使用Python SDK管理Azure Load Balancer
概述 下面将演示如何使用Python SDK管理中国区Azure Load balancer.关于Azure负载均衡器的详细功能介绍,请参考官方文档. Code Sample import os fr ...
- 中小型研发团队架构实践:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
- 要练习的lambda
取list的id 放入新List<Integer> List<Integer> list1 = list.stream().map(albumGroup1 -> albu ...
- 点滴积累【C#】---C#实现上传word将路径保存到数据库,文件保存到服务器。并且按照名称读取服务器的word
效果: 1. . . 数据库: 思路: 上传:先获取word物理地址,然后根据文件的类型判断,然后再保存到相应的文件夹下,再把路径插入到数据库中. 读取:首先根据输入的文件名字在数据库中查找出来文件的 ...
- Atitti. 语法树AST、后缀表达式、DAG、三地址代码
Atitti. 语法树AST.后缀表达式.DAG.三地址代码 抽象语法树的观点认为任何复杂的语句嵌套情况都可以借助于树的形式加以描述.确实,不得不承认应用抽象语法树可以使语句翻译变得相对容易,它很好地 ...