利用Matlab进行图像分割和边缘检测

2023-10-31

本文章包含以下内容:        

1、灰度阀值分割

(1)单阈值分割图像

先将一幅彩色图像转换为灰度图像,显示其直方图,参考直方图中灰度的分布,尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。给图像加上零均值的高斯噪声重复上述过程,注意阈值的选择。

(2)多阈值分割图像

自选图像,对图进行多阈值分割,注意阈值的选择。

2.边缘检测

(1)使用Roberts 算子的图像分割实验,调入并显示一幅图像*.gif或*.tif;

使用Roberts 算子对图像进行边缘检测处理;Roberts 算子为一对模板,相应的矩阵为:

rh = [0 1;-1 0]; rv = [1 0;0 -1]; 

这里的rh 为水平Roberts 算子,rv为垂直Roberts 算子。可以显示处理后

的水平边界和垂直边界检测结果;

用“欧几里德距离”方式计算梯度的模,显示检测结果;对于检测结果进行二值化处理,并显示处理结果。

(2)使用Prewitt 算子的图像分割实验使用Prewitt 算子进行内容(1)中的全部步骤。

(3)使用Sobel 算子的图像分割实验使用Sobel 算子进行内容(1)中的全部步骤。

(4)使用Canny算子进行图像分割实验。

(5) 使用拉普拉斯算子进行图像分割实验。

代码如下:

function U()
    clear;
    clc;
    Single_threshold_segmentation()
    Multi_threshold_segmentation()
    edge_detection()
end

% 单阈值分割
% 先将一幅彩色图像转换为灰度图像,显示其直方图,
% 参考直方图中灰度的分布,尝试确定阈值
% 给图像加上零均值的高斯噪声重复上述过程
function Single_threshold_segmentation()
    img = imread('gantrycrane.png');    % 读取图像
    figure('Name','单阈值分割');  % 开一个叫单阈值分割的窗口
    subplot(2,4,1);imshow(img);title('gantrycrane.png原图');   % 显示原图
    img = rgb2gray(img);    % 彩色图像转为灰度图像
    subplot(2,4,2);imshow(img);title('gantrycrane.png灰度图');   % 显示灰度图
    subplot(2,4,3);imhist(img);title('gantrycrane.png直方图');   % 显示直方图
    % x = 95; % 分割阈值
    % img1 = uint8((0*(img<=x)+255.*(img>x))); % 图像分割
    x = graythresh(img);    % 分割阈值
    img1 = im2bw(img,x);    % 图像分割
    subplot(2,4,4);imshow(img1);title('gantrycrane.png二值图');   % 显示二值图
    img = imnoise(img,'gaussian');        % 添加高斯噪声
    subplot(2,4,6);imshow(img);title('gantrycrane.png噪声灰度图');   % 显示噪声灰度图
    subplot(2,4,7);imhist(img);title('gantrycrane.png噪声直方图');   % 显示噪声直方图
    % x = 95; % 分割阈值
    % img1 = uint8((0*(img<=x)+255.*(img>x))); % 图像分割
    x = graythresh(img);    % 分割阈值
    img1 = im2bw(img,x);    % 图像分割
    subplot(2,4,8);imshow(img1);title('gantrycrane.png噪声二值图');   % 显示噪声二值图
end
% 多阈值分割
function Multi_threshold_segmentation()
    img = imread('cameraman.tif');    % 读取图像
    figure('Name','多阈值分割');  % 开一个叫多阈值分割的窗口
    subplot(2,2,1);imshow(img);title('cameraman.tif原图');   % 显示原图
    subplot(2,2,2);imhist(img);title('cameraman.tif直方图');   % 显示直方图
    x_1 = 77; % 分割阈值
    x_2 = 139;
    img1 = uint8(0*(img<=x_1)+round((x_1+x_2)/2)*((img>x_1)&(img<=x_2))+255*(img>x_2)); % 图像分割
    subplot(2,2,3);imshow(img1);title('gantrycrane.png分割图');   % 显示分割图
end

