• 图像分割

    • 点线和边缘检测
    • 使用Hough变换的线检测
    • 阈值处理

图像分割

点、线和边缘检测

  • 点检测

    点检测在MATLAB中可以用函数imfilter来实现

    点检测方法

    >> g = abs(imfilter(double(f), w)) >= T

    其中f 是输入图像,w是一个合适的点检测掩模, g是结果图像

    • 计算已滤波的图像,即abs(imfilter(double(f),w));

    • 使用来自己滤波的图像的数据找到T的值

    • 将已滤波的图像与T做比较

    点检测举例

    >> w = [-1 -1 -1;-1 8 -1; -1 -1 -1];
    >> g = abs(imfilter(double(f), w));
    >> T = max(g(:));
    >> g = g>=T;

    方法二

    >>g = imsubstract(ordfilt2(f, m*n, ones(m, n)),ordfilt2(f, 1, ones(m, n)));
    >> g = g >= T;
  • 线检测

    线检测中对指定方向的线更感兴趣,这种情况下可以与该方向相关的掩模并对其输出做出阈值处理。

    检测指定方向的线

    >> w = [2 -1 -1 ; -1 2 -1; -1 -1 2];
    >> g = imfilter(double(f), w);
    >> gtop = g(1:120, 1:120);
    >> gtop = pixeldup(gtop, 4);
    >> subplot(1,2,1);
    >> gbot = g(end-119:end, end-119:end);
    >> gbot = pixeldup(gbot, 4);
    >> g = abs(g);
    >> T = max(g(:));
    >> g = g >= T;

    b 图是对a 进行 −45.-45^. 检测器处理后的节刚过,下面两幅分别是它的左上角和右下角的放大图,e 是b 的绝对值 f 是满足条件 g>= T的所有点

    函数pixeldup

    ​ pixeldup(m,n)————%pixeldup函数是将图像扩大m*n倍,通过复制每个像素点m*n次。

    函数edge

    边缘检测的基本意图是使用如下两个基本准则之一在图像中找到亮度快速变化的地方:

    • 找到亮度的一阶导数在幅度上比指定的阈值大的地方
    • 找到亮度的二阶导数有零交叉的地方
    [g, t] = edge(f, 'method', parameters) 

    其中f 是输入图像 , method 是下表中的方法

    输出中 g是一个逻辑数组 ,其值如下决定:

    ​ 在f 中检测到边缘的位置为1, 在其他位置为 0

    t 参数是可选的,它给出edge使用的阈值,以确定那个梯度值足够大到可以称为边缘点。

    Sobel边缘检测器

    [g, t] = edge(f, 'soble', T, dir)
    • 其中f 是输入图像,T 是一个指定的阈值 ,dir指定检测边缘的首选方向:‘horizontal’、’vertical’、 或’both’
    • g 是在被检测到边缘的位置处为 1而在其他位置为0 的逻辑类图像
    • 输出参数t 是可选的,它是函数edge所用的阈值
    • 若指定了T的值,则t = T ; 否则,若T 未被赋值 ,则函数edge会令t 等于它自动确定的一个阈值,然后用于边缘检测。
    • 在输出参量中要包括t的主要原因之一是为了得到一个阈值的初始值
    • 若使用语法 g = edge(f) 或 [g, t] = edge(f) ,则函数edge会默认使用Sobel 检测器

    Prewitt边缘检测器

    [g, t] = edge(f, 'prewitt',T, dir)

    Prewitt 检测器比Sobel 检测器在计算上简单一点,但是比较容易产生一些噪声

    Roberts边缘检测器

    该检测器是最古老的边缘检测器之一,它也是最简单的一种边缘检测器;经常用于硬件的实现,因为既简单又快速。

    Laplacian of a Gaussian 检测器

    [g, t] = edge(f, 'log', T, sigma)

    其中sigma是标准偏差,默认值为2

    零交叉检测器

    该检测器基于与LOG方法相同的概念,但卷积是使用指定的滤波函数H执行的

    [g, t] = edge(f, 'zerocross',T, H)

    Canny边缘检测器

    该检测器是使用函数edge的最有效边缘检测器

    [g, t] = edge(f, 'canny', T, sigma) 
    • 其中T 是一个向量, T= [T1,T2]
    • sigma 是平滑滤波器的标准偏差
    • t 是一个二元向量,该向量包含该算法用到的两个阈值
    >> [gv, t] = edge(f,'sobel','vertical');
    >> gv = edge(f, 'sobel', 0.15, 'vertical');
    >> gboth = edge(f, 'sobel', 0.15);
    >> w45 = [-2 -1 0;-1 0 1; 0 1 2]
    >> g45 = imfilter(double(f), w45, 'replicate');
    >> T = 0.3 * max(abs(g45(:)));
    >> g45 = g45 >= T;
    >> f45= [0 1 2;-1 0 1;-2 -1 0]
    >> h45= imfilter(double(f), f45,'replicate');
    >> T = 0.3 * max(abs(h45(:)));
    >> h45 = h45 >= T;

    a . 原图像

    b .使用带有自动确定的阈值的一个垂直Sobel 掩模后, 函数edge导致的结果

    c .使用指定阈值后的结果

    d .使用指定阈值来决定垂直边缘和水平边缘的结果

    e .使用函数imfilter 计算 45° 边缘的结果

    f . 使用函数imfilter 计算 -45° 边缘的结果

    Sobel、LOG和Canny 边缘检测器的比较

    >> [g_sobel_default, ts] = edge(f, 'sobel');
    >> [g_log_default, tlog] = edge(f, 'log');
    >> [g_canny_default, tc] = edge(f, 'canny');
    >> g_sobel_best = edge(f, 'sobel', 0.05);
    >> g_log_best = edge(f, 'log', 0.003, 2.25);
    >> g_canny_best = edge(f, 'canny', [0.04 0.10], 1.5);

    ​ 左列: Sobel、LOG 和 Canny 边缘检测器使用默认选项产生的结果

    右列:交互地显示原图像的主要特征,减少了无关的细节

    综合所有,Canny 边缘检测器产生的最好结果

