matlab中图像分割技术之一边缘检测

news2025/4/16 2:21:37

1.边缘检测
(1)Roberts边缘算子
(2)Sobel算子
(3)Prewitt算子
(4)拉普拉斯(Laplacian)算子
(5)LOG(Laplacian-Gauss)算子
(6)坎尼(Canny)算子
(7)利用霍夫(Hough)变换

图像分割技术图像分割是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),他们一般对应图像中特定的、具有独特性质的区域。
**(1)多种特征融合的分割方法:**除利用图像的原始灰度特征外,我们还可以利用图像的梯度特征、几何特征(形态、坐标、距离、方向、曲率等)、变换特征(傅里叶谱、小波特征、分形特征等)及统计学特征(纹理、不变矩、灰度均值等)等高层次特征。
**(2)多种分割方法结合的分割方法:**由于目标成像的不确定性以及目标的多样性,单一的分割方法很难对含复杂目标的图像取得理想的分割结果。

一、边缘检测

边缘(Edge)是指图像局部亮度变化最显著的部分。边缘主要存在于目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征提取和形状特征提取等图像分析的重要基础。
(1)Roberts边缘算子
一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘走向垂直。Roberts操作实际上是求旋转±45°两个方向上微分值的和。Roberts边缘算子定位精度高,在水平和垂直方向效果较好,但对噪声敏感。
两个卷积核Gx=[1 0 0 -1],Gy=[0 1 -1 0]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04);    %Roberts算子检测边缘
subplot(1,2,1),
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Roberts算子检测边缘')

在这里插入图片描述
(2)Sobel算子
Sobel算子是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单的求平均再差分,而是加强了中心像素上下左右四个方向像素的权重,运算结果是一副边缘图像。Sobel算子通常对灰度渐变和噪声较多的图像处理得较好。
两个卷积核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Sobel',0.04);  %Sobel算子检测边缘
subplot(1,2,1),
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Sobel算子检测边缘')

在这里插入图片描述
(3)Prewitt算子
Prewitt边缘算子是一种边缘样板算子,利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用。由于边缘点像素的灰度值与其领域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板匹配方法检测图像的边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得较好。
两个卷积核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'prewitt',0.04);     % 0.04为梯度阈值
subplot(1,2,1)
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Prewitt算子检测边缘')

在这里插入图片描述
(4)拉普拉斯(Laplacian)算子
如果所求的一阶导数高于某一阈值,则可确定该点为边缘点,这样做会导致检测的边缘点太多。一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,若用阈值来进行边缘检测,则在a和b之间的所有点都被记为边缘点。但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘。
(5)LOG(Laplacian-Gauss)算子
高斯滤波和拉普拉斯边缘检测结合在一起,形成LOG算法,也称之为拉普拉斯高斯算法。LOG算子是对Laplacian算子的一种改进,它需要考虑5×5邻域的处理,从而获得更好的检测效果。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'log',0.003,2);                 %sigma=2
subplot(1,3,1);
imshow(I);
title('原图像')
subplot(1,3,2);
imshow(BW1);
title(' sigma =2的LOG算子检测的边缘')
BW1=edge(I, 'log',0.003,3);                 % sigma=3
subplot(1,3,3);
imshow(BW1);
title('sigma =3的LOG算子检测的边缘')

在这里插入图片描述
(6)坎尼(Canny)算子
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'canny',0.2);      %Canny算子边缘检测
subplot(1,2,1);
imshow(I);
title('原图像')
subplot(1,2,2);
imshow(BW1);
title('Canny算子边缘检测')

在这里插入图片描述

%%所有都放一起比较
clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04);        %Roberts算子
BW2=edge(I, 'Sobel',0.04);          %Sobel算子
BW3=edge(I, 'Prewitt',0.04);        %Prewitt算子
BW4=edge(I, 'LOG',0.004);           % LOG算子
BW5=edge(I, 'Canny',0.04);          % Canny算子
subplot(2,3,1),
imshow(I);
title('原图像');
subplot(2,3,2),
imshow(BW1)
title('Roberts ')
subplot(2,3,3),
imshow(BW2)
title(' Sobel ')
subplot(2,3,4),
imshow(BW3)
title(' Prewitt ')
subplot(2,3,5),
imshow(BW4)
title(' LOG ')
subplot(2,3,6),
imshow(BW5)
title('Canny ')

