运用Matlab利用算子法进行数字图像边缘检测(只需三四行 限于本人知识有限 谢谢各位吖)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运用Matlab利用算子法进行数字图像边缘检测(只需三四行 限于本人知识有限 谢谢各位吖)相关的知识,希望对你有一定的参考价值。
本人知识有限 但急需这个 谢谢各位了
clear all;I=imread('**.***');%自己输入图片路径
GryIm=rgb2gray(I);%变灰度,如果是灰度图,直接删掉它
BW=edge(GryIm,'sobel');%后边的参数‘sobel’或'roberts'自己改
subplot(2,2,1);imshow(I);title('Oringal Image');
subplot(2,2,2);imshow(BW);title('Edge detect of sobel'); 参考技术A 下面是几种算法,你可以打开连接看看...看你是需要什么,MATLAB我觉得还是要多试,才会得到一个比较好的结果...
参考资料:http://zhidao.baidu.com/question/131280771.html
参考技术B I = imread('cameraman.tif');%读取图片imshow(edge(I,'sobel'));%直接显示系统边缘检测的结果
title('Matlab sobel processed ');%给边缘图像命名
图像分割基于matlab GUI医学图像均值聚类+OUST+区域生长法图像分割含Matlab源码 2210期
一、图像分割简介
1 图像分割技术
图像分割 : 根据灰度 , 颜色 , 纹理等,将图像进行分割。
2 常用的分割技术
2.1 边缘检测法
边缘是图像的最重要的特征。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。
边缘检测的基本思想:
(1)利用边缘增强算子,突出图像中的局部边缘;
(2)然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。
边界检测包括两个基本内容:
i. 用边缘算子提取出反映灰度变化的边缘点集
ii. 在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线
常用的检测算子有拉普拉斯边缘检测算法、Robert边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子。
五种边缘检测算法比较:
clear;
close all;
I=imread(houzi.jpg);
I0=rgb2gray(I);
subplot(231);
imshow(I);
Robert:边缘定位精度较高,对于陡峭边缘且噪声低的图像效果较好,但没有进行平滑处理,没有抑制噪声的能力。
sobel和prewitt:进行了平滑处理,对噪声具有一定抑制能力,但容易出现多像素宽度。
Laplacian:对噪声较为敏感,使噪声能力成分得到加强,容易丢失部分边缘方向信息,造成一些不连续的检测边缘,同时抗噪声能力较差。
log:抗噪声能力较强,但会造成一些尖锐的边缘无法检测到。
canny:最优化思想的边缘检测算子,同时采用高斯函数对图像进行平滑处理,但会造成将高频边缘平滑掉,造成边缘丢失,采用双阈值算法检测和连接边缘。
2.1.1 微分算子
(1)Canny 算子
(2) LOG算子
函数 edge ( )
I = imread(rice.png);
I = im2double(I);
J = imnoise(I, gaussian, 0, 0.005);
[K, thresh] = edge(J, Log, [], 2.3);
figure;
subplot(121),imshow(I);
subplot(122),imshow(K);
2.1.2 常见的微分算子
(1) Sobel算子
函数 edge ( )
I = imread(rice.png); %RGB彩色图
% imshow(I);
I = rgb2gray(I);
[J, thresh] = edge(I, sobel, [], horizontal);
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);
(2) Roberts 算子
函数 edge ( )
I = imread(rice.png);
I = im2double(I);
[J, thresh] = edge(I, Roberts, 35/255); %边缘检测 ,roberts算子, 阈值为归一化后的35/255
figure;
subplot(121),imshow(I);
subplot(122),imshow(J);
(3) Prewit 算子
函数 edge ( )
I = imread(rice.png);
% I = imread(rice.png);
I = im2double(I);
[J, thresh] = edge(I, prewitt, [], both);%默认阈值, 从水平和竖直方向进行设置
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);
2.2 阈值分割法
阈值分割法是最经典最流行的图像分割方法之一 , 也是最简单的分割方法 。其关键是找合适的灰度阈值,通常是根据图像的灰度直方图来选取, 阈值分割特别适用于目标和背景处于不同灰度级范围的图像。
2.2.1 全局阈值
直方图显示
clear,clc;
I = imread(rice.png);
subplot(121),imshow(I);
subplot(122),imhist(I, 200); %直方图显示
全局阈值分割
clear,clc;
I = imread(rice.png);
J = I > 120; %全局阈值为120 , 波谷大概是120
K = I > 130; %全局阈值为130
figure;
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);
2.2.2 Otsu阈值分割
I = imread(rice.png);
I = im2double(I);
T = graythresh(I); %获取阈值
J = im2bw(I, T); %图像分割
subplot(121),imshow(I);
subplot(122),imshow(J);
2.2.3 迭代式阈值分割法
clear, clc
I = imread(rice.png);
I = im2double(I);
T0 = 0.01; %精度
% T1 = graythresh(I) %用Otsu求阈值
T1 = min(I(:)) + max(I(:)) / 2; %初始估计阈值
r1 = find(I > T1); %找出比阈值大的像素
r2 = find(I <= T1); %找出比阈值小的像素
T2 = (mean(I(r1)) + mean(I(r2))) / 2; %各个像素加和求平均
while abs(T2 - T1) < T0 %
T1 = T2;
r1 = find(I > T1);
r2 = find(I <= T1);
T2 = (mean(I(r1)) + mean(I(r2))) / 2;
end
J = im2bw(I, T2);
subplot(121),imshow(I);
subplot(122),imshow(J);
2.3 区域分割法
将相邻的具有同种性质的像素或其他区域归并刀目前的区域中从而逐步增长区域
相似性度量 : 平均灰度值, 纹理, 颜色
缺点 : 往往造成过度分割
取决分割好坏的三个因素 : 种子点的选取 生长规则 终止条件
2.3.1 分水岭分割
clear,clc;
I = imread(Gray.jpg);
J = watershed(I, 4); % 4个连通区域,默认为8
subplot(121),imshow(I);
subplot(122),imshow(J);
2.3.2 区域生长分割
根据统一物体区域的像素相似性来聚集像素点达到区域生长的方法。其中由一组表示不同区域的种子像素开始,逐步合并种子周围相似的像素从而扩大区域。直到无法合并像素点或小领域为止。其中区域内的相似性的度量可用平均灰度值、纹理、颜色等等信息。关键在于选择初始种子像素及生长准则。最早的区域生长图像分割方法是由Levine等人提出。
2.3.3 区域分离聚合分割
区域分裂合并法(Gonzalez,2002),确定分裂合并的准则,然后将图像任意分成若干互不相交的区域,按准则对这些区域进行分裂合并。它可用于灰度图像分割及纹理图像分割。
3 基于能量泛函的分割方法
该类方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是使用连续曲线来表达目标边缘,并定义一个能量泛函使得其自变量包括边缘曲线,因此分割过程就转变为求解能量泛函的最小值的过程,一般可通过求解函数对应的欧拉(Euler.Lagrange)方程来实现,能量达到最小时的曲线位置就是目标的轮廓所在。
活动轮廓模型逐渐形成了不同的分类方式,较常见的是根据曲线演化方式的不同,将活动轮廓模型分为基于边界、基于区域和混合型活动轮廓模型。按照模型中曲线表达形式的不同,活动轮廓模型可以分为两大类:参数活动轮廓模型(parametric active contour model)和几何活动轮廓模型(geometric active contour model)。
3.1 参数活动轮廓模型(parametric active contour model)
Snake模型:
ASM(Active Shape Model)
AAM(Active Appearance Models)
CLM(Constrained local model)有约束的局部模型
3.2 几何活动轮廓模型
几何活动轮廓模型的曲线运动过程是基于曲线的几何度量参数而非曲线的表达参数,因此可以较好地处理拓扑结构的变化,并可以解决参数活动轮廓模型难以解决的问题。而水平集(Level Set)方法(Osher,1988)的引入,则极大地推动了几何活动轮廓模型的发展,因此几何活动轮廓模型一般也可被称为水平集方法。
二、部分源代码
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于运用Matlab利用算子法进行数字图像边缘检测(只需三四行 限于本人知识有限 谢谢各位吖)的主要内容,如果未能解决你的问题,请参考以下文章
数字图像处理课程设计(基于matlab的Hough变换检测图像边缘提取,包含完整代码)
图像分割基于matlab GUI医学图像均值聚类+OUST+区域生长法图像分割含Matlab源码 2210期