Matlab一种二值化图像的形态学操作程序

合集下载

MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

MATLAB:图像⼆值化、互补图(反运算)
(im2bw,imcomplement函数)
图像⼆值化、反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本⿊的区域变为⽩的区域,⽩的区域变为⿊的区域。

实现过程如下:
close all; %关闭当前所有图形窗⼝,清空⼯作空间变量,清除⼯作空间所有变量
clear all;
clc;
J=imread('rice.png');% 读取灰度图像,赋值给J
J1=im2bw(J);%将灰度图像转换成⼆值图像,赋值给J1
J2=imcomplement(J);%求灰度图像的补,即对图像进⾏求反运算,赋值给J2
J3=imcomplement(J1);%求⼆值图像的补,赋值给J3
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1]) %修改图形背景颜⾊的设置
figure, %显⽰运算结果
subplot(131),imshow(J1) %显⽰灰度图像及其补图像
subplot(132),imshow(J2) %显⽰⼆值图像及其补图像
subplot(133),imshow(J3)
效果图如下:
J1是J3的补图,即J1⽩的区域变为J3⿊的部分,反之。

imclose函数

imclose函数

imclose函数imclose函数是MATLAB图像处理工具箱中的一种形态学操作函数,主要用于消除图像中的小空洞和断裂,并连接靠近的物体。

imclose函数的调用格式如下:```matlabBW2 = imclose(BW,SE)```BW是二值图像,SE是形态学结构元素,BW2是输出的二值图像。

imclose函数实现的是先进行图像膨胀操作,再进行图像腐蚀操作。

这种操作的效果是可以关闭图像中的小空洞,并连接靠近的物体。

而且,imclose函数的效果是与结构元素的大小和形状有关。

SE可以使用strel函数创建,strel函数的调用格式如下:shape是结构元素的形状,可以是'line'、'disk'或'rectangle'等,parameters是结构元素的参数。

比如当shape为'rectangle'时,parameters可以是[3,3],表示3行3列的方形结构元素。

为了更深入了解imclose函数,下面将详细介绍它的使用方法和一些注意事项。

使用方法1. 读取图像并二值化```matlabclc,clear all,close all;I = imread('circles.png');BW = imbinarize(I);figure,imshow(BW);```3. 定义结构元素3. 使用imclose函数进行形态学操作此时,可以看到图像中原本存在的空洞和断裂被连接成了一个整体。

注意事项1. SE的选择和参数的设置SE的选择和参数的设置会影响形态学操作的效果。

可以根据实际需求进行调整。

2. 图像大小对于大图像的处理,imclose函数的运行速度会比较慢。

可以考虑对图像进行裁剪,或者使用其他技术来使得图像的大小合适。

3. 相关函数除了imclose函数外,还有其他一些相关的形态学操作函数,比如imopen、imdilate 和imerode等。

如何在Matlab中进行图像分析和形态学处理

如何在Matlab中进行图像分析和形态学处理

如何在Matlab中进行图像分析和形态学处理图像处理是计算机视觉领域中的一个重要分支,它主要涉及到对图像进行数字化处理和分析,从而得到我们所需要的信息。

Matlab是一种非常强大和灵活的软件工具,广泛应用于图像处理和计算机视觉领域。

本文将介绍如何在Matlab中进行图像分析和形态学处理。

一、图像分析基础在进行图像分析之前,我们首先需要了解图像的基本知识和图像处理的基本步骤。

图像可以看作是由像素组成的二维矩阵,每个像素具有一定的亮度值。

图像处理的基本步骤包括加载图像、显示图像、调整图像大小和颜色空间转换等。

1. 加载图像在Matlab中,可以使用imread函数来加载图像。

例如,对于名为image.jpg的图像文件,可以使用以下代码加载图像:```matlabimage = imread('image.jpg');```2. 显示图像通过imshow函数可以将加载的图像显示在Matlab的图像窗口中。

例如,可以使用以下代码将图像显示在窗口中:```matlabimshow(image);```3. 调整图像大小有时候需要将图像调整为所需要的尺寸。

Matlab提供了imresize函数来实现图像的大小调整。

例如,可以使用以下代码将图像调整为200x200像素:```matlabresized_image = imresize(image, [200, 200]);```4. 颜色空间转换在图像分析过程中,有时候需要将图像从一个颜色空间转换为另一个颜色空间。

Matlab提供了多种颜色空间转换函数,如rgb2gray、rgb2hsv等。

例如,可以使用以下代码将RGB彩色图像转换为灰度图像:```matlabgray_image = rgb2gray(image);```二、图像分析算法图像分析算法是图像处理的核心内容,它主要用于提取图像中的特征和信息。

在Matlab中,有许多常用的图像分析算法和函数,如边缘检测、特征提取和目标检测等。

matlab 二值化 阈值

matlab 二值化 阈值

matlab 二值化阈值
二值化是将灰度图像转换为二值图像的过程。

阈值是二值化的关键参数之一,是用来确定将灰度图像中哪些像素点转换为黑色像素,哪些像素点转换为白色像素。

在matlab中,二值化可以通过以下代码实现:
1.使用im2bw函数指定阈值进行二值化:
```。

I = imread('image.jpg');。

threshold = 128; % 设定阈值。

BW = im2bw(I, threshold/256); % 将图像进行二值化。

imshow(BW);。

```。

2.使用graythresh函数自适应确定阈值进行二值化:
```。

I = imread('image.jpg');。

level = graythresh(I); % 自适应确定阈值。

BW = im2bw(I, level); % 将图像进行二值化。

imshow(BW);。

```。

需要注意的是,灰度图像的像素值范围为0~255,在matlab中使用时需要将阈值设定为0~1之间的小数。

1.bwmorph函数--形态学操作,包括imopen,imclose和其他几种不同的操作

1.bwmorph函数--形态学操作,包括imopen,imclose和其他几种不同的操作
imgdat = logical([1, 1, 1; 1, 0, 1; 1, 1, 1]);
retdat = bwmorph(imgdat, 'fill') % using 'fill' option
输出结果:
retdat =
1 1 0
1 1 1
0 1 1
retdat =
'skel': 在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;
'spur': 去除小的分支, 或引用电学术语“毛刺”;
'thicken': 在这里n = Inf, 通过在边界上添加像素达到加粗物体轮廓的目的;
'thin': 在这里n = Inf,进行细化操作;
'tophat': 进行“top hat”形态学运算, 返回源图像减去开运算的图像;
'dilate': 使用结构元素ones(3)对图像进行膨胀运算;
'endpoints': 找到骨架中的结束点;
'erode': 使用结构元素ones(3)对图像进行腐蚀运算;
'fill': 填充孤立的黑点, 比如3*3的矩阵, 除了中间元素为0外, 其余元素全部为1, 则这个0将被填充为1;
'hbreak': 断开图像中的H型连接;
'majority': 如果一个像素的8邻域中有等于或超过5个像素点的像素值为1, 则将该点像素值置1;
'open': 进行形态学开运算(即先膨胀后腐蚀);
'remove': 如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来;