% 边缘检测
% 使用Roberts,Prewitt,Sobel,Canny,拉普拉斯算子
function edge_detection()
    img = imread('cameraman.tif');  % 读取图像
    figure('Name','边缘检测');  % 开一个叫边缘检测的窗口
    subplot(2,3,1);imshow(img);title('cameraman.tif原图');   % 显示原图
    img1 = ed(img,[[0 1;-1 0];[1 0;0 -1]]);    % 使用 Roberts 算子
    subplot(2,3,2);imshow(img1);title('Roberts 算子');   % Roberts 算子处理图像
    img1 = ed(img,[[-1 -1 -1;0 0 0;1 1 1];[-1 0 1;-1 0 1;-1 0 1]]);    % 使用 Prewitt 算子
    subplot(2,3,3);imshow(img1);title('Prewitt 算子');   % Prewitt 算子处理图像
    img1 = ed(img,[[-1 -2 -1;0 0 0;1 2 1];[-1 0 1;-2 0 2;-1 0 1;]]);    % 使用 Sobel 算子
    subplot(2,3,4);imshow(img1);title('Sobel 算子');   % Sobel 算子处理图像
    img1 = ed(img,[[-1 1;-1 1];[-1 -1;1 1]]);    % 使用 Canny算子
    subplot(2,3,5);imshow(img1);title('Canny算子');   % Canny算子处理图像
    img1 = ed(img,[[0 -1 0;-1 4 -1;0 -1 0];[-1 -1 -1;-1 8 -1;-1 -1 -1]]);    % 使用 Laplace算子
    subplot(2,3,5);imshow(img1);title('Laplace算子');   % Laplace算子处理图像
end

% 进行卷积和二值化
function img2 = ed(img,x)
    s = size(x);
    img1 = zeros(size(img));
    for i = 1:s(1)/s(2)
        img1 = img1 + abs(conv2(img,x(1+s(2)*(i-1):s(2)*i,1:s(2)),'same'));
    end
    img1 = uint8(img1);
    img2 = im2bw(img1,graythresh(img1));
end

结果如下:

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

