0


毕业设计-基于 MATLAB 的图像分割算法研究及实现

前言

 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯基于 MATLAB 的图像分割算法研究及实现

课题背景和意义

图像分割是图像处理与理解、模式识别和人工智能等多个 领域中非常关键的问题,是计算机视觉技术中重要步骤,其作 用在汽车车型自动识别系统、检查癌细胞、精密零件表面缺陷 检测等领域中不可忽视。图像分割是通过将图像中感兴趣的对 象与其背景分割,分割出的区域作为特征提取的目标对象,特 征可以是像素、颜色、纹理等。最理想的分割结果就是分割出的 每一块区域都可以表示其对象的特征,可以通过对其特征的提 取进行图像的识别和重建等任务。在数字图像处理的大部分领域中,图像分割有着广泛的应用,如工业自动化、生产过程控制、在线产品检验、图像编码、文档图像处理、遥感和生物医学图像分析、保安监视,以及军事、体育等方面。在医学图像的处理与分析中,图像分割对于人们身体中发生病变的器官的三维显示或者对病变位置的确定与分析都起着有效地辅导作用;在对路面交通情况的分析应用中,可用图像分割技术从监控或航拍等模糊复杂背景中分出要提取的目标车辆。在实现数据转化为信息过程中,遥感图像的分割都起着非常重要的作用。

实现技术思路

一、MATLAB 开发环境简介

基于矩阵的 MATLAB 是目前应用广泛的设计编程软件,可 将复杂的逻辑算法以简单可靠的函数形式提供给用户,并可同时提供功能性及学术性工具箱,便于用户进行系统建模和仿真 分析。MATLAB 包含很多模块库,可以方便快捷的实现很多功 能,如数据分析、算法开发、图像处理和计算机视觉等,大大提 高的编程效率。

二、图像分割算法设计

**基于边缘检测到图像分割算法 **

灰度或结构等信息的突变称为边缘。根据图像不同区域边界像素灰度值变化比较剧烈的特点,首先检测出图像可能的边缘点,再按照一定策略连接成轮廓,从而实现不同区域的图像分割。边缘检测可借助空域微分算子卷积完成,空间域的微分在离散数字图像可以采用差分来近似。

基于一阶导数的边缘检测算子有 Roberts 算子、Sobel 算子、Prewitt 算子等,基于二阶导数的边缘检测算子有 Laplacian 算子、Wallis 算 子 ,LOG 算子(一种改进的方式),Canny 算子等。几种算子模板如表

在 MATLAB 中通过函数 BW=edge(I)来实现。该函数用于灰度图像边缘的提取,输入 I 为灰度图像,输出 BW 为黑白二值边缘图像,支持多种格式。下面对五组图片分别进行不同边缘检测算法的比较,结果如图

基于阈值的图像分割算法

阈值化图像分割的基本原理是选取一个或多个处于图像取值范围之中的灰度阈值,然后将图像中各个像素的灰度值与阈值进行比较,并根据比较结果将图像中的对应像素分成两类或多类,从而把图像划分成互不交叉重叠的区域的集合,达到图像分割的目的。

1、双峰法

双峰法是先计算原图的直方图,通过观察估计阈值(门限) T,一般取两个峰值间的谷值。 下面通过三组图片进行双峰法算法的图像分割,结果如图所示。首先根据直方图估计两个阈值,再对图片进行分割,可以看出不同阈值得到的分割效果是不一样的。

2、迭代阈值选取

为更好的确定阈值,需要根据目标和 背景的分布,自动确定分割阈值。主要算法步骤如下:(1)初始化 阈值 T1;(2)用 T 分割图像成两个集合:G1 和 G2,其中 G1 包含 所有灰度值小于 T 的像素,G2 包含所有灰度值大于 T 的像素; (3)计算 G1 中像素的平均值 m1 及 G2 中像素的平均值 m2;(4) 计算新的阈值:T2=(m1+m2)/2;(5)如果新阈值跟原阈值之间 的差值小于一个预先设定的范围,停止循环,否则继续 2-4 步。 下面对一组图片进行迭代法算法的图像分割,结果如图所示。

区域分裂合并

区域生长是从某个或者某些像素点出发,最后得到整个区域,进而实现目标提取。分裂合并差不多是区域生长的逆过程:从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取。四叉树分割后的图像

在这类方法中,最常用的方法是四叉树分解法(如上图所示)。设R代表整个正方形图像区域,P代表逻辑谓词。基本分裂合并算法步骤如下:

(1)对任一个区域,如果H(Ri)=FALSE就将其分裂成不重叠的四等份;

(2)对相邻的两个区域Ri和Rj,它们也可以大小不同(即不在同一层),如果条件H(Ri∪Rj)=TRUE满足,就将它们合并起来。

(3)如果进一步的分裂或合并都不可能,则结束。

分裂合并法的关键是分裂合并准则的设计。这种方法对复杂图像的分割效果较好,但算法较复杂,计算量大,分裂还可能破坏区域的边界。

MATLAB代码

%% 图像边缘检测不同方法比较

% Roberts、Sobel、Prewitt、LOG、Canny 算子对灰度图像分割的结果比较 clc

clear all;
close all;

f=imread('8_256_lena.bmp','bmp'); subplot(2,3,1);
subimage(f);title('原始图像”);

q, t]=edge(f,'roberts',ll'both'); subplot(2,3,2)
subimage(g);title('Roberts 算子对图像分割的结果')
[g, t]=edge(f'sobel',D,'both'); subplot(2,3,3);

subimage(g);title('Sobel 算子对图像分割的结果');
[g, t]=edge(f,prewitt',l],'both'); subplot(2,3,4)

subimage(g);title('Prewitt 算子对图像分割的结果');

[g, t]=edge(f,'log'); subplot(2,3,5);

subimage(g);title('LOG 算子对图像分割的结果');[g,t]=edge(f'canny') subplot(2,3,6);
subimaqe(q);title('Canny算子对图像分割的结果'); 

区域生长法分割图像

 %% 区域生长法分割图像

clc;
clear all;
close all;
f=imread('rice 1.bmp','bmp'); % f=imread('rice.png''png'); % 
f=imread('8 256 lena.bmp','bmp'); subplot(1,2,1);

subimage(f);

%选择三个种子点
Cloudy:
%选择三个种子点

seedx=[63,10,85];%rice 图的生长点

seedy=[30,56,60];

% seedx=[100.150.2271:%lena 图的生长点

% seedy=[56,130,189];

Cloudy:
hold on

plot(seedx,seedy,'gs','linewidth',1); title('原始图像及种子点位置');

f=double(f);

markerim=f==f(seedy(1),seedx(1)); for i=2:length(seedx)

markerim=markerim(f==f(seedy(i),seedx(i)));

end

%3 个种子点区域的阈值

thresh=[12,6,12];

maskim=zeros(size(f))

Cloudy:
for i=1:length(seedx)

g=abs(f-f(seedy(i),seedx(i)))<=thresh(i);

maskim=maskim/g;

Cloudy:
end

[g,nr]=bwlabel(imreconstruct(markerim,maskim),8);% g=mat2gray(g);%以灰度级显示,注释掉此行以二值图像显示

subplot(1.2,2);

subimage(g);

title('三个种子点区域生长分割结果');

实现效果图样例

对图像的阈值分割:

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后


本文转载自: https://blog.csdn.net/qq_37340229/article/details/128668367
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。

“毕业设计-基于 MATLAB 的图像分割算法研究及实现”的评论:

还没有评论