图像分析MATLAB实现的图像的基本操作1灰度化、二值化,图像的加、减、乘、除运算,图像的与、或、非

图像分析MATLAB实现的图像的基本操作1灰度化、二值化,图像的加、减、乘、除运算,图像的与、或、非

大学生作业科目:数字图像分析与理解学号:姓名:时间:通过matlab对图像的一些基本操作如下:定义move函数代码:function J = move( I,a,b )%UNTITLED 此处显示有关此函数的摘要% 此处显示详细说明%a,b为平移量,I为原图像,J为平移后图像[M,N,G]=size(I);I=im2double(I);J=ones(M,N,G);for i=1:Mfor j=1:Nif((i+a)>=1&&(i+a)<=M&&(j+b)>=1&&(j+b)<=N) %判断平移后行列是否超过范围J(i+a,j+b,:)=I(i,j,:);endendend主函数代码:A=imread('happyC.jpg');B=imread('happyI.jpg');C=imread('happyP.jpg');imshow(A);A_gray=rgb2gray(A);A_bw=im2bw(A);B_bw=im2bw(B);C_bw=rgb2gray(C);figure,imshow(A_gray);figure,imshow(A_bw)addP=imadd(A,B);subP=imsubtract(A,B);mulP=immultiply(A,B);divP=imdivide(A,B);andP=A_bw&B_bw;orP=A_bw|B_bw;noP=~B_bw;R=2;% 变化后图像[row,col,color] = size(C); % 获得图像的行列数及色板数row = round(row*R); % 新图像行col = round(col*R); % 新图像列% 新图像初始化% 使用class获得原图像的数据类型,使得新图像数据类型与原图像保持一致img_new = zeros(row,col,color,class(C));% 对新图像的行、列、色板赋值for i = 1:rowfor j = 1:colfor n = 1:colorx = round(i/R);y = round(j/R);if x == 0x = x+1;endif y ==0y = y+1;endu = i/R-floor(i/R); %求取水平方向上的权重v = j/R-floor(j/R); %求取垂直方向上的权重% 此处需要对图像边缘进行例外处理% 本例对图像右边缘及下边缘用最近邻插值计算if i >= row-R || j >= col-Rimg_new(i,j,n) = C(x,y,n);elseimg_new(i,j,n) =u*v*C(x,y,n)+(1-u)*v*C(x+1,y,n)+u*(1-v)*C(x,y+1,n)+(1-u)*(1-v)*C(x+1,y+ 1,n);endendendendfigure,imshow(B);figure;subplot(2,2,1);imshow(addP);title('加法');subplot(2,2,2);imshow(subP);title('减法');subplot(2,2,3);imshow(mulP);title('乘法');subplot(2,2,4);imshow(divP);title('除法');C_mov=move(C,50,50);C_res=imresize(C,2,'bilinear');C_rot=imrotate(C,45,'loose');C_mir1=flip(C,1);%原图像的水平镜像C_mir2=flip(C,2);%原图像的垂直镜像figure;subplot(1,3,1);imshow(andP);title('与运算'); subplot(1,3,2);imshow(orP);title('或运算');subplot(1,3,3);imshow(noP);title('非运算');figure;subplot(121);imshow(C);title('原图');subplot(122);imshow(C_mov);title('平移后'); figure;%subplot(121);imshow(C);title('原图');%subplot(122);figure;imshow(C_res);title('放大后');figure;subplot(121);imshow(C);title('原图');subplot(122);imshow(C_rot);title('旋转后'); figure;subplot(131);imshow(C);title('原图');subplot(132);imshow(C_mir1);title('水平镜像后'); subplot(133);imshow(C_mir2);title('垂直镜像后'); figure;%subplot(121);imshow(C);title('原图');%subplot(122);figure;imshow(img_new);title('插值后');基本操作图像如下:。

matlab灰度处理二值化处理

matlab灰度处理二值化处理

Matlab在图像处理领域有着广泛的应用,其中灰度处理和二值化处理是常见的图像处理方法之一。

本文将详细介绍Matlab中的灰度处理和二值化处理的原理和实现方法。

一、灰度处理1. 灰度图像的概念灰度图像是指图像中每个像素的灰度值介于0-255之间的图像。

在灰度图像中,0代表黑色,255代表白色,中间的灰度值代表了不同程度的灰色。

2. 灰度处理的原理灰度处理是将彩色图像转换为灰度图像的过程。

在Matlab中,可以通过以下公式实现灰度处理:灰度值 = 0.299 * R + 0.587 * G + 0.114 * B其中,R、G、B分别代表彩色图像中的红色、绿色和蓝色分量。

通过对每个像素的RGB分量进行加权求和,可以得到对应的灰度值。

3. 灰度处理的实现在Matlab中,可以使用`rgb2gray`函数实现灰度处理。

具体的代码如下:```matlab读取彩色图像rgbImage = imread('example.jpg');灰度处理grayImage = rgb2gray(rgbImage);显示灰度图像imshow(grayImage);```二、二值化处理1. 二值化图像的概念二值化图像是指将灰度图像中的像素值转换为0或255的图像。

在二值化图像中,像素值为0代表黑色,像素值为255代表白色。

2. 二值化处理的原理二值化处理的目的是将灰度图像中的灰度值转换为0或255。

一般可以通过设置一个阈值,将低于阈值的像素值设为0,将高于阈值的像素值设为255。

3. 二值化处理的实现在Matlab中,可以使用`im2bw`函数实现二值化处理。

具体的代码如下:```matlab读取灰度图像grayImage = imread('example_gray.jpg');设置阈值threshold = 128;二值化处理binaryImage = im2bw(grayImage, threshold/255);显示二值化图像imshow(binaryImage);```三、总结本文详细介绍了Matlab中灰度处理和二值化处理的原理和实现方法。

Matlab对图片的二值化处理

Matlab对图片的二值化处理

Matlab对图⽚的⼆值化处理 这⼏天做了⼀道题⽬,要求在 5000 张图⽚中找出 30 张与样例相同但经过放⼤或缩⼩,⾼亮或变暗的图⽚。

整体思路是把图⽚hash成⼀段指纹,这个指纹和图⽚的⼤⼩、格式、明暗均⽆关,只和图⽚的内容本⾝有关。

