【数字图像处理】实验三 图像分割(MATLAB实现)

这篇具有很好参考价值的文章主要介绍了【数字图像处理】实验三 图像分割(MATLAB实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、实验意义及目的

二、实验内容

三、Matlab 相关函数介绍

四、算法原理

五、参考代码及扩展代码流程图

(1)参考代码流程图

(2)扩展代码流程图

六、参考代码

七、实验要求

(1)尝试不同的阈值选择方法,实现灰度图像二值化

(2)变换参数实现形态学滤波,查看滤波效果

(3)更改重建边界点数,查看效果

(4)自行设计方法实现图像分割,并计算分割区域相关参数


一、实验意义及目的

1 )进一步掌握图像处理工具 Matlab ,熟悉基于 Matlab 的图像处理函数。
(2)掌握图像分割方法,熟悉常用图像描述方法。

二、实验内容

打开一幅图像 Image ,使用 Matlab 图像处理函数,对其进行下列变换:
1 )将 Image 灰度化为 gray ,对其进行阈值分割转换为 BW
(2)对 BW 进行数学形态学滤波;
(3)对 BW 进行边缘跟踪,用红色线在图中标出;
(4)计算各区域边界点的傅里叶描绘子并用四分之一点重建边界;
(5)实验要求中的拓展内容。

三、Matlab 相关函数介绍

1im2bw 函数
BW = im2bw(I, level) :以 level 为阈值把灰度图像 I 转变为二值图像。
(2)graythresh 函数
level = graythresh(I) ,使用 Otsu 方法获取阈值, level 被归一化到 [0,1] 区间。
(3)imbinarize 函数
BW = imbinarize(I) :采用基于 OTSU 方法的全局阈值实现灰度图像 I 的二值化。
BW = imbinarize(I, METHOD) :采用 METHOD 指定的方法获取阈值实现灰度图像 I
二值化。 METHOD 可选 'global' 'adaptive' ,前者指定 OTSU 方法,后者采用局部自适应阈值
方法。
(4)bwboundaries 函数
搜索二值图像 BW 的外边界和内边界。
[B,L,N,A] = bwboundaries(BW,CONN,OPTIONS) :函数视 BW 中为 0 的元素为背景像素
点,为 1 的元素为待提取边界目标。 B 中的每个元素均为 Q×2 矩阵,矩阵中每一行包含边界
像素点的行坐标和列坐标, Q 为边界所含像素点的个数。 L ,标识矩阵,标识二值图像中被边
界所划分的区域; N ,区域的数目 N A ,被划分的区域的邻接关系。 CONN 4 ,搜索中采
4 连通方法,默认取 8 ,即 8 连通方法。 OPTIONS 指定算法的搜索方式,默认为 ‘holes’
搜索目标的内外边界, ‘noholes’ 只搜索目标的外边界。
(5)bwtraceboundary 函数跟踪二值图像 BW 中目标轮廓。
B = bwtraceboundary(BW,P,FSTEP) :目标区域取值非 0 ;参数 P 是初始跟踪点的行列坐标
二元矢量; FSTEP 表示初始查找方向,用于寻找对象中与 P 相连的下一个像素,可取 'N' 'NE'
'E' 'SE' 'S' 'SW' 'W' 'NW' ;返回值 B 为边界坐标值,是一个 Q×2 矩阵。
(6)strel 函数
  创建形态学结构元素。
  SE = strel(shape,parameters) ,创建一个由 shape 指定的结构元素,其中 shape 的种类有:
  arbitrary pair diamond periodicline disk rectangle line square octagon ,参数     parameters
  一般控制 SE 的大小。
(7)imdilate 函数
  IM2 = imdilate(IM, SE) :膨胀图像 IM ,返回膨胀后的图像 IM2 SE 是结构元素。
(8)imerode 函数
  IM2 = imerode(IM,SE) :腐蚀图像 IM ,返回腐蚀后的图像 IM2 SE 是结构元素。
(9)imopen 函数
  IM2 = imopen(IM,SE) :对图像 IM 进行开运算,返回图像为 IM2 SE 是结构元素。
10imclose 函数
  IM2 = imclose(IM,SE) :对图像 IM 进行闭运算,返回图像为 IM2 SE 是结构元素。
