MATLAB数字图像处理(三)——图像轮廓提取与边缘检测

2023-10-29

二值图像轮廓提取

根据掏空内部点算法,运用Matlab编程实现二值图像的轮廓提取。(以二值图像circles为例)

I = imread('circles.png');
subplot(1,2,1),imshow(I);
[M,N]=size(I);
Ic=I;
for i = 2:M-1
    for j=2:N-1
        if(I(i,j)==255&I(i+1,j)==255&I(i-1,j)==255&I(i,j+1)==255&I(i,j-1)==255&I(i+1,j+1)==255&I(i+1,j-1)==255&I(i-1,j+1)==255&I(i-1,j-1)==255)
            Ic(i,j)=0;
        end
    end
end
subplot(1,2,2),imshow(Ic);

在这里插入图片描述
掏空内部点,就是判断该点灰度值,与其领域8个点的灰度值是否属于目标物体的灰度值,如果是,说明其是内部点,将其改为背景灰度。这里生成了一个原图像的副本Ic,在副本上进行轮廓提取。

灰度图像边缘检测

以灰度图像rice为例,利用Matlab图像处理工具箱中的edge函数,分别使用Roberts 算子、Sobel算子、Prewitt 算子对其进行边缘检测。

I=imread('rice.png');
subplot(2,2,1),imshow(I);
BW1=edge(I,'roberts');
BW2=edge(I,'prewitt');
BW3=edge(I,'sobel');
subplot(2,2,2),imshow(BW1),title('roberts算子');
subplot(2,2,3),imshow(BW2),title('prewitt算子');
subplot(2,2,4),imshow(BW3),title('sobel算子');

在这里插入图片描述
(1)函数格式:BW = edge(I, ‘method’, thresh)
(2)格式说明:edge函数输入灰度图像矩阵I,输出二值图像矩阵BW;参数’method’用于指定所使用的边缘检测算子,可以是’roberts’、‘sobel’、‘prewitt’、‘log’、‘canny’;参数thresh用于指定梯度门限值(也称梯度阈值),图像中梯度值大于等于门限值thresh的像素用白色(1)表示,说明这些地方对应边缘,梯度值小于门限值thresh的像素用黑色(0)表示(edge function will ignore all edges that are not stronger than thresh)。若不指定参数thresh,则edge函数会自动选择阈值。所以edge函数最终将原始灰度图像中的边缘和背景用二值图像的形式展现出来,以突出边缘的位置,达到边缘检测的目的。

含噪图像边缘检测

若向原始图像rice中加入高斯噪声,之后再对噪声图像分别运用Roberts 算子、Sobel算子、Prewitt 算子、Log算子(高斯-拉普拉斯算子)进行边缘检测,观察检测结果,试比较4种边缘检测算子的抗噪声干扰能力。

I=imread('rice.png');
subplot(2,3,1),imshow(I);
G=imnoise(I,'gaussian');
subplot(2,3,2),imshow(G);
BW1=edge(G,'roberts');
BW2=edge(G,'prewitt');
BW3=edge(G,'sobel');
BW4=edge(G,'log');
subplot(2,3,3),imshow(BW1),title('roberts算子');
subplot(2,3,4),imshow(BW2),title('prewitt算子');
subplot(2,3,5),imshow(BW3),title('sobel算子');
subplot(2,3,6),imshow(BW4),title('log算子');

在这里插入图片描述
很明显log算子对高斯噪声的抗干扰能力最强,因为log算子相当于先进行均值滤波(高斯模板卷积),再用拉普拉斯算子,所以对高斯噪声抗干扰能力强。

均值滤波函数

根据均值滤波的基本原理自定义均值滤波函数d=avefilt(x,n),x为输入图像矩阵,n为模板大小(即n×n),d为输出图像矩阵。并调用该函数对含有高斯噪声的图像进行均值滤波处理。

% avefilt.m
function d=avefilt(x,n)
a=ones(n);%生成n*n的全1矩阵
[M,N]=size(x);
x1=double(x);
x2=x1;
for i=1:M-n+1
    for j=1:N-n+1
        c=x1(i:i+n-1,j:j+n-1).*a;
        s=sum(sum(c));%求c矩阵所有元素的和
        x2(i+fix((n-1)/2),fix(j+(n-1)/2))=s/(n*n);%使中心元素=均值,fix()向下取整
    end