使用Hough变换的线检测

寻找并链接图像中线段的处理方式

  • 函数sparse

    给是一个矩阵,用函数sparse把他转换成稀疏矩阵

    S = sparse(A)

    更常用的方法:

 S = sparse(r, c, s, m, n)
  • r 和 c 分别是我们希望转换为稀疏矩阵的矩阵中非零元素的行和列索引向量

    • S 是一个向量,它包含有相应于索引对(r, c) 的值

    • m n 是结果矩阵的行维数和列维数

    • 函数full

    给出任意一个稀疏矩阵,用full 函数来获得完整的矩阵

A = full(S)
  • 使用hough变换做峰值检测

    • 找到包含有最大值的hough变换单元并记下它的位置
    • 把第一步中找到的最大值点的邻域中的hough变换单元设为零
    • 重复该步骤,直到找到需要的峰值数时为止,或者达到一个指定的阈值时为止
  • 函数houghpeaks

    解决上述所讲的问题

  • 使用hough变换做先检测和链接

    一旦hough变换中识别出了一组候选的峰被,则他们还要留待确定是否存在与这些峰值相关的线段以及它们的起始和结束为止。对每一个峰值来说,第一步是找到图像中影响到峰值的每一个非零值点的位置。因此,编写了函数houghpixels

    这里使用该函数来找到的位置相关的像素必须结合成线段,

  • 函数houghlines采用下面的策略

  • 使用hough变换做先检测和链接

    [H, theta, rho] = hough(f, 0.5);imshow(imadjust(mat2gray(H)),'XData',theta,'YData',rho,'InitialMagnification','fit'),axis on, axis normalxlabel('\theta'),ylabel('\rho')[r, c] = houghpeaks(H, 5);hold onplot(theta(c), rho(r), 'linestyle', 'none', 'marker', 's', 'color', 'w')lines = houghlines(f, theta,rho,r,c)figure, imshow(f),hold onIn images.internal.initSize (line 71)In imshow (line 309) for k = 1:length(lines)xy = [lines(k).point1 ; lines(k).point2];plot(xy(:, 2),xy(:,1),'LineWidth', 4, 'Color', [.6 .6 .6]);end

阈值处理

  • 全局阈值处理
T = 0.5*(double(min(f(:))) + double(max(f(:))));done = false;while~doneg = f >= T;Tnext = 0.5*(mean(f(g))+mean(f(~g)));done = abs(T - Tnext) < 0.5;T = Tnext;endT2 = graythresh(f);T2 * 255bw = im2bw(f, T2);

  • 局部阈值处理

    全局阈值处理方法在背景照明不均匀时有可能失效,在这种情况下

    • 针对照明问题做预处理以补偿图像,然后再对预处理后的图像采用全局阈值处理