11fft fft2 函数
  fft(X) :对序列 X 进行 DFT 运算。
  fft2(X) :对矩阵 X 进行二维 DFT 运算。
12ifft ifft2 函数
  ifft(X) :对 X 进行 IDFT 运算。

  ifft2(F):对 F 进行二维 IDFT 运算。

四、算法原理

  图像分割是指把一副图像分成不同的具有特定性质区域的图像处理技术,将这些区域提取出来以便进一步提取特征,是由图像处理到图像分析的关键步骤。图像分割由于其重要性一直是图像处领域的研究重点。其中阈值分割方法是根据图像灰度值的分布特性确定某个阈值来进行图像分割的一种方法。设原灰度图像为 f (x, y) ,通过某种准则选择一个灰度值T 作为阈值,比较各像素值与T 的大小关系:像素值大于等于T 的像素为一类,变更像素值为 1;像素值小于T 的像素点为另一类,变更其像素值为 0公式如下:

    

【数字图像处理】实验三 图像分割(MATLAB实现)

 文章来源地址https://www.toymoban.com/news/detail-447017.html

而边界跟踪是指根据某些严格的“探测准则”找出目标物体轮廓上的像素,即确定边界的起 始搜索点。在根据一定的“跟踪准则”找出目标物体上的其他像素,直到符合跟踪终止条件。

  边界描述是指用相关方法和数据来表示区域边界。边界描述中既含有几何信息,也含有丰富的形状信息,是一种很常见的图像目标描述方法。傅里叶描绘子的方法主要利用 DFT描绘子重建区域边界曲线。由于傅里叶的高频分量对应于一些细节部分,而低频分量则对应基本形状,因此,重建时可以只使用复序列的前 M 各较大系数其余置零

   关于图像分割,就不得不提起经典又传统的分水岭算法了。传统的分水岭分割算法,是一种基于拓扑理论的数学形态学的分割方法,传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法。传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆地,而集水盆地的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每-一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸人水中,随着浸入的加深, 极小值表面,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆地汇合处构筑大坝如下每一个局部极小值的影响域慢慢向外扩展,在两个集水盆地汇合处构筑大坝如下图所示,即形成分水岭。分水岭变换通过不同的水系排水来分离区域,达到图像图所示,即形成分水岭.分水岭变换通过不同的水系排水来分离区域,达到图像分割的目的。

五、参考代码及扩展代码流程图

(1)参考代码流程图

【数字图像处理】实验三 图像分割(MATLAB实现)

 

(2)扩展代码流程图

【数字图像处理】实验三 图像分割(MATLAB实现)

 

六、参考代码

参考代码中实现了图像的阈值分割、数学形态学滤波、边缘跟踪、傅里叶描绘子计算及
重建。
Image1=im2double(imread('plane.jpg'));
gray=rgb2gray(Image1);
T=graythresh(gray);%使用 Otsu 方法获取阈值,T 被归一化到[0,1]区间。
BW=im2bw(gray,T);%以 T 为阈值把灰度图像 I 转变为二值图像。
figure,imshow(BW),title('二值化图像');
SE=strel('square',3);%创建一个由square指定的结构元素,参数3控制 SE 的大小。
Morph=imopen(BW,SE); %对图像BW进行开运算,返回图像为Morph,SE是结构元素
Morph=imclose(Morph,SE);
figure,imshow(Morph),title('形态学滤波');
[B L]=bwboundaries(1-Morph);%搜索二值图像BW的外边界和内边界
figure,imshow(L),title('划分的区域');
hold on;
for i=1:length(B)
 boundary=B{i};
 plot(boundary(:,2),boundary(:,1),'r','LineWidth',2);
end
M=zeros(length(B)); 
for k=1:length(B) 
 N=length(B{k}); 
 if N/2~=round(N/2) 
 B{k}(end+1,:)=B{k}(end,:); 
 N=N+1;
 end
 M(k)=[N*3/4]; 
end
S=zeros(size(Morph)); 
figure,imshow(S);
hold on;
for k=1:length(B) 
 z=B{k}(:,2)+1i*B{k}(:,1); 
 Z=fft(z); 
 [Y I]=sort(abs(Z)); 
 for count=1:M(k) 
 Z(I(count))=0; 
 end
 zz=ifft(Z);%对Z进行IDFT 运算。 
 plot(real(zz),imag(zz),'w'); 