end
d=uint8(x2);%四舍五入取整映射到0~255范围

% ex3_4.m
ori=imread('eight.tif');
Gao=imnoise(ori,'gaussian');
subplot(1,3,1),imshow(ori);
subplot(1,3,2),imshow(Gao);
after=avefilt(Gao,3);
subplot(1,3,3),imshow(after);

在这里插入图片描述
均值滤波处理后,有一定的去噪效果,但是图像变得模糊了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB数字图像处理(三)——图像轮廓提取与边缘检测 的相关文章

  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • Python:Urllib2 和 OpenCV

    我有一个程序 可以将图像保存在本地目录中 然后从该目录中读取图像 但我不想保存图像 我想直接从url读取它 这是我的代码 import cv2 cv as cv import urllib2 url http cache2 allposte
  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • 在 Python 上显示 Matlab mat 文件中的图像

    我目前正在尝试显示从此下载的 Mat 文件中的图像site http www rctn org bruno sparsenet 这是一个 mat 文件 所以我尝试使用 scipy io loadmat 函数加载它 但我似乎无法绘制图像 我究
  • 使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

    我正在使用 OpenCV Python 示例开发相机校准程序 来自 OpenCV 教程 http opencv python tutroals readthedocs io en latest py tutorials py calib3d
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • java.lang.UnsatisfiedLinkError:java.library.path中没有opencv_java2411

    我正在尝试将 opencv 添加到我的 Spring Boot Maven 项目中 为了使用 opencv 库 我必须在 java library path 中提供本机库 我已将以下命令添加到 Eclipse VM 参数中 Djava li
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • 在 MATLAB 中验证输入的最佳实践

    在验证 MATLAB 函数中的输入时 什么时候使用 inputParser 比使用断言更好 或者还有其他更好的工具可用吗 我个人发现使用 inputParser 不必要地复杂 对于 Matlab 始终需要检查 3 项内容 存在 类型和范围
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4