在这里插入图片描述
Roberts算子提取边缘的结果边缘较粗,边缘定位不很准确,Sobel算子和Prewitt算子对边缘的定位就准确了一些,而采用拉普拉斯高斯算子进行边缘提取的结果要明显优于前三种算子,特别是边缘比较完整,位置比较准确。相比而言,Canny算子提取的边缘最为完整,而且边缘的连续性很好,效果优于以上其他算子,这主要是因为它进行了“非极大值抑制”和形态学连接操作的结果。

(7)利用霍夫(Hough)变换
检测图像边缘的算法Hough变换本来是应用于直线检测中的,充分体现了Hough变换具有明了的几何解析性、一定的抗干扰能力以及易于实现并行处理等优点。

		clc;                %clc的作用就是清屏幕
		clear;              %clear是删除所有的变量
		close all;          %close all是将所有打开的图片关掉。
		I=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
		rotI=rgb2gray(I);
		subplot(2,2,1);
        imshow(rotI);
        title('灰度图像');
        axis([50,250,50,200]);
        grid on;
        axis on;
        BW=edge(rotI, 'prewitt');          %prewitt算子边缘检测
        subplot(2,2,2);
        imshow(BW);
        title('prewitt算子边缘检测后图像');
        axis([50,250,50,200]);
        grid on;
        axis on;
        [H, T, R]=hough(BW);               %霍夫变换
        subplot(2,2,3);
        imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit');
        title('霍夫变换图');
        xlabel('\theta'), ylabel('\rho');
        axis on , axis normal, hold on;
        P=houghpeaks(H,5, 'threshold', ceil(0.3*max(H(:))));
        x=T(P(:,2)); y=R(P(:,1));
        plot(x, y, 's', 'color', 'white');
        lines=houghlines(BW, T, R, P, 'FillGap',5, 'MinLength',7);
        subplot(2,2,4); , imshow(rotI);
        title('霍夫变换图像检测');
        axis([50,250,50,200]);
        grid on;
        axis on;
        hold on;
        max_len=0;
        for k=1:length(lines)
        xy=[lines(k).point1; lines(k).point2];
        plot(xy(:,1), xy(:,2), 'LineWidth',2, 'Color', 'green');
        plot(xy(1,1), xy(1,2), 'x', 'LineWidth',2, 'Color', 'yellow');
        plot(xy(2,1), xy(2,2), 'x', 'LineWidth',2, 'Color', 'red');
        len=norm(lines(k).point1-lines(k).point2);
        if(len>max_len)
        max_len=len;
        xy_long=xy;
        end
        end
        plot(xy_long(:,1), xy_long(:,2), 'LineWidth',2, 'Color', 'cyan');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数仓搭建-DWD层