end
程序运行效果如下:
【数字图像处理】实验三 图像分割(MATLAB实现)

 

七、实验要求

1. 熟悉 Matlab 函数,读懂参考代码;
2. 拓展内容:

(1)尝试不同的阈值选择方法,实现灰度图像二值化

代码:

I=imread('plane.jpg');
%人工选定阈值进行分割,选择阈值为150
[width,height]=size(I);
T1=150;
for i=1:width
    for j=1:height
        if(I(i,j)<T1)
            BW1(i,j)=0;
        else 
            BW1(i,j)=1;
        end
    end
end
BW2 = im2bw(BW1);
figure;imshow(BW2),title('人工阈值进行分割');

运行结果:

【数字图像处理】实验三 图像分割(MATLAB实现)

 

 

(2)变换参数实现形态学滤波,查看滤波效果

代码:


Image1=im2double(imread('plane.jpg'));
gray=rgb2gray(Image1);
T=graythresh(gray);
BW=im2bw(gray,T);
figure,imshow(BW),title('二值化图像');
SE=strel('disk',3);
Morph=imopen(BW,SE);
Morph=imclose(Morph,SE);
figure,imshow(Morph),title('形态学滤波');

运行结果:

【数字图像处理】实验三 图像分割(MATLAB实现)

 

(3)更改重建边界点数,查看效果

代码:

Image1=im2double(imread('plane.jpg')); 
gray=rgb2gray(Image1); 
T=graythresh(gray); 
BW=im2bw(gray,T); 
[B L]=bwboundaries(1-BW); 
figure,imshow(L),title('划分的区域'); 
hold on; 
for i=1:length(B) 
boundary=B{i}; 
plot(boundary(:,2),boundary(:,1),'r','LineWidth',1); 
end 
M=zeros(length(B),4); 
for k=1:length(B) 
N=length(B{k}); 
if N/2~=round(N/2) 
B{k}(end+1,:)=B{k}(end,:); 
N=N+1; 
end 
M(k,:)=[N/2 N*7/8 N*15/16 N*63/64]; 
end 
S=zeros(size(Morph)); 
for m = 1:4 
figure,imshow(S); 
hold on; 
for k=1:length(B) 
z=B{k}(:,2)+1i*B{k}(:,1);Z=fft(z); 
[Y I]=sort(abs(Z)); 
for count=1:M(k,m) 
Z(I(count))=0; 
end 
zz=ifft(Z); 
plot(real(zz),imag(zz),'w'); 
end 
end 

运行结果:

【数字图像处理】实验三 图像分割(MATLAB实现)

 

(4)自行设计方法实现图像分割,并计算分割区域相关参数

代码:

img=imread('plane.jpg');
subplot(2,3,1);
imshow(img);
C = makecform('srgb2lab');       %设置转换格式
img_lab = applycform(img, C);
 
ab = double(img_lab(:,:,2:3));    %取出lab空间的a分量和b分量
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
 
nColors = 3;        %分割的区域个数为3
[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3);  %重复聚类3次
pixel_labels = reshape(cluster_idx,nrows,ncols);
subplot(2,3,2);
imshow(pixel_labels,[]), title('聚类结果');
 
 
%显示分割后的各个区域
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);
 
for k = 1:nColors
    color = img;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
end
subplot(2,3,3);
imshow(segmented_images{1}), title('分割结果——区域1');
subplot(2,3,4);
imshow(segmented_images{2}), title('分割结果——区域2');
subplot(2,3,5);
imshow(segmented_images{3}), title('分割结果——区域3');

运行结果:

【数字图像处理】实验三 图像分割(MATLAB实现)

 