1.先把彩⾊图⽚转为灰度图 如果原本的⼀个像素点的rgb值为(r1,g1,b1),⼀个⽐较简易的⽅法转为灰度图, 就是 gray1=(r1*299+g1*587+b1*114+500)/1000 那么该像素点的rgb颜⾊变为(gray1,gray1,gray1)。

⽽我⽤的是 Matlab 中的函数 imgray = rgb2gray(imdata); 2.将灰度图转化为⿊⽩图 先计算出该图的平均灰度,⼀种⽐较简易的做法是把所有像素点的灰度求和平均。

然后对于每个像素点,如果⼩于平均灰度,则rgb值为(0,0,0),否则为(255,255,255)。

经过这⼀步,图⽚就变成⿊⽩的了。

我⽤的是 Matlab 中函数 lev = graythresh( imdata); 求平均灰度,再 bwimg = im2bw( imdata, lev);求⼆值图。

但这样的函数对于⼀些⾼亮或灰暗的图⽚的处理不是特别的好,会使整个图⽚呈现全⽩或全⿊的现象。

我对于这些图⽚的处理是⾃⼰设定 lev,根据需要设 lev 为 0~1 的值,⽽不是求图⽚的平均值。

(找到更好的⽅法再来更新)。

4 编码 将之前的⼆值图放⼤或缩⼩为 8*8 的⼀个矩阵 imdata = imresize(imdata, [8,8]); ⽩为 0,⿊为 1 整合成 1 个 64 位的⼆进制,转化为 16 进制则是这个图⽚的指纹了。

在这⾥,我并没有转换成 16 进制进⾏⽐较,⽽是直接对⼆进制串做的对⽐,完全相同的并不多,所以不同的字符在⼗个之内我都算成相似的,再进⾏进⼀步的⽐较。

Matlab中的形态学图像分析与形态学运算技术详解

Matlab中的形态学图像分析与形态学运算技术详解

Matlab中的形态学图像分析与形态学运算技术详解形态学图像处理是一种基于形状和结构的图像分析方法,而形态学运算则是其核心技术之一。

在Matlab中,形态学图像分析和形态学运算技术被广泛应用于图像处理、模式识别、计算机视觉等领域。

本文将对Matlab中的形态学图像分析与形态学运算技术进行详细解析。

一、灰度图像的形态学运算在Matlab中,形态学运算主要应用于灰度图像。

灰度图像是一种不同像素强度对应于不同灰度级别的图像,通过形态学运算可以对图像进行形状和结构的分析。

1. 腐蚀操作腐蚀操作是形态学图像分析中最基本的操作之一。

在Matlab中,通过imerode函数可以实现腐蚀操作。

腐蚀操作可以用于图像的边缘提取、形态学梯度计算等。

2. 膨胀操作膨胀操作是形态学图像分析中另一个基本操作。

在Matlab中,通过imdilate函数可以实现膨胀操作。

膨胀操作可以用于图像的形态学重建、填充孔洞等。

3. 开运算和闭运算开运算和闭运算是形态学图像处理中常用的操作组合。

在Matlab中,通过imopen函数可以实现开运算,通过imclose函数可以实现闭运算。

开运算可以用于图像的噪声去除、边缘平滑等,闭运算可以用于图像的孔洞填充、连通区域连接等。

4. 形态学梯度和顶帽运算形态学梯度是图像膨胀和腐蚀操作之间的差异图像。

在Matlab中,通过imgradient函数可以实现形态学梯度计算。

形态学梯度可以用于图像的边缘检测、形态学运算结果的增强等。

顶帽运算是图像和其开运算之间的差异图像,在Matlab中,通过imtophat函数可以实现顶帽运算。

二、二值图像的形态学运算在Matlab中,形态学运算也常应用于二值图像。

二值图像只有两种像素值,通常为0和1,通过形态学运算可以实现图像的区域提取、连通区域分析等。

1. 腐蚀操作在二值图像中,腐蚀操作将1像素的区域边界向内部腐蚀。

在Matlab中,通过bwareaopen函数可以实现腐蚀操作。

二值图像处理的程序设计形态学处理

二值图像处理的程序设计形态学处理

二值图像处理的程序设计形态学处理1相关知识1.1 MATLAB在图像处理中的应用MATLAB7.x提供了20类图像处理函数,涵盖了图像处理包括近期研究成果在内的几乎所有的技术方法,是学习和研究图像处理的人员难得的宝贵资料和加工工具箱。

这些函数按功能可分为图像显示、图像文件I/O、图像算术运算、几何变换、图像登记、像素值与统计、图像分析、图像增强、线性滤波、线性二元滤波设计、图像去模糊、图像变换、邻域与块处理、灰度与二值图像的形态学运算、结构元素创建与处理、基于边缘的处理、色彩映射表操作、色彩空间变换及图像类型与类型转换。

Matlab数字图像处理工具箱函数包括以下几类:(1)图像显示函数;(2)图像文件输入、输出函数;(3)图像几何操作函数;(4)图像像素值及统计函数;(5)图像分析函数;(6)图像增强函数;(7)线性滤波函数;(8)二维线性滤波器设计函数;(9)图像变换函数;(10)图像邻域及块操作函数;(11)二值图像操作函数;(12)基于区域的图像处理函数;(13)颜色图操作函数;(14)颜色空间转换函数;(15)图像类型和类型转换函数。

1.2 图像处理概念图像处理并不仅限于对图像进行增强、复原和编码,还要对图像进行分析,图像分析旨在对图像进行描述,即用一组数或符号表征图像中目标区的特征、性质和相互间的关系,为模式识别提供基础。

描述一般针对图像或景物中的特定区域或目标。

闭运算通常用来填充目标内细小空洞,连接断开的邻近目标,平滑其边界的同时不明显改变其面积。

1.3 图像二值化的基本原理图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。

即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。

在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。

matlab图像处理学习笔记-数学形态与二值图像操作

matlab图像处理学习笔记-数学形态与二值图像操作

matlab图像处理学习笔记-数学形态与二值图像操作matlab图像处理学习笔记-数学形态与二值图像操作数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单。

9.1 数学形态学图像处理基本思想:利用一个称作结构元素(structuring element)的探针收集图像信息。

当探针在图像中不断移动时,便可考察图像各个部分见的相互关系,从而了解图像各个部分的结构特征。

作为探针的结构元素,可直接携带只是(形态、大小以及灰度和色度信息)来探测所研究图像的结构特点。

基本运算:数字形态学的基本运算是腐蚀和膨胀。

平移:就是将图像A平移到以b为原点的坐标系中。