《数字图像处理》--冈萨雷斯(第十章)相关推荐

  1. 数字图像处理--冈萨雷斯第4版--第二章 数字图像基础

    数字图像处理--冈萨雷斯版--第二章 第二章 数字图像基础 2.1 视觉感知要素 2.1.1 人眼的结构 2.1.2 人眼中图像的形成 2.1.3 亮度适应与辨别 2.2 光和电磁波谱 2.3 图像感 ...

  2. 数字图像处理--冈萨雷斯第4版--第一章 绪论

    数字图像处理--冈萨雷斯版--第一章 绪论 第一章 绪论 1.1 什么是数字图像处理 1.2 数字图像处理的起源 1.3 数字图像处理技术应用领域实例 1.3.1 伽马射线成像 1.3.2 X射线成像 ...

  3. 数字图像处理--冈萨雷斯第4版--第三章 灰度变换

    数字图像处理--冈萨雷斯第4版--第三章 灰度变换 第三章 灰度变换 3.1 背景 3.1.1 灰度变换和空间滤波基础 3.1.2 本章例子说明 3.2 一些基本的灰度变换函数 3.2.1 图像反转 ...

  4. 《数字图像处理 冈萨雷斯》绪论——学习笔记

    文章目录 什么是数字图像处理 使用数字图像处理领域的实例 伽马射线成像 X射线成像 紫外波段成像 可见光及红外波段成像 微波波段成像 无线电波段成像 使用其他成像方式的例子 数字图像处理的基本步骤 图 ...

  5. 数字图像处理(冈萨雷斯)学习 第3章 灰度变换与空间滤波

    引言 术语 空间域 指图像平面本身 空间域处理主要分为灰度变换和空间滤波两类 灰度变换在图像的单个像素上操作,主要以对比度和阈值处理为目的 空间滤波涉及改善性能的操作,如通过图像中每一个像素的邻域处理 ...

  6. 数字图像处理:第二十章 视频编码与压缩

    第二十章 视频编码与压缩 目录 1.    引言 2.    有运动补偿的预测编码 3.    运动估计算法 作业 1. 引言 视频信号具有巨大的数据量,例如:在不做任何压缩的条件下,对于NTSC视频 ...

  7. 数字图像处理:第十章 离散图象变换

    第十章 离散图象变换 目录 1         基本概念 1.1       一维离散线性变换.酉变换.正交变换 1.2       二维离散线性变换.酉变换.正交变换 1.3       基函数和基 ...

  8. 图像sobel梯度详细计算过程_数字图像处理(第十章)

    点.线.边缘检测 背景知识.书中主要介绍了图像的一阶导数与二阶导数,这个之前的文章中有过介绍这里在复习一遍.对于函数 ,对于点 在x方向的一阶偏导为: ,二阶偏导为: 之后书中总结了一阶导与二阶导对于 ...

  9. python 图像的拉普拉斯变换中的数值问题_数字图像处理(第十章)

    点.线.边缘检测 背景知识.书中主要介绍了图像的一阶导数与二阶导数,这个之前的文章中有过介绍这里在复习一遍.对于函数 ,对于点 在x方向的一阶偏导为: ,二阶偏导为: 之后书中总结了一阶导与二阶导对于 ...

  10. 关于冈萨雷斯的《数字图像处理》的坑与资源!

    冈萨雷斯<数字图像处理>很有名,师兄说了我就去买了京东自营,但发现了两大坑! 1.建议买matlab版的 我就买错了!!买的第四版,这简直是老师给学生上课用的教材,长这样的: 看了一两天, ...

最新文章

  1. 什么样的显卡能支持 4K 分辨率输出?
  2. STM8L编程环境官方库+STVD+COSMIC+ST-Link
  3. JavaScript中赋值运算符的使用
  4. session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~
  5. java lambda使用_在Java 8 Lambda上使用Apache Commons Functor功能接口
  6. 杭电计算机学院大学生程序设计竞赛(2015’11)
  7. android:layout_marginbottom=,Android: Retrieve layout_marginBottom programmatically?
  8. 【报告分享】中美人工智能之比较分析报告.pdf(附下载链接)
  9. mysql count innodb 不正确_关于mysql中innodb的count优化问题分享
  10. IT招聘负责人:成功简历六大要素
  11. PHP 后台程序配置config文件,及form表单上传文件
  12. 杭州地铁四期尘埃落定和我预测差异,看地铁空白地,遥想地铁五期规划
  13. centos如何安装软件
  14. 设计函数实现将一个字符串中小写字母转化为大写字母
  15. Mac M1配置Apache Tomcat
  16. 2021年7月中国编程语言排行榜
  17. 信息怎样开4g移动网络连接服务器,怎么强制手机只连接4G网络?
  18. 数字银行的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. AdaDepth: Unsupervised Content Congruent Adaptation for Depth Estimation
  20. 分秒钟做款App:细数国内外在线DIY应用网站

热门文章

  1. python初学者学用anaconda学_致Python初学者:Anaconda入门使用指南
  2. 激光点云数据编辑处理(一)——CloudCompare
  3. html判断安装没安装qq,QQ提示安装路径无效您没有权限怎么办 QQ2015提示安装路径无效您没有权限的解决方法...
  4. python解释器哪个版本好_python解释器有几种
  5. Matlab R2020b安装
  6. linux 0891端口,凯立德导航专用版本号及分辨率、端口、波特率
  7. Luogu3444:[POI2006]ORK-Ploughing
  8. 解决visio图片生成PDF有留白的问题
  9. QT高级编程学习笔记(1)
  10. 两台文件服务器共享文件同步,如何实现两台或多台电脑远程修改文件同步更新?...