利用Matlab进行图像分割和边缘检测 的相关文章

  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 如何在 MATLAB 中绘制纹理映射三角形?

    我有一个三角形 u v 图像中的坐标 我想在 3D 坐标处绘制这个三角形 X Y Z 与图像中的三角形进行纹理映射 Here u v X Y Z都是具有三个元素的向量 代表三角形的三个角 我有一个非常丑陋 缓慢且令人不满意的解决方案 其中我
  • MATLAB 列含义的内存分析

    我正在使用 MATLAB 配置文件来使用命令观察内存 profile memory on profile clear my code profile report and i got this table 1 我想问一下什么意思 已分配内存
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐

  • python中英文混合字符串宽度对齐打印

    中英文宽度对齐 def print format string way width fill ed 格式输出函数 默认格式填充用单空格 不换行 try count 0 长宽度中文字符数量 for word in string 检测长宽度中文
  • 给电子信息工程大学生的一些忠告

    漫漫长路 首先恭喜各位能够进入电子行业 只是这个行业感觉还是有前途的 不过在好的条件还要看自己努力不 好的开端是成功的一半 如果各位真的是想毕业以后做与自己行业有关的工作 那就听我慢慢的到来 如果是毕业不想做与自己专业有关的工作 那我下面要
  • 美国科学家提出AGI概念,将在未来取代AI人工智能!

    人工智能学科的核心是有一天我们能够建造一个像人类一样聪明的机器 这种系统通常被称为人工通用智能系统 即AGI 它是将概念与更广泛的研究领域区分开来的名称 它还清楚地表明 真正的人工智能拥有广泛且适应性强的智能 到目前为止 我们已经建立了无数
  • class类python_python入门(七)class类

    类 是面向对象一个载体 类的定义 class A object pass 全局变量 函数1 def self 函数2 def 类里面有很多函数 函数第一个参数默认都是self 变量可以直接在类的内部直接定义 类在内部调用函数或者变量的时候
  • 我工作中踩过的坑--服务器管理篇

    也许有人会问 束测搞好束测的事就好了 干嘛还自己搞服务器后台啥的 貌似以前有个文解释了的 竟然一时找不到 就再啰嗦一下 束测有众多子系统 各种采集 摄像头 示波器 万用表 电机控制 各种专用处理器 以前一般都是众多的工控机直接去连设备跑起程
  • 用R制作gif动态图以及从gif中提取图片

    作者 辉小宝同学 微信公众号 R语言和Python学堂 知乎 https www zhihu com people zoro 3 92 posts 简书 https www jianshu com u 981ba7d6b4a6 熟悉R的朋友
  • Android 短时间内多次启动同一个Service会不会有多次的binder调用

    背景 笔者刚接触公司的新项目 发现项目中有些场景居然在短时间内 几十毫秒内 发送同一个Service 本来功能没有什么大问题 但是笔者有点怀疑 短时间内发送多个相同的Service会不会影响性能 因为启动服务涉及到binder通信 ANR问
  • 语义分割图像增强新方法

    最近在日常挖坑中发现了另一种简单有效数据扩充方法 将其分享使用 之前都是利用opencv自己编写代码进行图像的翻转 旋转角度 裁剪 亮度变化等等操作 对于语义分割任务来说 一种有效的提升性能的办法就是对现有数据进行增强 扩充现有数据的多样性
  • 查询postgresql死锁数量

    每个数据库的死锁数量都存在postgresql自身维护的 pg stat database 表中 查询postgres死锁数量 select deadlocks from pg stat database
  • webpack5打包vue项目

    目录 写在前面 webpack四大核心 entry 入口 loader 加载器 plugin 插件 output 出口 webpack打包vue项目 初始化项目 vue loader webpack dev server 配置开发服务器 加
  • 微信小程序开发【知识点大全】

    微信小程序开发重点 知识点 token appid openid AppSecret 快捷键 知识点 token 有些接口是可以公开访问的 有些是不允许公开访问的 所以要设置token进行区分验证 token机制 客户端获取一个code 通
  • 创建私有仓库时,重启docker服务报错

    报错信息 Unit docker service has begun starting up 3月 23 22 53 52 docker dockerd 82851 unable to configure the Docker daemon
  • 微信小程序-防止多次点击跳转的问题(实战项目亲测有效)

    微信小程序 防止多次点击跳转的问题 最近多个小程序项目遇到一个头大的问题 就是点击事件多次点击会造成多次重复跳转或多次请求的情况 网上看了一下论坛一大堆方法 试了几个都是不行 最后看了一下小程序的文档 发现遗忘了很实用了触控事件bindto
  • 想在网上兼职做什么比较好,分享五个网上兼的副业项目帮你拓展视野

    许多工薪族都想要运用下班了的空余时间根据网上做兼职 却却找不到人正确引导一条正确的方向 并没有渠道信息内容 那他们如何找到自已的做兼职呢 小编觉得应当在网络上多查看的相关资料 多探寻方式 选择适合自己的做兼职 随后用心去感受干 慢慢地 便会
  • 前缀和求解k倍区间问题

    题目描述 给定一个长度为 N的数列 A1 A2 AN 如果其中一段连续的子序列Ai Ai 1 Aj之和是 K 的倍数 我们就称这个区间 i j 是 K倍区间 你能求出数列中总共有多少个 K倍区间吗 输入格式 第一行包含两个整数 N和 K 以
  • 完全详解权限系统设计方案

    1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们 程序员新入职一家公司需要找人开通各种权限 比如网络连接的权限 编码下载提交的权限 监控平台登录的权限 运营平台查数据的权限等等 在很多时候我们会觉得这么多繁杂的申请给工作带来不
  • IT项目管理个人作业7(操作案例)

    完成作业1 3的要求 使用 project 或其他工具 作业1 假设项目管理 需求定义的工作都由项目经理做 其他工作则由其他项目成员做 WBS条目 小时数 单位小时成本 美元 子层总和 美元 WBS第二层的总和 美元 占总和的 1 项目管理
  • grid网格布局实现图表框架(vue)

    需求 需要实现一个如图所示的界面 实现 用grid布局来实现 div class inner div div div
  • 岁月划过生命线(从阿里到微店)

    从阿里到微店 标签 程序人生 在 lt 2 5年 从0到阿里 gt 中提到过 当时面阿里云OS时预期的是进入虚拟机团队 结果后来被分到了高通平台参考设计团队 因此在阿里期间心情一直是比较低落的 写这篇博客主要是基于以下几个原因 前段时间跟大
  • 利用Matlab进行图像分割和边缘检测

    本文章包含以下内容 1 灰度阀值分割 1 单阈值分割图像 先将一幅彩色图像转换为灰度图像 显示其直方图 参考直方图中灰度的分布 尝试确定阈值 应反复调节阈值的大小 直至二值化的效果最为满意为止 给图像加上零均值的高斯噪声重复上述过程 注意阈