DWD层(用户行为日志) 6.1.1 日志解析思路 1)日志结构回顾 (1)页面埋点日志 (2)启动日志 2)日志解析思路 6.1.2 get_json_object函数使用 1)数据 [{"name&qu…

力扣(LeetCode)128. 最长连续序列(C++)

哈希集合 建立哈希集合,存入所有数。一次遍历数组,对每个数检查是否有前一个数,如果某个数没有前一个数,说明这个数是一个序列的起点,从这个数开始遍历得到序列长度,维护最大序列长度,即是本题…

【SpringBoot项目中Knife4j在线API文档】

目录 1. Knife4j在线API文档基本使用 2. 配置API文档信息 1. Knife4j在线API文档基本使用 Knife4j是一款基于Swagger 2的在线API文档框架。 使用Knife4j的基础步骤: 添加依赖在application.properties / application.yml中添加配置在项目中添加配置类关于依赖项…

甲烷排放通量的计算

甲烷或N2O的排放通量计算公式如下: 式 (1) 中, F为CH4 (以C计) 或N2O (以N计) 排放通量, mgm-2h-1或μgm-2h-1;ρ为标准状况下CH4或N2O的密度, 分别为0.54和1.25 gL-1;V为采样箱体积, m3;A为采样底座内土壤表面积, m2;ΔCΔtΔCΔt表示CH4或N2O的排放速率, μLL-1h-…

浅谈正则表达式——C++正则替换引起的性能下降

目录问题引入正则替换测试常规方法测试模拟外部多次调用正则性能差的原因写在最后问题引入 最近在一次解析大文件(10万行)时,处理空格用到了正则替换,却没想到带来了性能上的问题,特别在此记录给需要的人避坑。假如要用C处理一个字符串首尾的…

4-four: 我收到的赞

我收到的赞 重构点赞功能(用上节的功能较为麻烦,需要将用户发布的帖子和评论所获得的赞加起来) 以用户为key,记录点赞数量increment(key), decrement(key)。 开发个人主页 以用户为key,查询点赞数量 1.在Redis.Ut…

RabbitMQ------其他知识点(幂等性、优先级队列、惰性队列)(九)

RabbitMQ------其他知识点()(九) 幂等性 用户对于统一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。同一次还款,通过多次点击不会生成多条还款记录,一个人的…

crm客户管理系统为企业带来的价值

简道云CRM场景套件对中小企业来说,crm客户管理系统最核心的作用,一是客户信息(联系信息和洽谈过程)的存留,不会因为业务人员的离职造成流失,这点对老板很重要。二是可帮助业务人员(客户获取、主管指导等&am…

Win32API操作文件

在Windows编程中CreateFile函数是用得非常多的,不仅可以打开文件,还可以打开管道、邮槽、通信资源、磁盘设备(早期Windows),控制台、目录。该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件…

SpringSecurity(二十)---OAuth2:实现资源服务器(上)资源服务器搭建以及直接调用授权服务器模式

一、 前言 本章将讨论如何使用Spring Security实现一个资源服务器,资源服务器是管理用户资源的组件。另外,学习本章有个前提,需要先把前面搭建授权服务器的相关文章先给阅读,否则可能后面出现的授权服务器相关代码不知道个所以然…

【Redis】缓存击穿的产生情况解决方案

1. 缓存击穿产生 也叫做 热点 Key 问题,高并发访问并且缓存重建业务较复杂的 key 突然失效了,无数的请求想要重建缓存,大量的访问会在瞬间给数据库带来巨大冲击。 2. 解决方案 2.1 方案一:互斥锁 查询缓存不存在时,…

【OpenFOAM】-olaFlow-算例1- baseWaveFlume

算例路径: olaFlow\tutorials\baseWaveFlume 算例描述: 一个基础的二维波浪水槽 算例快照: 图1 波浪模拟结果图2 算例网格文件结构: ├── 0.org │ ├── U │ ├── alpha.water │ ├── alpha.water.org │ └─…

关于Redis的远程连接 Connection: Disconnect on error 问题

bug描述: Connection: Disconnect on error: Connection error: Connection timed outConnection: 192.168.245.128 > connection failed 问题复现: redis版本: redis-6.2.6 Linux版本:CenterOS 7 在linux上已经完成了red…

第五章. 可视化数据分析分析图表—常用图表的绘制1—折线图,柱形图

第五章. 可视化数据分析分析图 5.3 常用图表的绘制1—折线图,柱形图 本节主要介绍常用图表的绘制,主要包括折线图,柱形图。 1.折线图(matplotlib.pyplot.plot) 折线图可以显示随时间而变化的连续数据,适用于显示在相…

Hadoop原理与技术——hdfs命令行基本操作

一、实验目的 熟悉hdfs命令行基本操作 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 1:hdfs常见命令: (1)查看帮助:hdfs dfs -help (2)查看当前目录…

OpenCV图像处理——目标追踪

总目录 图像处理总目录←点击这里 二十四、目标追踪 24.1、多目标(手动检测)追踪 24.1.1、原理 目标检测:运行之后按下s,通过鼠标对某个目标进行检测,然后点击空格或者回车 目标追踪:opencv的八种追踪…

【JavaEE】JavaScript(基础语法)1

努力经营当下,直至未来明朗! 文章目录前言一、JavaScript初识(简单了解就行,没时间跳过)二、【JS的代码相关】【注释】【输入输出】三、语法1. 变量2. 【基本数据类型】THINK前言 一个人最大的痛苦就是对自己无能的愤…

信贷风控NCL净损失率的指标实现与应用

在金融信贷业务的风险控制过程中,有一项财务指标发挥着比较重要的信息参考价值,可以有效衡量某个月份放款金额在形成呆账后的资金损失情况,其中呆账指的是信贷逾期180天以上,这个指标便是NCL(Net Credit Loss&#xff…

大家都在用的福昕阅读器 foxit 你还不知道吗? 祛除水印PDF转换全功能解锁…

趣味拓展 什么字大家看了都说没用? (答案在文末) 引言 福昕阅读器是一款高级PDF编辑器,查看目录、去除水印、编辑文本、转换格式等都是可以用到的~ 小编第一次使用的时候是用来查看pdf文档目录的,当时未使用破解版,后来循序渐进…

基于PHP+MySQL中小学生科学实验展示网站的设计与实现

中小学生科学实验展示网站能够通过互联网得到广泛的、全面的宣传,让尽可能多的人积极的参加到科学实验行列中来,不仅为需要的人提供了服务,而且锻炼了自己,同时能够让中小学生对科学实验的兴趣有很大的提高 PHP中小学生科学实验展示网站是一个科普类型的网站,系统通过PHp&#…