反射:图像A相对于坐标原点的对称结果。

开运算:即A先被B腐蚀,再被B膨胀;闭运算:即A先被B膨胀,再被B腐蚀;根据开、闭运算的特点,通常可以利用开运算删除图像中的小分支,利用不运算填补图像中的空穴;形态学的直奔运算满足以下特点:1、膨胀和复试运算具有平移不变性,即对图像A进行复试和膨胀的结果运算只取决于A与B得结构,而与A得为之无关。

2、开运算可以使图像缩小,闭运算可以使图像增大。

9.3数学图形学的运算的基本函数1、二值图像的膨胀运算dilate(BW,SE,alg,n),SE为一个数据结构,具体为什么,也不是特别清楚,alg=‘spatial’在空域上实现alg=‘frequency’,在频域上实现,无论空域上实现还是频域上实现,运算结果都一样,但是对于大图像来说,运算的速度会快一些n代表对图像进行膨胀的次数。

I=imread('rice.tif');imshow(I);a=ones(5);b=dilate(I,a);figure,imshow(b);2、erode(bw,SE,alg,n)此函数同dilate()函数的功能基本是一样的。

3、对图像进行指定的操作bwmorph(bw,operation,n)bw是二值图像,operation是指定的操作,为字符串,n代表进行操作的次数operation的可选值及其含义为:bothat,闭包运算,即先腐蚀,再膨胀,然后减去源图像bridge,作连接运算即将两个1中间相隔的一个0变为1;clean,去除孤立的亮点,如0 0 00 1 00 0 0变为0 0 00 0 00 0 0diag,采用对角线填充来去除8邻接的背景dilate用结构元素ones(3)作膨胀运算erode,用结构元素ones(3)作腐蚀运算fill,填充孤立的黑点,hbreak,断开H形连接,如1 1 10 1 01 1 1变为1 1 10 0 01 1 1majority,若像素的8邻域中有大于或等于5的元素为1,否则为0remove,如掉内点,即如果像素4的邻域都为1,则像素为0shrink,n=Inf,作收缩运算。

利用Matlab实现二值图像的形态学处理

利用Matlab实现二值图像的形态学处理

利用Matlab实现二值图像的形态学处理2006116185 郝春金数学形态这一名称是从形状研究得来的。

这种方法也说明了一种事实,即在许多机器视觉算法设计中,根据形状来思考问题是最自然也是最容易的。

形态方法有主页进行基于形状或图形思考。

形态方法中图像信息的基本单元是二值像素。

一.基本概念1. 膨胀已知二值图像A,如果A b1,A b2,…,A bn是由二值图像B={b1,b2,b3,…,b n}中像素值为1的点平移得到,则A由B平移的并称为A被B膨胀。

1.腐蚀腐蚀是膨胀的逆运算。

二值图像A经二值图像B腐蚀后在p点仍为1的充分必要条件是:B平移到B后,B中的1像素也是A中的1像素。

2.开运算用同一结构元腐蚀后在膨胀可去除比结构元小的所有区域像素点,而留下其余部分,这一顺序称为“开”运算。

3.闭运算与开运算顺序相反的过程是先膨胀后再腐蚀,称为“关”运算或“闭”运算。

二.Matlab中的仿真实现以图像rice.png为例。

原始图像为此例中,SE定义为3*3的方形矩阵,值全为1。

1. 膨胀IM2 = imdilate(IM,SE)SE为结构元,由strel函数定义。

膨胀后图像见下页。

2.腐蚀IM2 = imerode(IM,SE)腐蚀后图像见下页。

3.开运算IM2 = imopen(IM,SE)腐蚀后图像见下页。

4.闭运算IM2 = imclose(IM,SE)腐蚀后图像见下。

三.GUI界面实现通过matlab的guide制作GUI界面。

选择空白界面,然后自己添加元素。

设计界面如图所示。

添加菜单,如下图,只添加了文件和帮助两个菜单,下面有对应的子菜单。

最后添加各个按钮和菜单对于按钮的callback函数即可。

最后运行界面如下。

通过文件菜单中打开选择图像文件(示意图见下页),右侧运算面板中的四个按钮来实现对应的运算。

点击显示原始图像则可以显示选择的图像。

通过此程序可以实现对不同图像的形态学运算。

Matlab一种二值化图像的形态学操作程序

Matlab一种二值化图像的形态学操作程序

Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把一些小面积区域也保留下来;若把阈值增大到th1,小面积的区域没了,但是原来大面积的区域又会减小;若要直接去掉阈值th2二值化图像中面积小于某一值的的区域,需要计算每个区域的面积,计算量大,而且有的区域中并没有含有大于th1的点。

下面利用数学形态学的方法来解决上述问题。

这里主要是采用数学形态学中的腐蚀与膨胀操作,采用均值滤波、灰度图像高阈值二值化、种子点选择、灰度图像低阈值二值化和选择滤波相结合的方法,具体来说:腐蚀过程采用均值滤波和高阈值对第一细分图像二值化,滤掉面积较小的区域,得到较大的区域,然后选择每个区域的种子点;膨胀过程采用低阈值对第一细分图像二值化,保留含有种子点的区域,其它的均过滤掉。

经过腐蚀和膨胀操作后,得到所希望的结果,见下图。

程序如下:wmf10=imread('mwf1.bmp'); %读取图像wmf1=wmf10(:,:,1);%由于是灰度图像,三个页面相同,故只对第一页面数据操作figure(1);subplot(121);imagesc(wmf1);colormap(gray); %显示原图象h=fspecial('average',3);wmf1_filted=uint8(round(filter2(h,wmf1))); %均值滤波th1=0.94*max(max(wmf1)); %确定阈值th1wmf1th1=(wmf1_filted>th1); %按阈值th1二值化[wmf1th1_label numth1_label]=bwlabel(wmf1th1,8);rc=zeros(2,numth1_label); %选择种子点坐标for i=1:numth1_label[r c]=find(wmf1th1_label==i);rc(1,i)=r(2);rc(2,i)=c(2);endr=rc(1,:);c=rc(2,:);coe=1.4;th2=mean2(wmf1)+coe*std2(wmf1); %确定阈值th2wmf1th2=(wmf1>th2); %按阈值th2二值化wmf1th2_select=bwselect(wmf1th2,c,r,8); %保留含有种子点的前景区域subplot(122);imagesc(wmf1th2_select);colormap(gray);上述程序主要是采用了bwlabel和beselect函数,虽然没有直接使用Matlab的形态学操作的膨胀、腐蚀函数,但其实质过程和达到的效果是遵循形态学操作原理的,因而这也为形态学操作提供了其他的编程实现过程。