随机推荐

  • zsh和oh-my-zsh的一些好用的主题及插件

    zsh主题 zsh的默认主题为robbyrussell 用了一段时间发现并不是那么好用 比如它不会把当前的工作路径全部展示出来 例如现在处于路径 home zhu go src MyProject中 此主题就只是显示最后路径 即MyProj
  • verdaccio + docker搭建私有npm仓库(有手就行)

    一 环境准备 docker 二 步骤 运行verdaccio docker run d name verdaccio p 4873 4873 restart always verdaccio verdaccio 该命令执行完 一个本地的np
  • 连休8天!关于2020年国庆节、中秋节放假安排的通知!!!

    关于2020年国庆节 中秋节放假安排的通知 根据国务院办公厅通知精神 现将2020年国庆节 中秋节放假安排通知如下 10月1日 星期四 至8日 星期四 放假调休 共8天 9月27日 星期日 10月10日 星期六 上班 请广大市民提前安排好工
  • springcloud微服务实战:(一)微服务重点内容

    微服务重点内容就是两大特性和三大功能 两大特性 高可用性 高扩展性 三大功能 服务间通信 服务容错 异常排查 分布式能力建设 三大功能是指微服务核心组件的功能维度 由浅入深层次递进 而两大特性是构建在每个服务组件之上的高可用性和高可扩展性
  • Windows 11 将使 AMD 芯片性能下降 15%!

    整理 孙胜 出品 CSDN ID CSDNnews 10月5日 微软终于发布了Windows 11正式版本 尽管Windows 11被微软称为 10年以来最重要的版本更新之一 说实话Windows 11还是有点令人失望 暂且不论Window
  • 基于CC2530的串口通信(可用与STM32通信)

    材料准备 CC2530芯片与底板一个 方便调试与下载 这是我淘宝买的一个小小的zigbee开发板 CC2530 配置串口的一般步骤 1 配置 IO 使用外部设备功能 此处配置 P0 2 和 P0 3 用作串口 UART0 2 配置相应串口的
  • 解决:error: ‘XXX’ is not a class template

    解决方法 首先去写 普通类模板 然后再实现 全特化 此问题在测试 模板全特化 的时候发现 如果首先去写 全特化 然后再实现 普通类模板 编译器就会提醒 error XXX is not a class template 全特化 templa
  • IDEA好用的插件推荐

    目录 1 Translation 2 GsonFormat 3 VisualVM Launcher 4 CodeGlance Pro 5 Key Promoter X 6 GenerateAllSetter 7 ignore 8 MyBat
  • 大白话Vue之publicPath

    1 下看一下publicPath字段出现的位置 vue config js webpack config js 2 官网中的解释 可以忽略 3 用人话解释publicPath 场景说明 每次打包build完后 都单独生成一个 dist文件夹
  • HTML基于mvc的项目实例,一个简单MVC5 + EF6示例分享

    本文所使用的软件及环境 Visual Studio Ultimate 2013 MVC5 EF6 NET Framework 4 5 LocalDB Windows 7 x64 Professional 说明 1 在EF Entity Fr
  • android的消息处理机制(图+源码分析)——Looper,Handler,Message

    http www cnblogs com codingmyworld archive 2011 09 14 2174255 html
  • 2019下半年上午题

    2019下半年上午题 b 选a c 最后统一单位 计算需要多少片芯片 流水线 也就是 对于这一道题 c ssl 安全套接层 https 安全通道 PGP 电子邮件加密 d b a b b 受委托方和委托方 c d 试题是考试系统中的一部分
  • 软件测试分享15个适合练手的项目【金融/银行/商城/电商/医药......】

    还愁没有练手的项目 我已经给你准备好了 需要评论区留下你的想法吧 1 引言 1 1 文档版本 版本 作者 审批 备注 V1 0 XXXX 创建测试方案文档 1 2 项目情况 项目名称 XXX 项目版本 V1 0 项目经理 XX 测试人员 X
  • 安川机器人io对照表_安川机器人信号

    逻辑编号针号 名称 信号 逻辑编号 针号 名称 信号 20010 B1 外部启动 in 20024 B1 in 20011 A1 in 20025 A1 in 20012 B2 调出主程序 in 20026 B2 抓手 搬运防碰撞 in 2
  • SVD实现数字水印

    SVD方法的基本原理是将水印嵌入到原始图像的奇异值中 具体流程如下 1 设输入图像为mxn矩阵A 对其进行SVD分解 2 设水印图像为mxn矩阵W 嵌入到到原图像奇异值中S aW a为加权系数 对其进行SVD分解的到含有水印的奇异值 3 用
  • Nginx SSL模块配置提供HTTPS支持(Ngx_http_ssl_module)

    Ngx http ssl module 此模块为Nginx提供HTTPS支持 官方文档 http nginx org en docs http ngx http ssl module html 相关指令 ssl on off SSL功能启用
  • 作为一个上班族,靠Python副业兼职,也能月入1W+

    不知道大家从事的是IT行业还是其他行业 想通过Python兼职首先就需要掌握这项专业技能 如果有Python技术基础 那能兼职的项目可就多了 我靠Python做兼职已经有三四年了 见过身边很多朋友同事陆续学Python 有学成的 也有中途放
  • python错误与异常、调试

    错误 语法错误 逻辑错误 系统错误 异常 程序执行过程中出现的未知错误 语法和逻辑都是正常的 程序业务逻辑不完善引起的程序漏洞 错误 与 异常的区别 异常可以被捕获和处理 错误一般是编码错误 逻辑错误 系统错误 常见的异常类型 除零类型 名
  • vue环境配置文件

    配置文件 在vue项目目录下 我们可以看到诸如package json gitignore package lock json等等能配置项目的结构 引用的库 运行的方式 版本控制等等的都称为配置文件 2 环境配置文件就是能根据项目运行的环境
  • MATLAB数字图像处理(三)——图像轮廓提取与边缘检测

    文章目录 二值图像轮廓提取 灰度图像边缘检测 含噪图像边缘检测 均值滤波函数 二值图像轮廓提取 根据掏空内部点算法 运用Matlab编程实现二值图像的轮廓提取 以二值图像circles为例 I imread circles png subp