到了这里,关于【数字图像处理】实验三 图像分割(MATLAB实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字图像处理:实验六 图像分割

    数据分割是由图像处理到图像分析的关键步骤,是图像识别和计算机视觉至关重要的预处理,图像分割后提取的目标可用于图像识别、特征提取,图像搜索等领域。图像分割的基本策略主要是基于图像灰度值的两个特性,即灰度的不连续性和灰度的相似性,因此图像分割方法

    2024年02月06日
    浏览(52)
  • 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    1 理解阈值分割的依据及确定阈值的方法; 2 掌握常用的边缘检测算子的使用方法,加深对不同算子优缺点的理解; 3 能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能; 1. 直方图法 测试图像:coins.png 原理:观察该图像的直方图,手动选取谷底点作为阈值对

    2024年02月05日
    浏览(61)
  • 数字图像处理——实验五 基于图像分割的车牌定位识别

    (1)掌握车牌阈值分割; (2)掌握基于形态学计算的图像分割; (3)掌握图像的二值化; (4)掌握基于像素投影的字符分割; (5)掌握字符识别原理。 (1)计算机; (2)Python 3.x及PyCharm软件; (3)需进行车牌识别的图片。 注: opencv-python 使用的是3.x 版本 (1) 图像灰

    2024年02月08日
    浏览(70)
  • 形态学图像处理和图像分割MATLAB实验

    一、实验目的 理解腐蚀和膨胀的原理,掌握开运算、闭运算及形态学的边界提取。 掌握孤立点检测、线检测和边缘检测的方法。 掌握全局阈值处理的方法。 二、实验内容 1. 开运算和闭运算实验。 图1(a)显示了一幅被噪声图像污染的指纹图像,图1(b)给出了结构元,请自编程

    2024年02月06日
    浏览(51)
  • (数字图像处理MATLAB+Python)第十章图像分割-第一、二节:阈值分割和边界分割

    图像分割 :在对图像的研究和应用中,人们往往仅对图像中的某些目标感兴趣,这些目标通常对应图像中具有特定性质的区域。图像分割是指把一幅图像分成不同的具有特定性质区域的图像处理技术,将这些区域分离提取出来,以便进一步提取特征和理解 图像分割方法多种

    2024年02月16日
    浏览(65)
  • (数字图像处理MATLAB+Python)第十章图像分割-第四,五节:分水岭分割和综合案例

    分水岭分割 :图像处理中常用的一种分割方法,它基于图像中灰度或颜色的变化来划分不同的区域。分水岭分割算法的原理是基于地理学上的分水岭概念。将图像看作一个 地貌图 ,在图像中低洼的部分被看作水池,而高处则表示山脉。通过在图像中加入水并让其逐渐充满,

    2024年02月10日
    浏览(52)
  • 数字图像处理实验之Matlab对图像的基本处理

    1、提取Lena图像的左半上角部分,与原始Lena图像在同一个figure中显示,并做适当命名 效果图 2、利用 imnoise , 对原始Lena图像叠加高斯噪声,产生4幅、14幅、140幅的含噪图像。对这些含噪图像采用 相加  运算,来验证、比较图像相加消除叠加性噪声的效果。将原始图像、1幅噪

    2024年02月03日
    浏览(64)
  • 数字图像处理之matlab实验(五):形态学图像处理

    常见的形态学处理包括腐蚀、膨胀、开运算、闭运算。不同的操作有不同的作用,同样的操作在不同类型的图片上也有不同效果,具体效果如下表格所示。要求熟练掌握对二值图像的形态学处理。 不同操作对不同类型图像处理效果 一、对二值图像进行处理 1、结构元素 在开

    2024年02月04日
    浏览(65)
  • MATLAB【数字图像处理】 实验一:图像处理基本操作(平移、放大、缩小、旋转、插值)

    1、熟悉并掌握MATLAB工具的使用;  2、实现图像的读取、显示、存储、平移、镜像、放大、缩小及旋转操作; 3、掌握常用的插值方法,并了解其优缺点。 Matlab 2020B 1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分别显示RGB图像和灰度图像,注上文字标

    2024年02月06日
    浏览(49)
  • 数字图像处理之matlab实验(三):空间滤波器

    空间滤波,就是在原图像上,用一个固定尺寸的模板去做卷积运算,得到的新图像就是滤波结果。滤波,就是过滤某种信号的意思。过滤哪种信号取决于模板设计,如果是锐化模板,处理后就保留高频信号,如果是平滑模板,处理后就保留低频信号。 (1)模板运算 图像处理

    2024年04月28日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包