ch4-2 二值图像处理 matlab

ch4-2 二值图像处理 matlab

数字图像处理,2008年
中山大学信息科学与技术学院计算机系,黄剑
Average Face Approach
Resize PossibleBlock to 16 x 16 Possibility = Negative of Mean Square Error between Average Face and PossibleBlock.
Use functions provided by MATLAB
– Although we can implement any function from the scratch, the ones offered by MATLAB are optimized in terms of efficiency and robustness.
17
数字图像处理,2008年
中山大学信息科学与技术学院计算机系,黄剑
Face detection Framework
Face Detection Method:
– Neural Network based method
用许多的Training Data(一部份是脸部的、一部份是 非脸部的)去训练Neural Network,使其可以辨识出 什么影像是脸、什么影像不是脸 .
数字图像处理,2008年 中山大学信息科学与技术学院计算机系,黄
Elliptical Edge的方法是假设人脸都是近似椭 圆的形状,并且假设人脸与背景之间有一 条较明显的边缘线。所以我们只要在输入 影像中寻找有椭圆边缘的区域,在用此区 域和Average Face做比较,最后便可框出最 像人脸的1~5个区域。在判断椭圆边缘时, 我用有椭圆边缘与输入影像的边缘影像做 convolution,并取出最值最大点作为 PossibleBlock的中心点。

基于matlab的数字二值图像处理和形状分析的实现

基于matlab的数字二值图像处理和形状分析的实现

