1.图像膨胀的Matlab实现:

可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。举个实例如下:

步骤1,首先创建一个包含矩形对象的二值图像矩阵。

>> BW=zeros(9,10);

>> BW(4:6,4:7) =1

BW =

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。

>> SE=strel('square',3)

SE = 
Flat STREL object containing 9 neighbors.

Neighborhood: 
1 1 1 
1 1 1 
1 1 1

步骤3,将图像BW和结构元素SE传递给imdilate函数。

>> BW2=imdilate(BW,SE)

BW2 =

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

步骤4,显示结果。

>> imshow(BW,'notruesize')

>> imshow(BW2,'notruesize')

2.图像腐蚀的Matlab实现:

可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。

以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。

步骤1,读取图像cameraman.tif (该图像是Matlab当前目录下自带的图片)

>> BW1=imread('cameraman.tif');

步骤2,创建一个任意形状的结构元素对象

>> SE=strel('arbitrary',eye(5));

步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。

>> BW2=imerode(BW1,SE);

步骤4,显示操作结果

>> imshow(BW1) 
>> figure,imshow(BW2)

3.膨胀和腐蚀联合操作(图像开运算操作):

下面以图像开启为例,说明如何综合使用imdilate和imerode这两个函数,实现图像处理操作。

步骤1,创建结构元素:

>> clear;close all 
>> SE = strel('rectangle',[40 30]); %注意:结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.

步骤2,使用结构元素腐蚀图像: %将会删除所有直线,但也会缩减矩形

>> BW1=imread('circbw.tif'); 
>> BW2=imerode(BW1,SE); 
>> imshow(BW2) 
>> figure,imshow(BW1)

步骤3,恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.

>> BW3=imdilate(BW2,SE); 
>> figure,imshow(BW3)

4.基于膨胀与腐蚀的形态操作——骨架化和边缘检测

(1)骨架化:

某些应用中,针对一副图像,希望对图像中所有对象简化为线条,但不修改图像的基本结构,保留图像基本轮廓,这个过程就是所谓的骨架化。提供了专门的函数bwmorph,可以实现骨架化操作。

>> clear;close all 
>> BW1=imread('circbw.tif'); 
>> BW2=bwmorph(BW1,'skel',Inf); 
>> imshow(BW1) 
>> figure,imshow(BW2)

(2)边缘检测

对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。在一副图像中,如果图像某个像素满足以下两个条件:

1.该像素状态为ON,

2.该像素邻域中有一个或多个像素状态为OFF。

则认为该像素为边缘像素。

Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。

以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。

>> clear;close all 
>> BW1=imread('circbw.tif'); 
>> BW2=bwperim(BW1); 
>> imshow(BW1) 
>> figure,imshow(BW2)

基于腐蚀和膨胀的形态操作函数如下:

bwhitmiss 图像逻辑"与"操作,该函数使用一个结构元素对图像进行腐蚀操作后,再使用第二个结构元素对图像进行腐蚀操作

imbothat 从原始图像中减去经过形态关闭后的图像,该函数可用来寻找图像中的灰度槽

imclose 闭合操作.首先对图像进行膨胀,然后再对膨胀后的图像进行腐蚀,两个操作使用同样的结构元素

imopen 开启操作,首先对图像进行腐蚀,然后再对腐蚀后的图像进行膨胀,两个操作使用同样的结构元素

imtophat 从原始图像中减去形态开启后的图像,可以用来增强图像的对比度

【zz】matlab 腐蚀膨胀算法的更多相关文章

  1. 基于MATLAB的腐蚀膨胀算法实现

    本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...

  2. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  3. opencv中的图像形态学——腐蚀膨胀

    腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等. 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即 ...

  4. OpenCV 腐蚀膨胀操作

    利用腐蚀膨胀操作实现对椭圆周围线条的消除,椭圆的大小不变 代码如下: #include "cv.h" #include "highgui.h" int main ...

  5. OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...

  6. 数学软件 之 基于MATLAB的DFP算法

    DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...

  7. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

  8. matlab实现分水岭算法处理图像分割

    此程序为优化后的分水岭算法,避免了图像过分割 I= imread('D:\Images\pic_loc\1870405130305041503.jpg'); imshow(I); h=fspecial ...

  9. matlab实现感知机算法--统计学习小灶

    clear all; clc; %% %算法 %输入:训练数据集T = {(x1,y1),(x2,y2),...,(xn,yn)};学习率η %输出:w,b;感知机模型f(x) = sign(w*x+ ...

随机推荐

  1. 严重:Error listenerStart

    转自: http://1985wanggang.blog.163.com/blog/static/7763833200942611050436/ 近日浏览论坛,发现好多人提问,都说在运行web程序时, ...

  2. RxAndroid/java小记

    Rxandroid 作为一个在设计模式中能把MVP发挥的淋漓尽致的框架不去学习感觉真的对不起自己,然后也学点新东西吧,响应式编程,MVP观察者模式,然后使用RxAndroid使我们自己的代码更加简洁 ...

  3. js中function函数

    function:是具备某个功能的方法,方法本身没有意义,只有执行方法才有价值. function: 1 创建一个函数: 2 执行这个方法: 例: 创建 function 方法名(){ 存放某个功能的 ...

  4. sprint one

    产品backlog Id Name Imp Est How to demo 1 各个角色账号登录功能 30 20 建立数据库,数据库中存储一些角色的初始账号以便测试,输入账号密码,系统在数据库中查找账 ...

  5. OPENGL半透明图像产生黑色光环

    OPENGL提供了多种多样的混合方法,我们很容易就能实现诸如 叠加.变亮等图像混合. 我们知道一般带透明度的图像是RGBA四个通道来存储,最常的glBlendFunc是 glBlendFunc(GL_ ...

  6. yum源安装Mysql

    Mysql版本:5.7 进入mysql官网,复制下载链接 步骤: (1) wget  http://dev.mysql.com/get/mysql57-community-release-el6-9. ...

  7. [转]CSS hack大全&详解

    转自:CSS hack大全&详解 1.什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的, ...

  8. windows安装postgres源代码

    http://blog.csdn.net/adrastos/article/details/9093739 1. 下载PostgreSQL的源代码.解压. 2. 在Windows平台下编译需要跳过一个 ...

  9. Latex 建立带有竖线和编号的算法环境

    Latex 建立带有竖线和编号的算法环境 Latex源码: \documentclass{article} \usepackage{amssymb} \usepackage{amsmath} \use ...

  10. WC项目

    #include <stdio.h> #include <string.h> int *getCharNum(char *filename, int *totalNum); i ...