本科学生毕业论文论文题目:基于MATLAB的数字二值图像处理与形状分析实现学院:电子工程学院年级:2011专业:电子信息科学与技术*名:***学号:********指导教师:***2014年06月24日摘要数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能.由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好地为人们服务.数字图像处理是一种通过计算机采用一定算法对图形图像处理的技术.数字图像处理技术已经在各个领域上有了比较广泛的应用.图像处理的信息量很大,对处理速度的要求也比较高.MATLAB强大的运算和图像展示功能,使图像处理变得更加的简单和直观.本文介绍了MATLAB语言的特点,基于MATLAB的数字图像处理环境,介绍了如何利用MA TLAB及其图像处理工具箱进行图像处理的方法.主要论述了利用MATLAB实现图像的二值化,二值图像的腐蚀、膨胀、开、闭等形态学处理.关键词MATLAB;数字图像处理;二值图像AbstractDigital image processing is an emerging technology,with the development of computer hardware,real-time digital image processing has become possible due to digital image processing algorithms to appear,making it faster and faster processing speed,better for people services.Digital image processing is used by some algorithms Computer graphics image processing technology.Digital image processing technology has been used in various areas which have a relatively wide range of applications.The amount of information on the processing speed requirement is relatively high.MATLAB is good at computing and graphics display capabilities,so that image processing becomes more simple and intuitive.This paper introduces characteristics of MA TLAB language and this MA TLAB-based digital image processing environment,describes how to use the MATLAB Image Toolbox for its digital image processing,and through some examples to illustrate the use of MATLAB Image Processing Toolbox for image processing method.Mainly discuss the use of MA TLAB for image processing enhancement,binary image and its corrode and dilate and open and close.Key wordsMATLAB;digital image processing;image enhancement and binary image目录摘要 (I)Abstract (II)前言 (1)第一章数字图像处理综述 (2)1.1 数字图像处理简介 (2)1.1.1 数字图像处理的概念 (2)1.1.2 数字图像处理的发展 (2)1.2 数字图像处理的研究方法 (2)1.2.1 数字图像处理的基本特点 (2)1.2.2 数字图像处理常用方法 (3)1.3 数字图像处理的优点 (4)1.4 数字图像处理在生活中的应用 (4)1.5 数字图像处理的展望 (5)1.5.1 数字图像处理未来的发展 (5)1.5.2 在发展过程中要注意的问题 (5)第二章 MATLAB基本知识介绍 (6)2.1 MATLAB概述 (6)2.2 MATLAB的优势特点 (6)2.2.1 编程环境 (6)2.2.2 简单易用 (6)2.2.3 强处理能力 (7)2.2.4 图形处理 (7)2.2.5 程序接口 (7)2.2.6 应用软件开发 (8)2.3 MATLAB在图像处理中的应用 (8)2.3.1 常用图像操作 (8)2.3.2 图像增强功能 (8)2.3.3 灰度直方图均衡化 (8)2.3.4 灰度变换法 (9)2.3.5 平滑与锐化滤波 (9)2.3.6 边缘检测和图像分割功能 (9)第三章二值图像分析 (10)3.1 阈值 (10)3.2 几何特性 (11)3.2.1 尺寸和位置 (11)3.2.2 方向 (12)3.2.3 密集度和体态比 (14)3.3 投影 (14)3.4 游程长度编码 (16)3.5 二值图像算法 (17)3.5.1 定义 (17)3.5.2 连通成份标记 (19)3.5.3 欧拉数 (21)3.5.4 区域边界 (21)3.5.5 距离测量 (22)3.5.6 中轴 (23)3.5.7 细化 (24)3.5.8 扩展与收缩 (25)3.6 形态算子 (26)结论 (30)参考文献 (31)致谢 (32)前言数字图像处理(Digital Image Processing),就是利用数字计算机或者其他数字硬件,对从图像信息转换而得到的电信号进行某些数学运算,以提高图像的实用性.总的来说,数字图像处理包括点运算、几何处理、图像增强、图像复原、图像形态学处理、图像编码、图像重建、模式识别等.由于计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的利用等方面也变得越来越重要.MathWorks公司推出的MATLAB软件是学习数理知识的好帮手.应用MATLAB友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程和科研中的问题.图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面.随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大,已在国家安全、经济发展、日常生活中充当越来越重要的角色,对国计民生的作用不可低估.早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的.图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等.与此同时,图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科.随着图像处理技术的深入发展,从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展.人们已开始研究如何用计算机系统解释图像,实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉.很多国家,特别是发达国家投入更多的人力、物力到这项研究,取得了不少重要的研究成果.其中代表性的成果是70年代末MIT的Marr提出的视觉计算理论,这个理论成为计算机视觉领域其后十多年的主导思想.图像理解虽然在理论方法研究上已取得不小的进展,但它本身是一个比较难的研究领域,存在不少困难,因人类本身对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索新的领域.第一章数字图像处理综述1.1 数字图像处理简介1.1.1 数字图像处理的概念数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术.1.1.2 数字图像处理的发展图像处理工具箱提供一套全方位的参照标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发.可用其对有噪图像或退化图像进行去噪或还原、增强图像以获得更高清晰度、提取特征、分析形状和纹理以及对两个图像进行匹配.工具箱中大部分函数均以开放式MATLAB语言编写.这意味着可以检查算法、修改源代码和创建自定义函数.1.2 数字图像处理的研究方法1.2.1 数字图像处理的基本特点(1)目前,数字图像处理的信息大多是二维信息,处理信息量很大.如一幅256×256低分辨率黑白图像,要求约64kbit的数据量;对高分辨率彩色512×512图像,则要求768kbit 数据量;如果要处理30帧/秒的电视图像序列,则每秒要求500kbit~22.5Mbit数据量.因此对计算机的计算速度、存储容量等要求较高.(2)数字图像处理占用的频带较宽.与语言信息相比,占用的频带要大几个数量级.如电视图像的带宽约5.6MHz,而语音带宽仅为4kHz左右.所以在成像、传输、存储、处理、显示等各个环节的实现上,技术难度较大,成本亦高,这就对频带压缩技术提出了更高的要求.(3)数字图像中各个像素是不独立的,其相关性大.在图像画面上,经常有很多像素有相同或接近的灰度.就电视画面而言,同一行中相邻两个像素或相邻两行间的像素,其相关系数可达0.9以上,而相邻两帧之间的相关性比帧内相关性一般说还要大些.因此,图像处理中信息压缩的潜力很大.(4)由于图像是三维景物的二维投影,一幅图象本身不具备复现三维景物的全部几何信息的能力,很显然三维景物背后部分信息在二维图像画面上是反映不出来的.因此,要分析和理解三维景物必须作合适的假定或附加新的测量,例如双目图像或多视点图像.(5)数字图像处理后的图像一般是给人观察和评价的,因此受人的因素影响较大.由于人的视觉系统很复杂,受环境条件、视觉性能、人的情绪爱好以及知识状况影响很大,作为图像质量的评价还有待进一步深入的研究.另一方面,计算机视觉是模仿人的视觉,人的感知机理必然影响着计算机视觉的研究.1.2.2 数字图像处理常用方法(1)图像变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大.因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理).(2)图像编码压缩:图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量.压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行.(3)图像增强和复原:图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等.图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分.(4)图像分割:图像分割是数字图像处理中的关键技术之一.图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础.(5)图像描述:图像描述是图像识别和理解的必要前提.作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法.对于特殊的纹理图像可采用二维纹理特征描述.(6)图像分类(识别):图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类.图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类.1.3 数字图像处理的优点(1)再现性好.数字图像处理与模拟图像处理的根本不同在于,它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化.只要图像在数字化时准确地表现了原稿,则数字图像处理过程始终能保持图像的再现.(2)处理精度高.按目前的技术,几乎可将一幅模拟图像数字化为任意大小的二维数组,这主要取决于图像数字化设备的能力.对计算机而言,不论数组大小,也不论每个像素的位数多少,其处理程序几乎是一样的.换言之,从原理上讲不论图像的精度有多高,处理总是能实现的,只要在处理时改变程序中的数组参数就可以了.(3)适用面宽.图像可以来自多种信息源,它们可以是可见光图像,也可以是不可见的波谱图像.从图像反映的客观实体尺度看,可以小到电子显微镜图像,大到航空照片、遥感图像甚至天文望远镜图像.这些来自不同信息源的图像只要被变换为数字编码形式后,均是用二维数组表示的灰度图像(彩色图像也是由灰度图像组合成的,例如RGB图像由红、绿、蓝三个灰度图像组合而成)组合而成,因而均可用计算机来处理.即只要针对不同的图像信息源,采取相应的图像信息采集措施,图像的数字处理方法适用于任何一种图像.(4)灵活性高.图像处理大体上可分为图像的像质改善、图像分析和图像重建三大部分,每一部分均包含丰富的内容.由于图像的光学处理从原理上讲只能进行线性运算,这极大地限制了光学图像处理能实现的目标.而数字图像处理不仅能完成线性运算,而且能实现非线性处理,即凡是可以用数学公式或逻辑关系来表达的一切运算均可用数字图像处理实现.1.4 数字图像处理在生活中的应用图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面.随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大.(1)航天和航空技术方面的应用数字图像处理技术在航天和航空技术方面的应用,除了上面介绍的JPL对月球、火星照片的处理之外,另一方面的应用是在飞机遥感和卫星遥感技术中.(2)生物医学工程方面的应用数字图像处理在生物医学工程方面的应用十分广泛,而且很有成效.(3)通信工程方面的应用当前通信的主要发展方向是声音、文字、图像和数据结合的多媒体通信.(4)工业和工程方面的应用在工业和工程领域中图像处理技术有着广泛的应用,如自动装配线中检测零件的质量,并对零件进行分类,印刷电路板疵病检查.(5)军事公安方面的应用在军事方面图像处理和识别主要用于导弹的精确末制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等.(6)文化艺术方面的应用目前这类应用有电视画面的数字编辑,动画的制作,电子图像游戏,纺织工艺品设计.(7)机器人视觉,视频和多媒体,系统科学可视化电子商务等.1.5 数字图像处理的展望1.5.1 数字图像处理未来的发展经过对数字图像处理这门课程的学习,以及对数字图像处理技术在各个领域中应用的了解,我认为图像处理技术未来的发展大致体现在以下四个方面(1)超高速、高分辨率、立体化、多媒体、智能化和标准化方向发展(2)图像与图形相结合朝着三维成像或多维成像的方向发展(3)新理论和新算法的研究1.5.2 在发展过程中要注意的问题在数字图像处理进一步发展的过程中需要注意的问题主要有如下五个方面:(1)在进一步提高精度的同时着重解决处理速度问题;(2)加强软件研究,开发新的处理方法,特别要注意移植和借鉴其他学科的技术和研究成果,创造新的处理方法;(3)加强边缘学科的研究工作,促进图像处理技术的发展;(4)加强理论研究,逐步形成处理科学自身的理论体系;(5)时刻注意图像处理领域的标准化问题.第二章 MATLAB基本知识介绍2.1 MATLAB概述MATLAB由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境.它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式.MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件.在新的版本中也加入了对C,FORTRAN,C++,JA V A的支持.可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用.2.2 MATLAB的优势特点2.2.1 编程环境MATLAB由一系列工具组成.这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面.包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器.随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单.而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用.简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析.2.2.2 简单易用MATLAB是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点.用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行.新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式.使之更利于非计算机专业的科技人员使用.而且这种语言可移植性好、可拓展性极强,这也是MA TLAB能够深入到科学研究及工程计算各个领域的重要原因.2.2.3 强处理能力MATLAB是一个包含大量计算算法的集合.其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能.函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理.在通常情况下,可以用它来代替底层编程语言,如C和C++ .在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少.MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数.函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等.2.2.4 图形处理MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印.高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图.可用于科学计算和工程绘图.2.2.5 程序接口新版本的MATLAB可以利用MA TLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MA TLAB运行的C和C++代码.允许用户编写可以和MATLAB进行交互的C或C++语言程序.2.2.6 应用软件开发在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接.2.3 MATLAB在图像处理中的应用数字图像处理工具箱函数包括以下15类:、⑴、图像显示函数;⑵、图像文件输入、输出函数;⑶、图像几何操作函数;⑷、图像像素值及统计函数;⑸、图像分析函数;⑹、图像增强函数;⑺、线性滤波函数;⑻、二维线性滤波器设计函数;⑼、图像变换函数;⑽、图像邻域及块操作函数;⑾、二值图像操作函数;⑿、基于区域的图像处理函数;⒀、颜色图操作函数;⒁、颜色空间转换函数;⒂、图像类型和类型转换函数.MATLAB图像处理工具箱支持四种图像类型,分别为真彩色图像、索引色图像、灰度图像、二值图像,由于有的函数对图像类型有限制,这四种类型可以用工具箱的类型转换函数相互转换.MATLAB可操作的图像文件包括BMP、HDF、JPEG、PCX、TIFF、XWD 等格式.下面就图像处理的基本过程讨论工具箱所实现的常用功能.2.3.1 常用图像操作图像的读写与显示操作:用imread( )读取图像,imwrite( )输出图像,把图像显示于屏幕有imshow( ), image( )等函数.imcrop( )对图像进行裁剪,图像的插值缩放可用imresize( )函数实现,旋转用imrotate( )实现.2.3.2 图像增强功能图像增强是数字图像处理过程中常用的一种方法,目的是采用一系列技术去改善图像的视觉效果或将图像转换成一种更适合于人眼观察和机器自动分析的形式.2.3.3 灰度直方图均衡化均匀量化的自然图像的灰度直方图通常在低灰度区间上频率较大,使得图像中较暗区域中的细节看不清楚,采用直方图修整可使原图像灰度集中的区域拉开或使灰度分布均匀,从而增大反差,使图像的细节清晰,达到增强目的.直方图均衡化可用histeq( )函数实现.2.3.4 灰度变换法照片或电子方法得到的图像,常表现出低对比度即整个图像偏亮或偏暗,为此需要对图像中的每一像素的灰度级进行标度变换,扩大图像灰度范围,以达到改善图像质量的目的.这一灰度调整过程可用imadjust( )函数实现.2.3.5 平滑与锐化滤波平滑技术用于平滑图像中的噪声,基本采用在空间域上的求平均值或中值.或在频域上采取低通滤波,因在灰度连续变化的图像中,我们通常认为与相邻像素灰度相差很大的突变点为噪声点,灰度突变代表了一种高频分量,低通滤波则可以削弱图像的高频成分,平滑了图像信号,但也可能使图像目标区域的边界变得模糊.而锐化技术采用的是频域上的高通滤波方法,通过增强高频成分减少图像中的模糊,特别是模糊的边缘部分得到了增强,但同时也放大了图像的噪声.在MATLAB中,各种滤波方法都是在空间域中通过不同的卷积模板即滤波算子实现,可用fspecial( )函数创建预定义的滤波算子,然后用filter2( )或conv2( )函数在实现卷积运算的基础上进行滤波.2.3.6 边缘检测和图像分割功能边缘检测是一种重要的区域处理方法,边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来.如果一个像素落在边界上,那么它的邻域将成为一个灰度级变化的带.对这种变化最有用的两个特征是灰度的变化率和方向.边缘检测算子可以检查每个像素的邻域并对灰度变化率进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷积的方法.MA TLAB工具箱提供的edge( )函数可针对sobel算子、prewitt 算子、Roberts算子、log算子和canny算子实现检测边缘的功能.基于灰度的图像分割方法也可以用简单的MATLAB代码实现.除了以上基本的图像处理功能,MATLAB还提供了如二值图像的膨胀运算dilate( )函数、腐蚀运算erode( )函数等基于数学形态学与二值图像的操作函数.第三章 二值图像分析3.1 阈值视觉系统中的一个重要问题是从图像中识别代表物体的区域(或子图像),这种对人来说是件非常容易的事,对计算机来说却是令人吃惊的困难.为了将物体区域同图像其它区域分离出来,需要首先对图像进行分割.把图像划分成区域的过程称为分割,即把图像],[j i F 划分成区域k p p p ,,,21⋅⋅⋅,使得每一个区域对应一个候选的物体.下面给出分割的严格定义.定义 分割是把像素聚合成区域的过程,使得:==i ki P 1 整幅图像 (}{i P 是一个完备分割 ).ji P P j i ≠∅=, ,(}{i P 是一个完备分割). 每个区域i P 满足一个谓词,即区域内的所有点有某种共同的性质.不同区域的图像,不满足这一谓词.正如上面所表明的,分割满足一个谓词,这一谓词可能是简单的,如分割灰度图像时用的均匀灰度分布、相同纹理等谓词,但在大多数应用场合,谓词十分复杂.在图像理解过程中,分割是一个非常重要的步骤.通过阈值运算是否可以有效地进行图像分割,取决于物体和背景之间是否有足够的对比度.设一幅灰度图像],[j i F 中物体的灰度分布在区间],[21T T 内,经过阈值运算后的图像为二值图像],[j i F T ,即:⎩⎨⎧≤≤=其它如果0],[ 1],[21T j i F T j i F T (3-1)如果物体灰度值分布在几个不相邻区间内时,阈值化方案可表示为:⎩⎨⎧∈=其它如果0],[ 1],[Z j i F j i F T (3-2)其中Z 是组成物体各部分灰度值的集合.图3-1是对一幅灰度图像使用不同阈值得到的二值图像输出结果.。

Matlab中bwmorph函数的用法

Matlab中bwmorph函数的用法
'thin'
n=Inf时,减薄目标成线。没有孔洞的目标缩成最低限度的连通边;有孔洞的目标缩成连通环。
'tophat'
执行形态学“顶帽”变换操作,返回的图像是原图减去形态学开操作处理之后的图像(开操作:先腐蚀再膨胀)。
Operation是以下的字符串:
Operation
Description
'bothat'
是形态学上的“底帽”变换操作,返回的图像是原图减去形态学闭操作处理后的图像(闭操作:先膨胀再腐蚀)
'bridge'
连接断开的像素。也就是将0值像素置1如果他有两个非零的不相连(8邻域)的像素,比如:
1 0 0 1 1 0
'skel'
n=Inf时,移除目标边界像素,但是不允许目标分隔开,保留下来的像素组合成图像的骨架。
'spur'
移除刺激(孤立)像素。比如:
00 0 00 0 0 0
0 0 0 00 0 0 0
0 0 1 0变成0 0 0 0
0 1 0 00 1 0 0
1 1 0 01 1 0 0
'thicken'
n=Inf时,通过在目标外部增加像素加厚目标直到这样做最终使先前未连接目标成为8连通域。bworph:对二值图像的形态学操作。
BW2 = bwmorph(BW,operation)
BW2 = bwmorph(BW,operation,n)
BW2 = bwmorph(BW,operation)对二值图像应用形态学操作。
BW2 = bwmorph(BW,operation,n)应用形态学操作n次,n可以是Inf,这种情况下该操作被重复执行直到图像不再发生变化为止。

形态学matlab函数

形态学matlab函数

【函数】形态学运算IMOPEN形态学开运算。

对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。

使用相同的结构元素对图像进行腐蚀操作后进行膨胀操作。

用法:(1)IM2 = imopen(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态开运算。

参数SE 必须是一个单独的结构元素体,相对于一个对象数组。

(2)IM2 = imopen(IM,NHOOD)用结构元素strel(NHOOD)执行开运算。

NHOOD 是一个指定结构元素邻域的由0 和1 组成的数组。

举例:(1)用matlab、imopen函数估计背景灰度值:子程序保存为entropy.m文件,主程序直接运行(2)删除一幅图像中的小物体(来自Mathworks 公司英文帮助文件)I = imread('snowflakes.png'); %读入图像到工作空间并显示它imshow(I);se = strel('disk',5); %创建一个半径为5 个像素的盘状的结构元素I_opened = imopen(I,se); %通过盘状结构元素进行开运算,移除半径小于5 个像素的雪花点figure, imshow(I_opened,[]) ;IMCLOSE对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。

使用相同的结构元素对图像进行膨胀操作后进行腐蚀操作。

用法:(1)IM2 = imclose(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态闭运算。

参数SE 必须是一个单独的结构元素体,相对于一个对象数组。

形态学闭运算是先进行一次膨胀操作,再接着进行一次腐蚀操作,两次操作中使用同一个结构元素。

(2)IM2 = imclose(IM)对灰度形态学关闭或二值图像,图像,返回已关闭图像IM2。

这个结构元素SE必须是一个单一的结构元素的对象,而不是以一个数组的形式返回对象。

二值问题

二值问题

二值图像分析二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。

这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。

以这种方式来操作图像可以更容易识别出图像的结构特征。

5.1 引言二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式,可以通过调用MATLAB提供的im2bw()来实现,方法如下:I=imread('tire.tif');figure,imshow(I)J=im2bw(I);figure,imshow(J)title('二值化处理')原图和二值化的结果分别如图1和图2所示图1原图图2 二值化的结果5.2 二值形态学的基本运算数学形态学的基础是集合运算,我们把二值图像A看作是二维坐标点的集合,包含图像里为1的点,B通常是一个小的集合,作用类似于模板。

膨胀(Dilation)运算A⊕B dilate函数该函数能够实现二值图像的膨胀操作,有以下形式:BW2=dilate(BW1,SE)BW2=dilate(BW1,SE,…,n)其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE 队图像数据矩阵BW1执行膨胀操作。

输入图像BW1的类型为double 或unit8,输出图像BW2的类型为unit8。

BW2=dilate(BW1,SE ,…,n)表示执行膨胀操作n 次。

腐蚀(Erosion )运算A ΘB erode 函数该函数能够实现二值图像的腐蚀操作,有以下形式:BW2= erode(BW1,SE)BW2= erode(BW1,SE ,…,n)其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE 队图像数据矩阵BW1执行腐蚀操作。

输入图像BW1的类型为double 或unit8,输出图像BW2的类型为unit8。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把一些小面积区域也保留下来;若把阈值增大到th1,小面积的区域没了,但是原来大面积的区域又会减小;若要直接去掉阈值th2二值化图像中面积小于某一值的的区域,需要计算每个区域的面积,计算量大,而且有的区域中并没有含有大于th1的点。

下面利用数学形态学的方法来解决上述问题。

这里主要是采用数学形态学中的腐蚀与膨胀操作,采用均值滤波、灰度图像高阈值二值化、种子点选择、灰度图像低阈值二值化和选择滤波相结合的方法,具体来说:腐蚀过程采用均值滤波和高阈值对第一细分图像二值化,滤掉面积较小的区域,得到较大的区域,然后选择每个区域的种子点;膨胀过程采用低阈值对第一细分图像二值化,保留含有种子点的区域,其它的均过滤掉。

经过腐蚀和膨胀操作后,得到所希望的结果,见下图。

程序如下:
wmf10=imread('mwf1.bmp'); %读取图像
wmf1=wmf10(:,:,1);%由于是灰度图像,三个页面相同,故只对第一页面数据操作
figure(1);
subplot(121);imagesc(wmf1);colormap(gray); %显示原图象
h=fspecial('average',3);
wmf1_filted=uint8(round(filter2(h,wmf1))); %均值滤波
th1=0.94*max(max(wmf1)); %确定阈值th1
wmf1th1=(wmf1_filted>th1); %按阈值th1二值化
[wmf1th1_label numth1_label]=bwlabel(wmf1th1,8);
rc=zeros(2,numth1_label); %选择种子点坐标
for i=1:numth1_label
[r c]=find(wmf1th1_label==i);
rc(1,i)=r(2);rc(2,i)=c(2);
end
r=rc(1,:);
c=rc(2,:);
coe=1.4;
th2=mean2(wmf1)+coe*std2(wmf1); %确定阈值th2
wmf1th2=(wmf1>th2); %按阈值th2二值化
wmf1th2_select=bwselect(wmf1th2,c,r,8); %保留含有种子点的前景区域subplot(122);imagesc(wmf1th2_select);colormap(gray);
上述程序主要是采用了bwlabel和beselect函数,虽然没有直接使用Matlab的形态学操作的膨胀、腐蚀函数,但其实质过程和达到的效果是遵循形
态学操作原理的,因而这也为形态学操作提供了其他的编程实现过程。

有心的读者可以试试看,能否用dilate和erosion函数完成同样的任务。

matlab数学形态学图像边缘检测
blood = imread('test.jpg');
[x,y,z]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y,z); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255 for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(SI,'sobel', 0.11);
BW2=edge(SI,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm')。

相关文档
最新文档